Compare commits

..

101 Commits

Author SHA1 Message Date
Cell 9d1ab1a578 🔖 Chore(release): 0.3.8 2024-06-25 12:23:54 +08:00
Cell ca73ca2066 💄 Style: scrollbar styles compatible with modern and legacy browsers 2024-06-25 12:23:21 +08:00
Cell 678e2c0053 Feat: add spotify shortcode support (resolve #450) 2024-06-08 12:27:04 +08:00
Cell 7e2e1006f1 💄 Style: show link icon when target heading element 2024-06-06 23:12:26 +08:00
Cell 256f491244 📝 Docs: update README 2024-06-06 20:50:38 +08:00
Cell 6eaae74708 🔒 Chore: upgrade katex to fix 3 Dependabot alert in katex.min.js 2024-06-06 11:06:04 +08:00
Cell 5c4de3ae21 🔒 Chore: upgrade crypto-js to fix 1 Dependabot alert in crypto-js 2024-06-06 11:00:21 +08:00
Cell 8db70c5829 📝 Docs: update hugo.toml 2024-06-06 10:11:06 +08:00
Cell b4940f46ea Feat: avoid using :has to be compatible with older browsers 2024-06-06 10:03:18 +08:00
Cell cbde3f0898 🚸 Feat: replace localStorage with sessionStorage for FixIt auto bookmark 2024-06-04 15:23:29 +08:00
Cell 4c9e20b377 💄 Style: add border radius for icon of card link 2024-06-04 11:15:26 +08:00
Cell 1a454de9d2 💄 Style: use default style for typeit 2024-06-04 11:13:23 +08:00
Abdul Halim Daud b998371564 Feat: add turnstileKey to waline 2024-05-27 17:56:13 +08:00
Abdul Halim Daud 9679c3442a 🐛 Fix: waline source map error 2024-05-27 17:56:13 +08:00
Cell d908af0a27 📝 Docs: update README 2024-05-23 12:40:20 +08:00
Cell b1f5515beb 📝 Docs(ignore): update README 2024-05-23 12:23:35 +08:00
Cell 069355cc70 📝 Docs: repalce of contributos workflow with GitHub contributors link 2024-05-23 12:18:48 +08:00
Tim Yang 6cc4d44ef4 💄 Style: upgrade the name and icon of "twitter" to "X" in share and social part (#443) 2024-05-23 11:43:09 +08:00
Cell 3c4284eb21 💄 Style: update douyin shortcode style in mobile 2024-05-22 12:20:34 +08:00
Cell a985b0e789 🔥 Feat: remove params.customFilePath 2024-05-22 11:45:14 +08:00
Cell 70afe3e883 💄 Style: update douyin shortcode style in mobile 2024-05-22 11:42:34 +08:00
Cell efd7b86b67 🔖 Chore(release): 0.3.7 2024-05-21 22:31:10 +08:00
Cell d7c06360c2 🎉 Feat: add douyin shortcode support 2024-05-20 14:08:30 +08:00
Cell aa68514546 🔍 Feat: add default size for images 2024-05-17 17:37:59 +08:00
Cell 6b65ca8946 🌐 Docs: update I18n transitions 2024-05-17 14:07:03 +08:00
Cell 3e6dfc337b Merge pull request #442 from LoongmaSpirit/loongma-2024-5-13
 Feat: Add a custom domain setting option for Giscus, configured at `params.page.comment.giscus.origin`
2024-05-13 17:53:14 +08:00
loongma d82fefa7dd Feat: Add a custom domain setting option for Giscus, configured at params.page.comment.giscus.origin 2024-05-13 17:47:10 +08:00
Cell f13e95950a 📝 Docs(ignore): update README 2024-05-09 17:01:00 +08:00
Cell df7443951b 🔧 Chore(ignore): add ignoreCommitPattern config for auto changelog 2024-05-09 16:34:16 +08:00
Cell 71e855ab08 🚚 Feat: the parameter params.customFilePath and params.footer.custom is deprecated since v0.3.7, use layouts/partials/custom.html instead 2024-05-09 16:14:20 +08:00
Cell eb0acca980 Feat: add unified custom template entry file layouts/partials/custom.html 2024-05-09 15:44:57 +08:00
Cell f32402dcdf 🔖 Chore(release): 0.3.6 2024-05-07 17:17:26 +08:00
Cell 3e60685d5a ⬆️ Chore: update min hugo version to 0.123.0 2024-05-07 17:06:48 +08:00
Cell 3682a2a1d3 💄 Style: update card link image style 2024-05-07 17:06:01 +08:00
Cell 4d07d872d5 Revert " Perf: use zhihu API to get shortcut image from a link (#391)"
This reverts commit a1e123ac02.
2024-05-07 16:37:47 +08:00
Cell a1e123ac02 Perf: use zhihu API to get shortcut image from a link (#391) 2024-05-07 15:40:12 +08:00
Cell 6c3c3d7a9a 🐛 Fix: get remote image error in link shortcode (#391) 2024-05-07 12:38:52 +08:00
Cell a66bc4e0d1 📝 Docs: update hugo.toml config order 2024-05-07 10:31:24 +08:00
Cell b7e9c6166b Feat: add capitalize automatic headings config at params.page.heading.capitalize (#421) 2024-05-07 10:25:52 +08:00
Cell df47c49726 🔧 Chore: update auto changelog template 2024-05-06 16:44:03 +08:00
dependabot[bot] c881715c2a ⬆️ Chore(deps): bump peaceiris/actions-hugo from 2 to 3 (#441)
Bumps [peaceiris/actions-hugo](https://github.com/peaceiris/actions-hugo) from 2 to 3.
- [Release notes](https://github.com/peaceiris/actions-hugo/releases)
- [Changelog](https://github.com/peaceiris/actions-hugo/blob/main/CHANGELOG.md)
- [Commits](https://github.com/peaceiris/actions-hugo/compare/v2...v3)

---
updated-dependencies:
- dependency-name: peaceiris/actions-hugo
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-06 16:43:27 +08:00
Cell b32370803b 🔖 Chore(release): 0.3.5 2024-05-06 16:32:51 +08:00
Cell 020a8fdbcc Feat: add titleIcon font matter (#421) 2024-05-06 16:32:33 +08:00
Cell b06b89cc11 🔥 Feat: the type:friends in front matter is removed. use layout:friends instead. 2024-05-06 16:02:22 +08:00
Cell ba4b506b2f Feat: use strings.Title for post title and other titles (#421)
Closes #421
2024-05-06 16:00:29 +08:00
Cell 51bffc18b5 📝 Docs: fix typo 2024-05-06 11:06:29 +08:00
Cell 87f0fe68ae 🔥 Feat: remove params.dev.githubtoken adn replace with environment variable HUGO_PARAMS_GHTOKEN 2024-04-30 15:54:13 +08:00
Cell c2d168c6d1 Feat: add card-icon parameter for link shortcode (#391) 2024-04-30 13:01:00 +08:00
Cell c1b61c7997 📝 Docs: update Security Policy 2024-04-30 00:24:15 +08:00
Cell 5098685763 🔧 Chore: update Gravatar host list 2024-04-29 23:53:21 +08:00
Cell 3c886553db 💄 Style: add fontawesome icon for reward button 2024-04-29 22:53:11 +08:00
Cell 84bca1af4f 🔧 Chore: remove unnecessary parameters in package.json
replace with: `npm run server -- --bind 0.0.0.0`
2024-04-29 22:33:32 +08:00
Cell 851b8e48cb 💄 Style: refactor common text color classes 2024-04-29 22:28:43 +08:00
Cell 89beb8fe4f 💄 Style: refactor hr tag style and add awesome hr style 2024-04-29 22:19:45 +08:00
Cell 462506cb92 💄 Style: refactor heading style 2024-04-29 17:08:07 +08:00
Cell f6ed1ce8fe Revert: use .Title at summary to show post title 2024-04-29 15:14:42 +08:00
Cell b52b31a0cd 🚨 Chore: avoid code scanning alerts 2024-04-26 11:05:28 +08:00
William Wang 12ada20fb8 feat: support lang in giscus config
(cherry picked from commit 1c7a5b01b167d8bcbea422535dc1faf36a480cce)
2024-04-26 10:26:31 +08:00
Cell 39e6466d78 📝 Docs: update REAMDE 2024-04-26 10:06:40 +08:00
Cell fd0b171e5f 🔖 Chore(release): 0.3.4 2024-04-25 17:33:49 +08:00
Cell 7ceed732d2 🔧 Chore: update npm scripts 2024-04-25 17:33:25 +08:00
Cell e07904b0f6 🔖 Chore(release): 0.3.3 2024-04-25 13:12:25 +08:00
Cell 5f5d019f09 🔧 Chore: update release workflow 2024-04-25 13:12:02 +08:00
Cell f4e8babd12 🐛 Fix: unencoded Content in Search Leads to JavaScript Execution Risk in autocomplete-js
Fixes #416
2024-04-25 10:46:55 +08:00
Cell 1ed0acdf35 🐛 Fix: fix echarts and mermaid theme switch error 2024-04-24 20:14:17 +08:00
Cell 3b89a4eaab Feat: refactor FixItDecryptor and add confirm btn
Resolved #437
2024-04-24 17:39:17 +08:00
Cell 20433ed50d 🐛 Fix: using fixit-encryptor shortcode in an unencrypted article caused other styles of the article to not take effect
Fixes #410
2024-04-24 10:35:13 +08:00
Cell 6c83d0630c 🐛 Fix: fix fixit-encryptor shortcode invalid
Fixes #410
Fixes #429
Caused by #420
2024-04-24 09:52:03 +08:00
Cell 79b5c27ed8 🐛 Fix: fix syntax error 2024-04-24 08:59:36 +08:00
asaraog dfeaf0e9a7 🎉 Feat: add Hindi language 2024-04-24 08:59:36 +08:00
Cell 1e493fef48 ⬆️ Fix: update Artalk comments to the latest version and and useBackendConf param
Fixes #415
2024-04-23 17:42:53 +08:00
Cell 7f19569336 🔧 Chore: improve auto changelog configuration
Resolved #434
2024-04-22 21:58:06 +08:00
Cell 429698a096 🔧 Chore: add changelog template and workflow 2024-04-22 17:38:56 +08:00
Cell 09440190aa 🐛 Fix: fix image llightgallery render error (#420) 2024-04-22 12:15:51 +08:00
Cell 1217640d40 🍻 Chore: add random staging id for staging element 2024-04-22 11:31:11 +08:00
Cell 300bbe9a44 🔥 Chore: remove data store in id partials function 2024-04-22 11:23:25 +08:00
Cell 7ec41cdb00 ♻️ Refactor: refactor echarts shortcode data store way (#420) 2024-04-22 11:06:58 +08:00
Cell fd13ca782b ♻️ Refactor: refactor mapbox shortcode data store way (#420) 2024-04-22 10:11:05 +08:00
Cell bae1678c59 🐛 Fix: fix typeit shotrcode miss space when build with --minify param 2024-04-20 17:06:08 +08:00
Cell 72bd72f5ed ♻️ Refactor: refactor typeit shortcode and feature (#420) 2024-04-20 16:30:16 +08:00
Cell c09f141034 ♻️ Refactor: refactor code block rendering 2024-04-19 00:33:35 +08:00
Cell a2d8eaa249 🐛 Fix: fix encrypted-hidden invaild in mobile 2024-04-19 00:31:51 +08:00
Cell ff8e5fc7bf 💄 Style: update comment iframe width 2024-04-13 11:11:43 +08:00
Cell 84e9eea483 Feat: add partial function get-remote-json, and deprecated getJSON function 2024-04-10 15:39:54 +08:00
Cell 5705048952 Feat: add githubTokenHeader into Scratch 2024-04-10 14:34:19 +08:00
Cell d379911220 Feat: add new partial function format-number 2024-04-10 11:04:44 +08:00
Cell 773a8a7eb9 Perf: code optimization 2024-04-08 17:47:57 +08:00
Cell 6ab33ff7bf Feat: add onlyMainSection option for page auto heading numbering 2024-04-08 17:46:31 +08:00
Cell dc0b96210a 📝 Docs: update README 2024-04-06 13:41:37 +08:00
Cell 4dc8d0f7d7 💄 Style: use the same proportions as the cover image of https://dev.to/ 2024-03-27 17:38:34 +08:00
Cell 76fec05da2 🐛 Fix: fix search config read error 2024-03-26 16:38:48 +08:00
Cell 54c773368e Feat: improve readme template 2024-03-26 16:37:35 +08:00
Cell 05693d8b4c 🔧 Chore: update giscus.json 2024-03-26 12:16:11 +08:00
Cell 38cf4ee0de 🐛 Fix: mermaid init error 2024-03-23 21:42:10 +08:00
Cell 3df577cb0d ⬆️ Fix: bump Mermaid from 9.x to 10.x and fix error (#420) 2024-03-08 16:23:37 +08:00
Cell 063d8fa219 🐛 Fix: fix shortcode render error (#420)
mermaid, echarts, music
2024-03-07 22:09:36 +08:00
Cell 7f38d99ae4 💄 Style: update define list style 2024-03-07 15:41:22 +08:00
Cell c771bce957 Docs: update license 2024-03-01 14:43:48 +08:00
Cell 2ea592b4a3 🐛 Fix: use function to get params replace of .Scatch (#420) 2024-02-23 20:50:52 +08:00
Cell a9fd15e47d 🔧 Chore: update custom.js.example to ES6 style 2024-02-23 17:27:49 +08:00
Cell d6be3c1fc2 🔧 Chore: expose theme version number to theme.js 2024-02-23 17:03:19 +08:00
142 changed files with 2045 additions and 3085 deletions
+19
View File
@@ -0,0 +1,19 @@
{
"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
@@ -0,0 +1,31 @@
// 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
@@ -0,0 +1,70 @@
# 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}}
+2 -2
View File
@@ -13,9 +13,9 @@ jobs:
submodules: recursive # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
uses: peaceiris/actions-hugo@v3
with:
hugo-version: latest
extended: true
- name: Build Hugo static files
run: hugo -v --source=docs --gc --minify
run: hugo -v --source=demo --gc --minify
-27
View File
@@ -1,27 +0,0 @@
name: Generate Contribute List
on:
push:
branches:
- master
workflow_dispatch:
jobs:
contrib-readme-job:
runs-on: ubuntu-latest
name: A job to automate contribute list in contributors.md file
steps:
- name: First Contribution Check
id: first-check
uses: sukki37/first-contribution-check-action@v1.0.0
env:
GITHUB_TOKEN: ${{ secrets.CONTRIBUTORS_TOKEN }}
- name: Contribute List
uses: akhilmhdh/contributors-readme-action@master
if: ${{ steps.first-check.outputs.isNewContributor == 'true' }}
with:
readme_path: "contributors.md"
image_size: 100
commit_message: ":busts_in_silhouette: Chore(contributor): contrib-readme-action has updated contributors.md"
committer_username: "github-actions[bot]"
committer_email: "github-actions[bot]@users.noreply.github.com"
env:
GITHUB_TOKEN: ${{ secrets.CONTRIBUTORS_TOKEN }}
+45
View File
@@ -0,0 +1,45 @@
# This is a basic workflow to help you get started with Actions
name: Release for new tag
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
tags:
- 'v*.*.*'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for generating release notes
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install dependencies and generate release notes
run: |
npm install
npm run release -- --starting-version ${{ github.ref_name }}
- name: GitHub Release
uses: softprops/action-gh-release@v2
with:
# Creates a draft release. Defaults to false
draft: true
body_path: CHANGELOG.md
+1 -1
View File
@@ -25,4 +25,4 @@ $RECYCLE.BIN/
## Linux
.directory
CHANGELOG.md
+1 -1
View File
@@ -2,7 +2,7 @@ The MIT License (MIT)
Copyright (c) 2018 LIUZHICHAO.COM
Copyright (c) 2019-2020 DILLONZQ.COM
Copyright (c) 2021-2023 LRUIHAO.CN
Copyright (c) 2021-2024 Lruihao (https://lruihao.cn)
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
+32 -63
View File
@@ -1,70 +1,32 @@
# FixIt Theme | Hugo
[![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.112.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.123.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![License](https://img.shields.io/github/license/hugo-fixit/FixIt?style=flat)](/LICENSE)
👉 English README | [简体中文说明](README.zh-cn.md)
> [FixIt](https://github.com/hugo-fixit/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 Theme](https://github.com/dillonzq/LoveIt), [KeepIt Theme](https://github.com/Fastbyte01/KeepIt) and [LeaveIt Theme](https://github.com/liuzc/LeaveIt).
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]
The FixIt theme inherits the excellent features of these themes, and adds new features and optimizations on those basis. Please read [Why Choose FixIt](#why-choose-fixit) to learn more.
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/Apple-Devices-Preview.jpg)
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/apple-devices-preview.webp)
## Getting started
Head to the [getting started page](http://fixit.lruihao.cn/documentation/getting-started/) or start with a template:
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/)
- [hugo-fixit/hugo-fixit-blog-git](https://github.com/hugo-fixit/hugo-fixit-blog-git)
- [hugo-fixit/hugo-fixit-blog-go](https://github.com/hugo-fixit/hugo-fixit-blog-go)
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).
## [Documentation](https://fixit.lruihao.cn/categories/documentation/)
## Template repository
Head to this [documentation page](https://fixit.lruihao.cn/documentation/basics/) for a complete guidence to get started with the FixIt theme.
Or run [Documentation Site](https://fixit.lruihao.cn) locally, see more details from [Contributing](#contributing).
In addition, there is the [FixIt wiki](https://github.com/hugo-fixit/FixIt/wiki).
## Migrate from LoveIt
If you are currently using the LoveIt theme (or some other themes), it is very easy to migrate to FixIt.
You can add this repo as a submodule of your site directory. Alternatively, you can install the theme in [other ways](https://fixit.lruihao.cn/documentation/basics/#install-theme).
```bash
git submodule add https://github.com/hugo-fixit/FixIt.git themes/FixIt
```
And later you can update the submodule in your site directory to the latest commit using this command:
```bash
git submodule update --remote --merge
```
Next, go to the `hugo.toml` and change the default theme to `FixIt`.
```diff
- theme = "LoveIt"
+ theme = "FixIt"
```
Now the migration is finished and everything is ready 🎉
## Why choose FixIt
The FixIt theme inherits the excellent features of themes such as LoveIt, and adds new features and optimizations on those basis, as detailed in [Features](#features). In addition, the FixIt theme has the following advantages:
- Complete Chinese and English official documentations
- Community support: Theme official website, Discussions and official QQ group
- Continuously and actively update
- Constantly incorporate suggestions and ideas from all sides
- Highly open theme customizable section
In short, if you prefer the design language and freedom of the FixIt theme, and if you like to personalize your own themes as I do, the FixIt theme may be more suitable for you.
- [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)
## Who used FixIt
@@ -128,7 +90,7 @@ To see this theme in action, here are some [live demo sites](https://fixit.lruih
- **Interactive data visualization** shortcode supported by [ECharts](https://echarts.apache.org/)
- **Mapbox** shortcode supported by [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js)
- **Music player** shortcode supported by [APlayer](https://github.com/MoePlayer/APlayer) and [MetingJS](https://github.com/metowolf/MetingJS)
- **Bilibili player** shortcode
- **Bilibili player** and **Douyin player** shortcode
- Kinds of **admonitions** shortcode
- **Custom style** shortcode
- **Custom script** shortcode
@@ -137,8 +99,13 @@ To see this theme in action, here are some [live demo sites](https://fixit.lruih
- **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
The FixIt theme balances **simplicity** and **extensibility** with extra [Hugo theme components](https://fixit.lruihao.cn/components/) for customization.
## Multilingual and i18n
FixIt supports the following languages:
@@ -156,14 +123,13 @@ FixIt supports the following languages:
- Russian
- Romanian
- Vietnamese
- Hindi
- [Contribute with a new language](https://github.com/hugo-fixit/FixIt/pulls)
[Languages Compatibility](https://fixit.lruihao.cn/documentation/basics/#language-compatibility)
## [Roadmap](https://github.com/hugo-fixit/FixIt/projects/1)
## [Changelog](/CHANGELOG.md)
## Questions, ideas, bugs, pull requests
All feedback is welcome! Head over to the [issues](https://github.com/hugo-fixit/FixIt/issues) or [discussions](https://github.com/hugo-fixit/FixIt/discussions) tracker.
@@ -176,11 +142,11 @@ Make sure that you follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) while contrib
**When contributing, please first discuss the change you wish to make via an issue on this repository before making the actual change**.
## [Contributors](contributors.md)
## Acknowledgements
<details open>
Thanks to all the [contributors](https://github.com/hugo-fixit/FixIt/graphs/contributors) for their support!
<details>
<summary>Thanks to the authors of following resources included in the theme:</summary>
- [normalize.css](https://github.com/necolas/normalize.css)
@@ -220,7 +186,7 @@ Make sure that you follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) while contrib
</details>
<details open>
<details>
<summary>The FixIt also draws on some features of the following projects, and thanks to their authors as well:</summary>
- [DoIt](https://github.com/HEIGE-PCloud/DoIt)
@@ -234,15 +200,18 @@ FixIt is licensed under the **MIT** license. Check the [LICENSE file](LICENSE) f
## Author
[Lruihao](https://github.com/Lruihao "Follow me on GitHub")
Follow [Lruihao](https://github.com/Lruihao "Follow me on GitHub")
## Sponsor
Giving me a Star 🌟 is already the greatest encouragement and support for me.\
If you enjoy the theme, please consider buying me a coffee ☕️.
[![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!
- [PayPal](https://paypal.me/Lruihao)
- [Alipay](images/alipay.jpg)
- [Wechat](images/wechatpay.jpg)
Thanks! ❤️
Don't forget to leave a ⭐️ if you like this theme, thanks!
[^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? 🤣
+35 -66
View File
@@ -1,70 +1,32 @@
# FixIt 主题 | Hugo
[![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.112.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.123.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![License](https://img.shields.io/github/license/hugo-fixit/FixIt?style=flat)](/LICENSE)
👉 [English README](README.md) | 简体中文说明
> [FixIt](https://github.com/hugo-fixit/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]
FixIt 主题继承了这些主题的优秀功能,并在此基础上添加了新的功能与优化,请阅读 [为什么选择 FixIt](#为什么选择-FixIt) 来了解更多。
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/apple-devices-preview.webp)
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/Apple-Devices-Preview.jpg)
## 主题文档
## 快速上手
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/) 或从一个模板直接开始:
或者在本地运行 [文档站点](https://fixit.lruihao.cn/zh-cn/),更多细节详见 [hugo-fixit/docs](https://github.com/hugo-fixit/docs)。
- [hugo-fixit/hugo-fixit-blog-git](https://github.com/hugo-fixit/hugo-fixit-blog-git)
- [hugo-fixit/hugo-fixit-blog-go](https://github.com/hugo-fixit/hugo-fixit-blog-go)
## 模板仓库
## [完整文档](https://fixit.lruihao.cn/zh-cn/categories/documentation/)
前往这篇 [文档](https://fixit.lruihao.cn/zh-cn/documentation/basics/),阅读关于安装与使用的详细指南。
或者在本地运行 [文档站点](https://fixit.lruihao.cn/zh-cn/),更多细节详见 [参与贡献](#参与贡献)。
除此之外,还有 [FixIt 主题维基](https://github.com/hugo-fixit/FixIt/wiki)。
## 从 LoveIt 迁移
如果你现在正在使用 LoveIt 主题(或者一些其他的主题),你可以很容易地迁移至 FixIt。
你可以将这个主题仓库添加为你的网站目录的子模块。或者,你可以通过 [其他方式](https://fixit.lruihao.cn/zh-cn/documentation/basics/#install-theme) 安装主题。
```bash
git submodule add https://github.com/hugo-fixit/FixIt.git themes/FixIt
```
之后,你可以在站点目录通过这条命令来将主题更新至最新版本:
```bash
git submodule update --remote --merge
```
接着,前往 `hugo.toml` 并将默认主题更改为 `FixIt`
```diff
- theme = "LoveIt"
+ theme = "FixIt"
```
这样就完成了迁移工作,现在一切准备就绪 🎉
## 为什么选择 FixIt
FixIt 主题继承了 LoveIt 等主题的优秀功能,并在它们的基础上添加了新的功能与优化,详见 [特性](#特性)。除此之外,FixIt 主题还有以下优点:
- 完善的中英文官方文档
- 社区支持:主题官网、Discussions 和官方 QQ 群
- 持续积极地更新
- 不断收纳各方的建议和想法
- 高度开放主题可自定义部分
总之,如果你更偏好 FixIt 主题的设计语言和自由度,如果你和我一样喜欢个性化自定义主题,那么,FixIt 主题可能是更适合你。
- [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
@@ -128,7 +90,7 @@ FixIt 主题继承了 LoveIt 等主题的优秀功能,并在它们的基础上
- 支持基于 [ECharts](https://echarts.apache.org/) 的**交互式数据可视化** shortcode
- 支持基于 [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js) 的 **Mapbox** shortcode
- 支持基于 [APlayer](https://github.com/MoePlayer/APlayer) 和 [MetingJS](https://github.com/metowolf/MetingJS) 的**音乐播放器** shortcode
- 支持 **Bilibili 视频** shortcode
- 支持 **Bilibili 视频****抖音视频** shortcode
- 支持多种**注释**的 shortcode
- 支持**自定义样式**的 shortcode
- 支持**自定义脚本**的 shortcode
@@ -137,8 +99,13 @@ FixIt 主题继承了 LoveIt 等主题的优秀功能,并在它们的基础上
- 支持基于 [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 支持下列语言:
@@ -156,17 +123,16 @@ FixIt 支持下列语言:
- 俄语
- 罗马尼亚语
- 越南语
- 印地语
- [贡献一种新的语言](https://github.com/hugo-fixit/FixIt/pulls)
[语言兼容性](https://fixit.lruihao.cn/zh-cn/theme-documentation-basics/#language-compatibility)
## [路线图](https://github.com/hugo-fixit/FixIt/projects/1)
## [更新日志](/CHANGELOG.md)
## 问题、想法、bugs 和 PRs
所有的反馈都是欢迎的!详见 [议题](https://github.com/hugo-fixit/FixIt/issues) 或者 [讨论](https://github.com/hugo-fixit/FixIt/discussions)。
所有的反馈都是欢迎的!详见 [议题](https://github.com/hugo-fixit/FixIt/issues) 或者 [讨论](https://github.com/hugo-fixit/FixIt/discussions) 或者加入 QQ 群:`814031017`
## 参与贡献
@@ -176,15 +142,15 @@ FixIt 支持下列语言:
**贡献时,请先通过此存储库上的问题讨论你希望进行的更改,然后再进行实际更改**
## [所有贡献者](contributors.md)
## 镜像
- Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
## 致谢
<details open>
感谢 [所有贡献者](https://github.com/hugo-fixit/FixIt/graphs/contributors) 的支持!
<details>
<summary>FixIt 主题中用到了以下项目,感谢它们的作者:</summary>
- [normalize.css](https://github.com/necolas/normalize.css)
@@ -224,7 +190,7 @@ FixIt 支持下列语言:
</details>
<details open>
<details>
<summary>FixIt 主题还借鉴了以下项目的部分功能,同样感谢它们的作者:</summary>
- [DoIt](https://github.com/HEIGE-PCloud/DoIt)
@@ -234,19 +200,22 @@ FixIt 支持下列语言:
## 许可协议
FixIt 根据 **MIT** 许可协议授权。 更多信息请查看 [LICENSE 文件](LICENSE)。
FixIt 根据 **MIT** 许可协议授权。更多信息请查看 [LICENSE 文件](LICENSE)。
## 作者
[Lruihao](https://github.com/Lruihao "在 GitHub 上关注我")
Follow [Lruihao](https://github.com/Lruihao "在 GitHub 上关注我")
## 赞助支持
给我一个 Star 🌟 已经是对我最大的鼓励和支持了。\
如果你喜爱这个主题,请考虑给我买杯咖啡 ☕️。
[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/hugo-fixit/FixIt)
如果你喜爱这个主题,请考虑给我买杯咖啡 ☕️,谢谢!
- [PayPal](https://paypal.me/Lruihao)
- [支付宝](images/alipay.jpg)
- [微信支付](images/wechatpay.jpg)
谢谢!❤️
如果你喜欢这个主题,别忘了留下一颗 ⭐️ 哦,谢谢!
[^1]: 主题名称趣谈:“leave it, keep itlove itfix it”。出现又离开,爱而不得。这像不像那该死的爱情和 BUG 呢?🤣
+7 -3
View File
@@ -2,12 +2,16 @@
## Supported Versions
| Version | Supported |
| :-----------: | :----------------: |
| 0.3.x | :white_check_mark: |
legacy and transitional versions:
| Version | Supported | LoveIt Compatibility |
| :-----------: | :----------------: | :------------------: |
| 0.1.x | :x: | :white_check_mark: |
| 0.2.x ~ 0.5.x | :x: | :white_check_mark: |
| 0.5.x ~ 1.0 | :white_check_mark: | :x: |
| > 1.0 | :white_check_mark: | :x: |
| 0.2.x | :x: | :white_check_mark: |
## Reporting a Vulnerability
+1 -33
View File
@@ -17,21 +17,6 @@ html {
}
}
/* scrollbar, only support webkit */
::-webkit-scrollbar {
width: 0.5rem;
height: 0.5rem;
}
::-webkit-scrollbar-thumb {
background-color: $scrollbar-color;
@include border-radius($global-border-radius);
&:hover {
background-color: $scrollbar-hover-color;
}
}
::selection {
background-color: $selection-color;
@@ -43,26 +28,8 @@ html {
body {
background-color: $global-background-color;
color: $global-font-color;
scrollbar-color: auto;
@include overflow-wrap(break-word);
&::-webkit-scrollbar {
width: 0.75rem;
height: 0.75rem;
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
background-color: transparent;
background-clip: content-box;
border: 2px solid transparent;
@include border-radius(0.5rem);
}
&[data-scroll]::-webkit-scrollbar-thumb {
background-color: $scrollbar-color;
}
&[data-theme='dark'] {
color: $global-font-color-dark;
background-color: $global-background-color-dark;
@@ -89,6 +56,7 @@ abbr[title] {
@include link(true, true);
@import '../_partials/scrollbar';
@import '../_partials/mask';
@import '../_partials/img';
@import '../_partials/icon';
+1 -1
View File
@@ -42,7 +42,7 @@
}
&.active {
@extend .text-secondary;
color: var(--#{$prefix}secondary);
}
}
}
+1 -5
View File
@@ -47,11 +47,7 @@
@each $color, $value in $theme-colors {
.text-#{$color} {
color: #{$value} !important;
[data-theme='dark'] & {
color: #{darken($value, 5%)} !important;
}
color: var(--#{$prefix}#{$color}) !important;
}
}
+1 -4
View File
@@ -366,14 +366,11 @@ header {
overflow-y: overlay;
max-height: 70vh;
@include box-shadow(0 0.125rem 0.25rem rgba(0, 0, 0, 0.1));
@include scrollbar-width(none, 0);
[data-theme='dark'] & {
@include box-shadow(0 0.125rem 0.25rem rgba(255, 255, 255, 0.1));
}
&::-webkit-scrollbar {
width: 0;
}
.search-wrapper {
display: flex;
+21 -3
View File
@@ -5,13 +5,31 @@
@each $color, $value in $theme-colors {
--#{$prefix}#{$color}: #{$value};
}
@each $color, $value in $theme-colors {
--#{$prefix}#{$color}-dark: #{darken($value, 5%)};
}
// Scroll margin top and Stack sticky top related
--#{$prefix}scroll-mt: calc(#{$header-height} + #{$global-scroll-margin-top});
// Set breadcrumb height to 0px if breadcrumb is disabled
--#{$prefix}breadcrumb-height: 0px;
// hr style
--#{$prefix}hr-background-color: #{darken($global-border-color, 5%)};
--#{$prefix}hr-before-color: #{lighten($single-link-hover-color, 4%)};
// Scrollbar related variables
--#{$prefix}scrollbar-thumb-color: #{$scrollbar-color};
--#{$prefix}scrollbar-thumb-hover-color: #{$scrollbar-hover-color};
--#{$prefix}scrollbar-track-color: transparent;
--#{$prefix}scrollbar-width: thin;
--#{$prefix}scrollbar-width-legacy: 12px;
}
// Dark theme
[data-theme=dark] {
@each $color, $value in $theme-colors {
--#{$prefix}#{$color}: #{darken($value, 5%)};
}
--#{$prefix}hr-background-color: #{lighten($global-border-color-dark, 5%)};
--#{$prefix}hr-before-color: #{darken($global-link-hover-color-dark, 4%)};
}
+1
View File
@@ -2,4 +2,5 @@
@import '_link';
@import '_blur';
@import '_details';
@import '_scrollbar-width';
@import '_z-index';
+4
View File
@@ -0,0 +1,4 @@
@mixin scrollbar-width($width: thin, $widthLegacy: 12px) {
--#{$prefix}scrollbar-width: #{$width};
--#{$prefix}scrollbar-width-legacy: #{$widthLegacy};
}
+2 -1
View File
@@ -97,7 +97,8 @@
.featured-image-preview {
width: 100%;
padding: 30% 0 0;
// use the same proportions as the cover image of https://dev.to/
aspect-ratio: auto 1000 / 420;
position: relative;
margin: 0.6rem auto;
@include transition(transform 0.4s ease);
+85 -57
View File
@@ -15,14 +15,14 @@
width: max-content;
transform: rotate(30deg);
margin-right: 0.25em;
@extend .text-danger;
color: var(--#{$prefix}danger);
}
.icon-repost {
display: inline-block;
width: max-content;
margin-right: 0.25em;
@extend .text-success;
color: var(--#{$prefix}success);
}
}
@@ -94,71 +94,101 @@
padding: 5px;
}
hr {
position: relative;
height: 1em;
background: linear-gradient(to right, var(--#{$prefix}hr-background-color) 50%, transparent 50%);
background-size: 10px 2px;
background-position: center;
background-repeat: repeat-x;
border: none;
&.awesome-hr {
margin-block: 0.5em;
&::before {
display: inline-block;
font-weight: 600;
font-family: 'Font Awesome 6 Free';
text-rendering: auto;
-webkit-font-smoothing: antialiased;
position: absolute;
left: 5%;
top: 50%;
transform: translateY(-50%);
z-index: 1;
color: var(--#{$prefix}hr-before-color);
content: '\f0c4';
font-size: 20px;
line-height: 1;
transition: left 1s ease-in-out, color 0.3s ease, border-color 0.3s ease;
}
&:hover::before {
left: calc(95% - 20px);
}
}
}
.content {
> h1,
> h2 {
font-size: 1.5rem;
& code {
font-size: 1.25rem;
}
font-size: 1.5em;
padding-bottom: 0.3em;
border-bottom: 1px solid $global-border-color;
}
> h3 {
font-size: 1.375rem;
& code {
font-size: 1.125rem;
}
font-size: 1.25em;
}
> h4 {
font-size: 1.25rem;
& code {
font-size: 1rem;
}
font-size: 1em;
}
> h5 {
font-size: 1.125rem;
font-size: 0.875em;
}
> h6 {
font-size: 1rem;
font-size: 0.85em;
}
h2,
h3,
h4,
h5,
h6 {
> .heading-element {
display: flex;
font-weight: bold;
margin: 1.2rem 0;
line-height: 1.25;
margin-top: 1.5rem;
margin-bottom: 1rem;
[data-theme='dark'] & {
font-weight: bolder;
}
}
> h2,
> h3,
> h4,
> h5,
> h6 {
> .heading-mark::before {
content: '|';
margin-right: 0.3125rem;
color: $single-link-color;
code {
padding: 0 .2em;
font-size: inherit;
}
[data-theme='dark'] & {
color: $single-link-color-dark;
&:hover,
&:target {
> .heading-mark {
opacity: 1;
}
}
}
> h2 > .heading-mark::before {
content: '#';
> .heading-mark {
display: inline-flex;
align-items: center;
opacity: 0;
padding-inline: 0.5rem;
transition: all 0.2s ease-in-out;
@include link(false, false);
svg {
fill: currentColor;
}
}
}
p {
@@ -203,10 +233,10 @@
dl {
dt {
margin-bottom: 0.5em;
font-weight: bold;
}
dd {
margin-inline-start: 1.25em;
margin: 0.25em 0 1em;
}
}
@@ -228,13 +258,10 @@
.table-wrapper {
overflow-x: auto;
--#{$prefix}scrollbar-thumb-color: #{$table-background-color};
&::-webkit-scrollbar {
background-color: $table-background-color;
[data-theme='dark'] & {
background-color: $table-background-color-dark;
}
[data-theme='dark'] & {
--#{$prefix}scrollbar-thumb-color: #{$table-background-color-dark};
}
> table {
@@ -411,17 +438,15 @@
}
}
@import '../_partials/_single/code';
@import '../_shortcodes';
hr {
margin-block: 1em;
position: relative;
border-top: 1px dashed darken($global-border-color, 5%);
border-bottom: none;
margin-block: 0;
}
[data-theme='dark'] & {
border-top: 1px dashed lighten($global-border-color-dark, 5%);
.footnotes {
hr {
background-color: var(--#{$prefix}hr-background-color);
height: 1px;
margin-block: 1em;
}
}
@@ -443,6 +468,9 @@
@include box-shadow(inset 0 -1px 0 $global-border-color-dark);
}
}
@import '../_partials/_single/code';
@import '../_shortcodes';
}
@import '../_partials/_single/reward';
+36
View File
@@ -0,0 +1,36 @@
/* Modern browsers with `scrollbar-*` support (high priority) */
@supports (scrollbar-width: auto) {
* {
scrollbar-color: var(--#{$prefix}scrollbar-thumb-color) var(--#{$prefix}scrollbar-track-color);;
scrollbar-width: var(--#{$prefix}scrollbar-width);
}
}
/* Legacy browsers with `::-webkit-scrollbar-*` support */
::-webkit-scrollbar {
height: var(--#{$prefix}scrollbar-width-legacy);
width: var(--#{$prefix}scrollbar-width-legacy);
overflow: visible;
}
::-webkit-scrollbar-button {
height: 0;
width: 0;
}
::-webkit-scrollbar-corner {
background-color: var(--#{$prefix}scrollbar-track-color);
}
::-webkit-scrollbar-thumb {
background-color: var(--#{$prefix}scrollbar-thumb-color);
&:hover {
background-color: var(--#{$prefix}scrollbar-thumb-hover-color);
}
}
::-webkit-scrollbar-track {
background-color: var(--#{$prefix}scrollbar-track-color);
}
::-webkit-scrollbar-thumb,
::-webkit-scrollbar-track {
background-clip: padding-box;
border: 3px solid transparent;
border-radius: 100px;
}
+9 -5
View File
@@ -18,7 +18,7 @@ code {
}
// indented code
pre {
pre:not(.mermaid[data-processed='true']) {
margin: 0;
line-height: 1.45em;
padding: 0.5rem;
@@ -348,12 +348,16 @@ pre {
}
.table-wrapper {
.highlight,
&::-webkit-scrollbar {
background-color: #f6f8fa;
--#{$prefix}scrollbar-thumb-color: #{$code-background-color};
[data-theme='dark'] & {
--#{$prefix}scrollbar-thumb-color: #{$code-background-color-dark};
}
.highlight {
background-color: $code-background-color;
[data-theme='dark'] & {
background-color: #2d333b;
background-color: $code-background-color-dark;
}
}
}
@@ -135,7 +135,7 @@
.collection-count {
flex-shrink: 0;
@extend .text-secondary;
color: var(--#{$prefix}secondary);
}
.details-icon {
@@ -161,10 +161,7 @@
list-style: none;
overflow-y: scroll;
max-height: 60vh;
&::-webkit-scrollbar {
width: 0;
}
@include scrollbar-width(none, 0);
.collection-item > a::before,
.collection-item > span::before {
@@ -1,4 +1,8 @@
>#comments {
padding: 2rem 0;
@extend .print-d-none;
iframe {
width: 100%;
}
}
@@ -3,12 +3,8 @@
text-align: center;
margin-top: 3rem;
.fixit-encryptor-shortcode & {
margin-top: 1rem;
}
#fixit-decryptor-input,
.fixit-decryptor-input,
.fixit-decryptor-btn,
.fixit-encryptor-btn {
display: inline-block;
box-sizing: border-box;
@@ -40,9 +36,8 @@
}
}
#fixit-decryptor-input,
.fixit-decryptor-input {
width: clamp(50%, 400px, 100%);
width: calc(clamp(50%, 450px, 100%) - 100px);
height: 3rem;
padding-left: 1rem;
padding-right: 1rem;
@@ -53,10 +48,11 @@
}
}
.fixit-decryptor-btn,
.fixit-encryptor-btn {
cursor: pointer;
@include transition(all 0.1s ease-out);
padding: 0.6rem 1rem;
padding: 0.8rem 1rem;
background-color: $header-background-color;
@@ -66,6 +62,20 @@
}
}
.encrypted-hidden {
display: none;
// fixit-encryptor shortcodes
fixit-encryptor {
.fixit-decryptor-container {
margin-top: 1rem;
}
&.decrypted > .fixit-decryptor-container {
.fixit-decryptor-loading,
.fixit-decryptor-input,
.fixit-decryptor-btn {
display: none;
}
}
}
.encrypted-hidden {
display: none !important;
}
+1 -4
View File
@@ -111,10 +111,7 @@
.toc-content {
overflow-y: scroll;
max-height: calc(100vh - #{2*$header-height});
&::-webkit-scrollbar {
width: 0;
}
@include scrollbar-width(none, 0);
&.always-active ul,
&.always-active ol {
@@ -9,14 +9,5 @@
}
--ti-cursor-font-family: #{$global-font-family};
--ti-cursor-font-size: #{$global-font-size};
--ti-cursor-font-style: normal;
--ti-cursor-font-weight: #{$global-font-weight};
--ti-cursor-line-height: #{$global-line-height};
--ti-cursor-color: #{$global-font-color};
--ti-cursor-transform: translateX(0);
[data-theme='dark'] & {
--ti-cursor-color: #{$global-font-color-dark};
}
}
+18 -1
View File
@@ -76,11 +76,28 @@
white-space: nowrap;
}
&icon-globe {
&shortcut-icon {
width: 4rem;
height: 4rem;
flex-shrink: 0;
margin-left: 0.25rem;
&:is(i) {
text-align: center;
font-size: 3rem;
display: inline-flex;
align-items: center;
justify-content: center;
}
}
&shortcut-image {
width: 4rem;
height: 4rem !important;
flex-shrink: 0;
margin-left: 0.25rem;
object-fit: cover;
border-radius: 50%;
}
[data-theme='dark'] & {
+24
View File
@@ -0,0 +1,24 @@
.douyin {
position: relative;
width: 100%;
height: 0;
padding-bottom: 60.725%;
margin: 3% auto;
text-align: center;
iframe {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
}
@media only screen and (max-width: 680px) {
.douyin {
width: 92%;
margin-inline: 4%;
padding-bottom: 190%;
}
}
+1
View File
@@ -1,5 +1,6 @@
@import '_admonition';
@import '_bilibili';
@import '_douyin';
@import '_cardlink';
@import '_center-quote';
@import '_echarts';
+3 -1
View File
@@ -1,5 +1,7 @@
.mermaid {
text-align: center;
&[data-processed='true'] {
text-align: center;
}
svg {
max-width: 100%;
+2 -2
View File
@@ -45,10 +45,10 @@ $global-border-color-dark: #363636 !default;
// ========== Scrollbar ========== //
// Color of the scrollbar
$scrollbar-color: #87878d !default;
$scrollbar-color: #a6a6a6 !default;
// Color of the hover scrollbar
$scrollbar-hover-color: #b1b1ba !default;
$scrollbar-hover-color: #7d7d7d !default;
// ========== Scrollbar ========== //
// ========== Selection ========== //
+14 -17
View File
@@ -13,9 +13,9 @@ libFiles:
# aplayer@1.10.1 https://github.com/MoePlayer/APlayer
aplayerCSS: aplayer@1.10.1/dist/APlayer.min.css
aplayerJS: aplayer@1.10.1/dist/APlayer.min.js
# artalk@2.6.4 https://github.com/ArtalkJS/Artalk
artalkCSS: artalk@2.6.4/dist/Artalk.css
artalkJS: artalk@2.6.4/dist/Artalk.js
# artalk@latest https://github.com/ArtalkJS/Artalk
artalkCSS: artalk@latest/dist/Artalk.css
artalkJS: artalk@latest/dist/Artalk.js
# autocomplete-js@0.38.1 https://github.com/algolia/autocomplete
# TODO update autocompleteJS: '@algolia/autocomplete-js@1.7.1/dist/umd/index.production.js'
autocompleteJS: autocomplete.js@0.38.1/dist/autocomplete.min.js
@@ -24,11 +24,11 @@ libFiles:
# cookieconsent@3.1.1 https://github.com/osano/cookieconsent
cookieconsentCSS: cookieconsent@3.1.1/build/cookieconsent.min.css
cookieconsentJS: cookieconsent@3.1.1/build/cookieconsent.min.js
# crypto-js@4.1.1 https://github.com/brix/crypto-js
cryptoCoreJS: crypto-js@4.1.1/core.js
cryptoEncBase64JS: crypto-js@4.1.1/enc-base64.js
cryptoMd5JS: crypto-js@4.1.1/md5.js
cryptoSha256JS: crypto-js@4.1.1/sha256.js
# 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
@@ -42,12 +42,12 @@ libFiles:
gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
# instant.page@5.2.0 https://github.com/instantpage/instant.page
instantPage: instant.page@5.2.0/instantpage.min.js
# katex@0.16.9 https://github.com/KaTeX/KaTeX
katexAutoRenderJS: katex@0.16.9/dist/contrib/auto-render.min.js
katexCopyTexJS: katex@0.16.9/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.9/dist/katex.min.css
katexJS: katex@0.16.9/dist/katex.min.js
katexMhchemJS: katex@0.16.9/dist/contrib/mhchem.min.js
# katex@0.16.10 https://github.com/KaTeX/KaTeX
katexAutoRenderJS: katex@0.16.10/dist/contrib/auto-render.min.js
katexCopyTexJS: katex@0.16.10/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.10/dist/katex.min.css
katexJS: katex@0.16.10/dist/katex.min.js
katexMhchemJS: katex@0.16.10/dist/contrib/mhchem.min.js
# lightgallery@2.7.2 https://github.com/sachinchoolur/lightgallery
lightgalleryCSS: lightgallery@2.7.2/css/lightgallery-bundle.min.css
lightgalleryJS: lightgallery@2.7.2/lightgallery.min.js
@@ -57,9 +57,6 @@ libFiles:
# TODO update to 3.x
mapboxGLCSS: mapbox-gl@2.10.0/dist/mapbox-gl.css
mapboxGLJS: mapbox-gl@2.10.0/dist/mapbox-gl.js
# mermaid@9.4.3 https://github.com/mermaid-js/mermaid
# TODO bump Mermaid from 9.x to 10.x
mermaidJS: mermaid@9.4.3/dist/mermaid.min.js
# meting@2.0.1 https://github.com/metowolf/MetingJS
metingJS: meting@2.0.1/dist/Meting.min.js
# object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
+14 -17
View File
@@ -13,9 +13,9 @@ libFiles:
# aplayer@1.10.1 https://github.com/MoePlayer/APlayer
aplayerCSS: aplayer@1.10.1/dist/APlayer.min.css
aplayerJS: aplayer@1.10.1/dist/APlayer.min.js
# artalk@2.6.4 https://github.com/ArtalkJS/Artalk
artalkCSS: artalk@2.6.4/dist/Artalk.css
artalkJS: artalk@2.6.4/dist/Artalk.js
# artalk@latest https://github.com/ArtalkJS/Artalk
artalkCSS: artalk@latest/dist/Artalk.css
artalkJS: artalk@latest/dist/Artalk.js
# autocomplete-js@0.38.1 https://github.com/algolia/autocomplete
# TODO update autocompleteJS: '@algolia/autocomplete-js@1.7.1/dist/umd/index.production.js'
autocompleteJS: autocomplete.js@0.38.1/dist/autocomplete.min.js
@@ -24,11 +24,11 @@ libFiles:
# cookieconsent@3.1.1 https://github.com/osano/cookieconsent
cookieconsentCSS: cookieconsent@3.1.1/build/cookieconsent.min.css
cookieconsentJS: cookieconsent@3.1.1/build/cookieconsent.min.js
# crypto-js@4.1.1 https://github.com/brix/crypto-js
cryptoCoreJS: crypto-js@4.1.1/core.js
cryptoEncBase64JS: crypto-js@4.1.1/enc-base64.js
cryptoMd5JS: crypto-js@4.1.1/md5.js
cryptoSha256JS: crypto-js@4.1.1/sha256.js
# 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
@@ -42,12 +42,12 @@ libFiles:
gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
# instant.page@5.2.0 https://github.com/instantpage/instant.page
instantPage: instant.page@5.2.0/instantpage.js
# katex@0.16.9 https://github.com/KaTeX/KaTeX
katexAutoRenderJS: katex@0.16.9/dist/contrib/auto-render.min.js
katexCopyTexJS: katex@0.16.9/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.9/dist/katex.min.css
katexJS: katex@0.16.9/dist/katex.min.js
katexMhchemJS: katex@0.16.9/dist/contrib/mhchem.min.js
# katex@0.16.10 https://github.com/KaTeX/KaTeX
katexAutoRenderJS: katex@0.16.10/dist/contrib/auto-render.min.js
katexCopyTexJS: katex@0.16.10/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.10/dist/katex.min.css
katexJS: katex@0.16.10/dist/katex.min.js
katexMhchemJS: katex@0.16.10/dist/contrib/mhchem.min.js
# lightgallery@2.7.2 https://github.com/sachinchoolur/lightgallery
lightgalleryCSS: lightgallery@2.7.2/css/lightgallery-bundle.min.css
lightgalleryJS: lightgallery@2.7.2/lightgallery.min.js
@@ -57,9 +57,6 @@ libFiles:
# TODO update to 3.x
mapboxGLCSS: mapbox-gl@2.10.0/dist/mapbox-gl.css
mapboxGLJS: mapbox-gl@2.10.0/dist/mapbox-gl.js
# mermaid@9.4.3 https://github.com/mermaid-js/mermaid
# TODO bump Mermaid from 9.x to 10.x
mermaidJS: mermaid@9.4.3/dist/mermaid.min.js
# meting@2.0.1 https://github.com/metowolf/MetingJS
metingJS: meting@2.0.1/dist/Meting.min.js
# object-fit-images@3.2.4 https://github.com/fregante/object-fit-images
+3 -3
View File
@@ -14,13 +14,13 @@ linkedin:
Icon:
Class: fa-brands fa-linkedin fa-fw
# 003: Twitter
# 003: Twitter (X)
twitter:
Weight: 3
Prefix: https://twitter.com/
Title: Twitter
Title: X
Icon:
Class: fa-brands fa-twitter fa-fw
Class: fa-brands fa-x-twitter fa-fw
# 004: Instagram
instagram:
+1 -1
View File
@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" version="1.1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" version="1.1" width="16" height="16">
<defs>
<style>.fixit-ban{opacity:.9;}</style>
</defs>

Before

Width:  |  Height:  |  Size: 1004 B

After

Width:  |  Height:  |  Size: 1.0 KiB

+1 -2
View File
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 370 391" xml:space="preserve">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 370 391" xml:space="preserve" width="16" height="16">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FF4088;stroke:#C9177E;stroke-width:27;}
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 808 B

+18 -18
View File
@@ -1,35 +1,35 @@
/**
* Custom javascript for FixIt site.
* Custom JavaScript for FixIt blog site.
* @author @Lruihao https://lruihao.cn
*/
const FixItCustom = new (function () {
class FixItBlog {
/**
* Hello World
* You can define your own functions below.
* @returns {FixItCustom}
* say hello
* you can define your own functions below
* @returns {FixItBlog}
*/
this.hello = () => {
console.log('FixItCustom echo: Hello FixIt!');
hello() {
console.log('custom.js: Hello FixIt!');
return this;
};
}
/**
* Initialize.
* @returns {FixItCustom}
* initialize
* @returns {FixItBlog}
*/
this.init = () => {
// Custom infos.
init() {
this.hello();
return this;
};
})();
}
}
/**
* Immediate.
* immediate execution
*/
(() => {
FixItCustom.init();
// It will be executed when the DOM tree is built.
window.fixitBlog = new FixItBlog();
// it will be executed when the DOM tree is built
document.addEventListener('DOMContentLoaded', () => {
// FixItCustom.init();
window.fixitBlog.init();
});
})();
+110 -83
View File
@@ -12,86 +12,125 @@ FixItDecryptor = function (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();
this.$el = document.querySelector('.fixit-decryptor-container');
/**
* decrypt content
* @param {String} base64EncodeContent encrypted content
* @param {Element} $content content element
* @param {String} salt salt string
* @param {Boolean} [isAll=true] whether to decrypt all content
*/
var _decryptContent = (base64EncodeContent) => {
var _decryptContent = ($content, salt, isAll=true) => {
try {
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
this.$el.querySelector('#fixit-decryptor-input').classList.add('d-none');
this.$el.querySelector('.fixit-encryptor-btn').classList.remove('d-none');
document.querySelector('#content').insertAdjacentHTML(
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(base64EncodeContent).toString(CryptoJS.enc.Utf8)
CryptoJS.enc.Base64
.parse($content.getAttribute('data-content').replace(salt, ''))
.toString(CryptoJS.enc.Utf8)
);
} catch (err) {
return console.error(err);
}
// decrypted hook
console.log(this.decryptedEventSet)
for (const event of this.decryptedEventSet) {
event();
}
const eventSet = isAll ? this.decryptedEventSet : this.partialDecryptedEventSet;
for (const event of eventSet) {
event($content);
}
};
/**
* validate password
* @param {Element} $decryptor decryptor element
* @param {Element} $content content 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');
const input = inputEl.value.trim();
const inputMd5 = CryptoJS.MD5(input).toString();
const inputSha256 = CryptoJS.SHA256(input).toString();
const saltLen = input.length % 2 ? input.length : input.length + 1;
inputEl.value = '';
inputEl.blur();
if (!input) {
alert('Please enter the correct password!');
return console.warn('Please enter the correct password!');
}
if (inputMd5 !== password) {
alert(`Password error: ${input} not the correct password!`);
return console.warn(`Password error: ${input} not the correct password!`);
}
callback(inputMd5, inputSha256.slice(saltLen));
}
/**
* initialize FixIt decryptor
*/
_proto.init = () => {
this.addEventListener('decrypted', this.options?.decrypted);
this.addEventListener('partial-decrypted', this.options?.partialDecrypted);
this.addEventListener('reset', this.options?.reset);
this.validateCache();
const _decryptor = this;
this.$el.querySelector('#fixit-decryptor-input')?.addEventListener('keydown', function (e) {
if (e.key === 'Enter') {
e.preventDefault();
const $content = document.querySelector('#content');
const password = $content.getAttribute('data-password');
const input = this.value.trim();
const saltLen = input.length % 2 ? input.length : input.length + 1;
const inputMd5 = CryptoJS.MD5(input).toString();
const inputSha256 = CryptoJS.SHA256(input).toString();
this.value = '';
this.blur();
if (!input) {
alert('Please enter the correct password!');
return console.warn('Please enter the correct password!');
}
if (inputMd5 !== password) {
alert(`Password error: ${input} not the correct password!`);
return console.warn(`Password error: ${input} not the correct password!`);
}
const decryptorHandler = () => {
const $content = document.querySelector('#content');
_validatePassword(this.$el, $content, (passwordMD5, salt) => {
// cache decryption statistics
window.localStorage?.setItem(
`fixit-decryptor/#${location.pathname}`,
JSON.stringify({
expiration: Math.ceil(Date.now() / 1000) + _decryptor.options.duration,
md5: inputMd5,
sha256: inputSha256.slice(saltLen)
expiration: Math.ceil(Date.now() / 1000) + this.options.duration,
password: passwordMD5,
salt,
})
);
_decryptContent($content.getAttribute('data-content').replace(inputSha256.slice(saltLen), ''));
_decryptContent($content, salt);
});
};
// bind decryptor input enter keydown event
this.$el.querySelector('#fixit-decryptor-input')?.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
decryptorHandler();
}
});
this.$el.querySelector('.fixit-encryptor-btn')?.addEventListener('click', function (e) {
// bind decryptor button click event
this.$el.querySelector('.fixit-decryptor-btn')?.addEventListener('click', (e) => {
e.preventDefault();
this.classList.add('d-none')
_decryptor.$el.querySelector('#fixit-decryptor-input').classList.remove('d-none');
decryptorHandler();
});
// bind encryptor button click event
this.$el.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',
_decryptor.$el
this.$el
);
window.localStorage?.removeItem(`fixit-decryptor/#${location.pathname}`);
// reset hook
for (const event of _decryptor.resetEventSet) {
for (const event of this.resetEventSet) {
event();
}
});
@@ -101,50 +140,31 @@ FixItDecryptor = function (options = {}) {
* initialize fixit-encryptor shortcodes
*/
_proto.initShortcodes = () => {
// TODO TODO shortcode decrypted event
// this.addEventListener('decrypted', this.options?.decrypted);
const _decryptor = this;
const $shortcodes = document.querySelectorAll('fixit-encryptor:not(.decrypted)');
customElements.get('fixit-encryptor') || customElements.define('fixit-encryptor', class extends HTMLElement {});
const $shortcodes = document.querySelectorAll('fixit-encryptor:not(:has(.decrypted))');
$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);
});
};
// bind decryptor input enter keydown event
$shortcode.querySelector('.fixit-decryptor-input')?.addEventListener('keydown', function (e) {
if (e.key === 'Enter') {
e.preventDefault();
const $decryptor = this.parentElement.parentElement;
const $content = $decryptor.nextElementSibling;
const password = $content.getAttribute('data-password');
const input = this.value.trim();
const saltLen = input.length % 2 ? input.length : input.length + 1;
const inputMd5 = CryptoJS.MD5(input).toString();
const inputSha256 = CryptoJS.SHA256(input).toString();
this.value = '';
this.blur();
if (!input) {
alert('Please enter the correct password!');
return console.warn('Please enter the correct password!');
}
if (inputMd5 !== password) {
alert(`Password error: ${input} not the correct password!`);
return console.warn(`Password error: ${input} not the correct password!`);
}
try {
const base64EncodeContent = $content.getAttribute('data-content').replace(inputSha256.slice(saltLen), '');
$decryptor.querySelector('.fixit-decryptor-input').classList.add('d-none');
$content.insertAdjacentHTML(
'afterbegin',
CryptoJS.enc.Base64.parse(base64EncodeContent).toString(CryptoJS.enc.Utf8)
);
$decryptor.parentElement.classList.add('decrypted');
} catch (err) {
return console.error(err);
}
// TODO shortcode decrypted hook
// for (const event of _decryptor.decryptedEventSet) {
// event();
// }
decryptorHandler();
}
});
// bind decryptor button click event
$shortcode.querySelector('.fixit-decryptor-btn')?.addEventListener('click', function (e) {
e.preventDefault();
decryptorHandler();
});
});
};
@@ -159,17 +179,18 @@ FixItDecryptor = function (options = {}) {
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-input').classList.remove('d-none');
this.$el.querySelector('.fixit-decryptor-btn').classList.remove('d-none');
return this;
}
if (cachedStat?.md5 !== password || Number(cachedStat?.expiration) < Math.ceil(Date.now() / 1000)) {
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');
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.getAttribute('data-content').replace(cachedStat.sha256, ''));
_decryptContent($content, cachedStat.salt);
return this;
};
@@ -187,6 +208,9 @@ FixItDecryptor = function (options = {}) {
case 'decrypted':
this.decryptedEventSet.add(listener);
break;
case 'partial-decrypted':
this.partialDecryptedEventSet.add(listener);
break;
case 'reset':
this.resetEventSet.add(listener);
break;
@@ -211,6 +235,9 @@ FixItDecryptor = function (options = {}) {
case 'decrypted':
this.decryptedEventSet.delete(listener);
break;
case 'partial-decrypted':
this.partialDecryptedEventSet.delete(listener);
break;
case 'reset':
this.resetEventSet.delete(listener);
break;
+117 -63
View File
@@ -3,7 +3,6 @@ import Util from './util';
class FixIt {
constructor() {
this.config = window.config;
this.data = this.config.data || [];
this.isDark = document.body.dataset.theme === 'dark';
this.util = new Util();
this.newScrollTop = this.util.getScrollTop();
@@ -49,8 +48,8 @@ class FixIt {
});
}
initTwemoji() {
this.config.twemoji && twemoji.parse(document.body);
initTwemoji(target = document.body) {
this.config.twemoji && twemoji.parse(target);
}
initMenu() {
@@ -94,7 +93,7 @@ class FixIt {
this.isDark = !this.isDark;
window.localStorage?.setItem('theme', this.isDark ? 'dark' : 'light');
for (let event of this.switchThemeEventSet) {
event();
event(this.isDark);
}
}, false);
});
@@ -234,7 +233,7 @@ class FixIt {
const results = {};
window._index.search(query).forEach(({ item, refIndex, matches }) => {
let title = item.title;
let content = item.content;
let content = item.content.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
matches.forEach(({ indices, value, key }) => {
if (key === 'content') {
let offset = 0;
@@ -334,8 +333,8 @@ class FixIt {
}
}
initDetails() {
this.util.forEach(document.getElementsByClassName('details'), ($details) => {
initDetails(target = document) {
this.util.forEach(target.getElementsByClassName('details'), ($details) => {
const $summary = $details.querySelector('.details-summary');
$summary.addEventListener('click', () => {
$details.classList.toggle('open');
@@ -345,7 +344,8 @@ class FixIt {
initLightGallery() {
if (this.config.lightgallery) {
lightGallery(document.getElementById('content'), {
this.lg && this.lg.destroy(true);
this.lg = lightGallery(document.getElementById('content'), {
plugins: [lgThumbnail, lgZoom],
selector: '.lightgallery',
speed: 400,
@@ -377,7 +377,8 @@ class FixIt {
$preChroma.parentElement.replaceChild($chroma, $preChroma);
$td.appendChild($preChroma);
});
this.util.forEach(document.querySelectorAll('.highlight > .chroma'), ($chroma) => {
this.util.forEach(document.querySelectorAll('.highlight > .chroma:not([data-init])'), ($chroma) => {
$chroma.dataset.init = 'true';
const $codeElements = $chroma.querySelectorAll('pre.chroma > code');
if ($codeElements.length) {
const $code = $codeElements[$codeElements.length - 1];
@@ -386,8 +387,13 @@ class FixIt {
// code title
const $title = document.createElement('span');
$title.classList.add('code-title');
const hlAttrs = this.data[$chroma.parentNode.id];
$title.insertAdjacentHTML('afterbegin', `<i class="arrow fa-solid fa-chevron-right fa-fw" aria-hidden="true"></i><span class="title-inner">${hlAttrs?.title ?? ''}</span>`);
// insert code title inner
$title.insertAdjacentHTML(
'afterbegin',
$chroma.parentNode.title
? `<i class="arrow fa-solid fa-chevron-right fa-fw" aria-hidden="true"></i><span class="title-inner">${$chroma.parentNode.title}</span>`
: '<i class="arrow fa-solid fa-chevron-right fa-fw" aria-hidden="true"></i>'
);
$title.addEventListener('click', () => {
$chroma.classList.toggle('open');
}, false);
@@ -451,8 +457,8 @@ class FixIt {
});
}
initTable() {
this.util.forEach(document.querySelectorAll('.content table'), ($table) => {
initTable(target = document) {
this.util.forEach(target.querySelectorAll('.content table'), ($table) => {
const $wrapper = document.createElement('div');
$wrapper.className = 'table-wrapper';
$table.parentElement.replaceChild($wrapper, $table);
@@ -544,30 +550,38 @@ class FixIt {
}, false);
}
initMath() {
initMath(target = document.body) {
if (this.config.math) {
renderMathInElement(document.body, this.config.math);
renderMathInElement(target, this.config.math);
}
}
switchMermaidTheme(theme) {
const $mermaidElements = document.getElementsByClassName('mermaid');
if ($mermaidElements.length) {
// TODO perf
const themes = this.config.mermaid.themes ?? ['default', 'dark', 'neutral'];
mermaid.initialize({ startOnLoad: false, theme: theme ?? (this.isDark ? themes[1] : themes[0]), securityLevel: 'loose' });
this.util.forEach($mermaidElements, $mermaid => {
mermaid.render('svg-' + $mermaid.id, this.data[$mermaid.id], svgCode => {
$mermaid.innerHTML = svgCode;
}, $mermaid);
});
}
};
initMermaid() {
this.switchMermaidTheme();
this.switchThemeEventSet.add(() => { this.switchMermaidTheme(); });
this.beforeprintEventSet.add(() => { this.switchMermaidTheme('neutral'); });
if (!window.mermaid?.initialize) {
return;
}
const _initializeAndRun = () => {
const themes = window.mermaid.themes ?? ['default', 'dark'];
window.mermaid.initialize({
securityLevel: 'loose',
startOnLoad: false,
theme: this.isDark ? themes[1] : themes[0],
});
window.mermaid.run()
}
_initializeAndRun()
this.switchThemeEventSet.add(() => {
// Reinitialize and run mermaid when theme changes.
this.util.forEach(document.querySelectorAll('.mermaid[data-processed]'), ($mermaid) => {
$mermaid.dataset.processed = ''
$mermaid.innerHTML = ''
$mermaid.appendChild($mermaid.nextElementSibling.content.cloneNode(true))
})
_initializeAndRun()
});
this.beforeprintEventSet.add(() => {
// Set the theme to neutral when printing.
});
}
initEcharts() {
@@ -582,11 +596,16 @@ class FixIt {
this._echartsArr[i].dispose();
}
this._echartsArr = [];
const stagingDOM = this.util.getStagingDOM()
this.util.forEach(document.getElementsByClassName('echarts'), ($echarts) => {
const chart = echarts.init($echarts, this.isDark ? 'dark' : 'light', { renderer: 'svg' });
chart.setOption(JSON.parse(this.data[$echarts.id]));
this._echartsArr.push(chart);
if ($echarts.nextElementSibling.tagName === 'TEMPLATE') {
const chart = echarts.init($echarts, this.isDark ? 'dark' : 'light', { renderer: 'svg' });
stagingDOM.stage($echarts.nextElementSibling.content.cloneNode(true));
chart.setOption(stagingDOM.contentAsJson());
this._echartsArr.push(chart);
}
});
stagingDOM.destroy();
});
this.switchThemeEventSet.add(this._echartsOnSwitchTheme);
this._echartsOnSwitchTheme();
@@ -600,11 +619,13 @@ class FixIt {
initMapbox() {
if (this.config.mapbox) {
mapboxgl.accessToken = this.config.mapbox.accessToken;
mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);
this._mapboxArr = this._mapboxArr || [];
this.util.forEach(document.getElementsByClassName('mapbox'), ($mapbox) => {
const { lng, lat, zoom, lightStyle, darkStyle, marked, navigation, geolocate, scale, fullscreen } = this.data[$mapbox.id];
if (!mapboxgl.accessToken) {
mapboxgl.accessToken = this.config.mapbox.accessToken;
mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);
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 mapbox = new mapboxgl.Map({
container: $mapbox,
center: [lng, lat],
@@ -643,7 +664,7 @@ class FixIt {
this._mapboxOnSwitchTheme = this._mapboxOnSwitchTheme || (() => {
this.util.forEach(this._mapboxArr, (mapbox) => {
const $mapbox = mapbox.getContainer();
const { lightStyle, darkStyle } = this.data[$mapbox.id];
const { lightStyle, darkStyle } = JSON.parse($mapbox.dataset.options);
mapbox.setStyle(this.isDark ? darkStyle : lightStyle);
mapbox.addControl(new MapboxLanguage());
});
@@ -652,25 +673,45 @@ class FixIt {
}
}
initTypeit() {
initTypeit(target = document) {
if (this.config.typeit) {
const typeitConfig = this.config.typeit;
const speed = typeitConfig.speed || 100;
const cursorSpeed = typeitConfig.cursorSpeed || 1000;
const cursorChar = typeitConfig.cursorChar || '|';
const loop = typeitConfig.loop ?? false;
Object.values(typeitConfig.data).forEach((group) => {
// divide them into different groups according to the data-group attribute value of the element
// results in an object like {group1: [ele1, ele2], group2: [ele3, ele4]}
const typeitElements = target.querySelectorAll('.typeit')
const groupMap = Array.from(typeitElements).reduce((acc, ele) => {
const group = ele.dataset.group || ele.id || Math.random().toString(36).substring(2);
acc[group] = acc[group] || [];
acc[group].push(ele);
return acc;
}, {});
const stagingDOM = this.util.getStagingDOM()
Object.values(groupMap).forEach((group) => {
const typeone = (i) => {
const id = group[i];
const shortcodeLoop = document.querySelector(`#${id}`).parentElement.dataset.loop;
const instance = new TypeIt(`#${id}`, {
strings: this.data[id],
const typeitElement = group[i];
const singleLoop = typeitElement.dataset.loop;
stagingDOM.stage(typeitElement.querySelector('template').content.cloneNode(true));
// for shortcodes usage
let targetEle = typeitElement.firstElementChild
// for system elements usage
if (typeitElement.firstElementChild.tagName === 'TEMPLATE') {
typeitElement.innerHTML = '';
targetEle = typeitElement
}
// create a new instance of TypeIt for each element
const instance = new TypeIt(targetEle, {
strings: stagingDOM.$el.querySelector('pre')?.innerHTML || stagingDOM.contentAsHtml(),
speed: speed,
lifeLike: true,
cursorSpeed: cursorSpeed,
cursorChar: cursorChar,
waitUntilVisible: true,
loop: shortcodeLoop ? JSON.parse(shortcodeLoop) : loop,
loop: singleLoop ? JSON.parse(singleLoop) : loop,
afterComplete: () => {
if (i === group.length - 1) {
if (typeitConfig.duration >= 0) {
@@ -687,6 +728,7 @@ class FixIt {
};
typeone(0);
});
stagingDOM.destroy();
}
}
@@ -813,7 +855,7 @@ class FixIt {
const giscusConfig = this.config.comment.giscus;
this._giscusOnSwitchTheme = this._giscusOnSwitchTheme || (() => {
const message = { setConfig: { theme: this.isDark ? giscusConfig.darkTheme : giscusConfig.lightTheme }};
document.querySelector('.giscus-frame')?.contentWindow.postMessage({ giscus: message }, 'https://giscus.app');
document.querySelector('.giscus-frame')?.contentWindow.postMessage({ giscus: message }, giscusConfig.origin);
});
this.switchThemeEventSet.add(this._giscusOnSwitchTheme);
this.giscus2parentMsg = window.addEventListener('message', (event) => {
@@ -926,12 +968,28 @@ class FixIt {
this.initEcharts();
this.initTypeit();
this.initMapbox();
this.util.forEach(document.querySelectorAll('.encrypted-hidden'), ($element) => {
$element.classList.replace('encrypted-hidden', 'decrypted-shown');
});
this.initToc();
this.initTocListener();
this.initPangu();
this.util.forEach(document.querySelectorAll('.encrypted-hidden'), ($element) => {
$element.classList.replace('encrypted-hidden', 'decrypted-shown');
});
},
partialDecrypted: ($content) => {
this.initTwemoji($content);
this.initDetails($content);
this.initLightGallery();
this.initHighlight();
this.initTable($content);
this.initMath($content);
this.initMermaid();
this.initEcharts();
this.initTypeit($content);
this.initMapbox();
this.initPangu();
this.util.forEach($content.querySelectorAll('.encrypted-hidden'), ($element) => {
$element.classList.replace('encrypted-hidden', 'decrypted-shown');
});
},
reset: () => {
this.util.forEach(document.querySelectorAll('.decrypted-shown'), ($element) => {
@@ -943,6 +1001,9 @@ class FixIt {
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();
@@ -979,9 +1040,9 @@ class FixIt {
return;
}
window.addEventListener('beforeunload', () => {
window.localStorage?.setItem(`fixit-bookmark/#${location.pathname}`, this.util.getScrollTop());
window.sessionStorage?.setItem(`fixit-bookmark/#${location.pathname}`, this.util.getScrollTop());
});
const scrollTop = Number(window.localStorage?.getItem(`fixit-bookmark/#${location.pathname}`));
const scrollTop = Number(window.sessionStorage?.getItem(`fixit-bookmark/#${location.pathname}`));
// If the page opens with a specific hash, just jump out
if (scrollTop && location.hash === '') {
window.scrollTo({
@@ -1027,7 +1088,6 @@ class FixIt {
const $fixedButtons = document.querySelector('.fixed-buttons');
const $backToTop = document.querySelector('.back-to-top');
const $readingProgressBar = document.querySelector('.reading-progress-bar');
let scrollTimer = void 0;
if (document.body.dataset.headerDesktop === 'auto') {
$headers.push(document.getElementById('header-desktop'));
}
@@ -1046,12 +1106,6 @@ class FixIt {
const $mask = document.getElementById('mask');
this.newScrollTop = this.util.getScrollTop();
const scroll = this.newScrollTop - this.oldScrollTop;
// body scrollbar style
document.body.toggleAttribute('data-scroll', true);
scrollTimer && window.clearTimeout(scrollTimer);
scrollTimer = window.setTimeout(() => {
document.body.toggleAttribute('data-scroll');
}, 500);
// header animation
this.util.forEach($headers, ($header) => {
if (scroll > ACCURACY) {
@@ -1101,7 +1155,6 @@ class FixIt {
event();
}
this.initToc();
this.switchMermaidTheme();
this.initSearch();
const isMobile = this.util.isMobile()
@@ -1142,7 +1195,8 @@ class FixIt {
try {
if (this.config.encryption) {
this.initFixItDecryptor();
} else if (!this.config.encryption?.all) {
}
if (!this.config.encryption?.all) {
this.initTwemoji();
this.initDetails();
this.initLightGallery();
+31
View File
@@ -55,4 +55,35 @@ export default class Util {
behavior: 'smooth'
});
}
/**
* get a hidden element for temporary use
* @returns {Object} { $el: Element, destroy: Function }
*/
getStagingDOM() {
const stagingElement = document.createElement('div')
stagingElement.style.display = 'none';
stagingElement.dataset.stagingId = Math.random().toString(36).slice(2);
document.body.appendChild(stagingElement);
return {
$el: stagingElement,
stage(dom) {
stagingElement.innerHTML = '';
stagingElement.appendChild(dom);
},
contentAsHtml() {
return stagingElement.innerHTML;
},
contentAsText() {
return stagingElement.innerText;
},
contentAsJson() {
return JSON.parse(stagingElement.innerHTML);
},
destroy() {
document.body.removeChild(stagingElement);
}
}
}
}
+3 -4
View File
@@ -1,11 +1,11 @@
algoliasearch@4.20.0 https://github.com/algolia/algoliasearch-client-javascript
animate.css@4.1.1 https://github.com/daneden/animate.css
aplayer@1.10.1 https://github.com/MoePlayer/APlayer
artalk@2.6.4 https://github.com/ArtalkJS/Artalk
artalk@latest https://github.com/ArtalkJS/Artalk
autocomplete-js@0.38.1 https://github.com/algolia/autocomplete
cell-watermark@1.0.3 https://github.com/Lruihao/watermark
cookieconsent@3.1.1 https://github.com/osano/cookieconsent
crypto-js@4.1.1 https://github.com/brix/crypto-js
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
@@ -14,10 +14,9 @@ fontawesome-free@6.4.2 https://github.com/FortAwesome/Font-Awesome
fusejs@6.6.2 https://github.com/krisk/fuse
gitalk@1.7.2 https://github.com/gitalk/gitalk
instant.page@5.2.0 https://github.com/instantpage/instant.page
katex@0.16.9 https://github.com/KaTeX/KaTeX
katex@0.16.10 https://github.com/KaTeX/KaTeX
lightgallery@2.7.2 https://github.com/sachinchoolur/lightgallery
mapbox-gl@2.10.0 https://github.com/mapbox/mapbox-gl-js
mermaid@9.4.3 https://github.com/mermaid-js/mermaid
meting@2.0.1 https://github.com/metowolf/MetingJS
normalize.css@8.0.1 https://github.com/necolas/normalize.css
object-fit-images@3.2.4 https://github.com/fregante/object-fit-images [archived]
-8
View File
@@ -48,14 +48,6 @@
.aplayer-list {
background-color: #212121;
&::-webkit-scrollbar-thumb {
background-color: #999;
}
&::-webkit-scrollbar-thumb:hover {
background-color: #bbb;
}
li {
color: #fff;
border-top-color: #666;
-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
+1 -1
View File
@@ -75,7 +75,7 @@
var M_offset_14 = M[offset + 14];
var M_offset_15 = M[offset + 15];
// Working varialbes
// Working variables
var a = H[0];
var b = H[1];
var c = H[2];
+1 -1
View File
@@ -1 +1 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var i=r[e];if(void 0!==i)return i.exports;var a=r[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var i={};return function(){n.d(i,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,i=0,a=e.length;n<t.length;){var o=t[n];if(i<=0&&t.slice(n,n+a)===e)return n;"\\"===o?n++:"{"===o?i++:"}"===o&&i--,n++}return-1},a=/^\\begin{/,o=function(e,t){for(var n,i=[],o=new RegExp("("+t.map((function(e){return e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")})).join("|")+")");-1!==(n=e.search(o));){n>0&&(i.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=a.test(d)?d:e.slice(t[l].left.length,n);i.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&i.push({type:"text",data:e}),i},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var i=document.createDocumentFragment(),a=0;a<n.length;a++)if("text"===n[a].type)i.appendChild(document.createTextNode(n[a].data));else{var l=document.createElement("span"),d=n[a].data;r.displayMode=n[a].display;try{r.preProcess&&(d=r.preProcess(d)),t().render(d,l,r)}catch(e){if(!(e instanceof t().ParseError))throw e;r.errorCallback("KaTeX auto-render: Failed to parse `"+n[a].data+"` with ",e),i.appendChild(document.createTextNode(n[a].rawData));continue}i.appendChild(l)}return i},d=function e(t,r){for(var n=0;n<t.childNodes.length;n++){var i=t.childNodes[n];if(3===i.nodeType){for(var a=i.textContent,o=i.nextSibling,d=0;o&&o.nodeType===Node.TEXT_NODE;)a+=o.textContent,o=o.nextSibling,d++;var s=l(a,r);if(s){for(var f=0;f<d;f++)i.nextSibling.remove();n+=s.childNodes.length-1,t.replaceChild(s,i)}else n+=d}else 1===i.nodeType&&function(){var t=" "+i.className+" ";-1===r.ignoredTags.indexOf(i.nodeName.toLowerCase())&&r.ignoredClasses.every((function(e){return-1===t.indexOf(" "+e+" ")}))&&e(i,r)}()}},s=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},d(e,r)}}(),i=i.default}()}));
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};return function(){r.d(o,{default:function(){return d}});var e=r(771),t=r.n(e);const n=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},i=/^\\begin{/;var a=function(e,t){let r;const o=[],a=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(a),-1!==r;){r>0&&(o.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const a=t.findIndex((t=>e.startsWith(t.left)));if(r=n(t[a].right,e,t[a].left.length),-1===r)break;const l=e.slice(0,r+t[a].right.length),s=i.test(l)?l:e.slice(t[a].left.length,r);o.push({type:"math",data:s,rawData:l,display:t[a].display}),e=e.slice(r+t[a].right.length)}return""!==e&&o.push({type:"text",data:e}),o};const l=function(e,n){const r=a(e,n.delimiters);if(1===r.length&&"text"===r[0].type)return null;const o=document.createDocumentFragment();for(let e=0;e<r.length;e++)if("text"===r[e].type)o.appendChild(document.createTextNode(r[e].data));else{const i=document.createElement("span");let a=r[e].data;n.displayMode=r[e].display;try{n.preProcess&&(a=n.preProcess(a)),t().render(a,i,n)}catch(i){if(!(i instanceof t().ParseError))throw i;n.errorCallback("KaTeX auto-render: Failed to parse `"+r[e].data+"` with ",i),o.appendChild(document.createTextNode(r[e].rawData));continue}o.appendChild(i)}return o},s=function(e,t){for(let n=0;n<e.childNodes.length;n++){const r=e.childNodes[n];if(3===r.nodeType){let o=r.textContent,i=r.nextSibling,a=0;for(;i&&i.nodeType===Node.TEXT_NODE;)o+=i.textContent,i=i.nextSibling,a++;const s=l(o,t);if(s){for(let e=0;e<a;e++)r.nextSibling.remove();n+=s.childNodes.length-1,e.replaceChild(s,r)}else n+=a}else if(1===r.nodeType){const e=" "+r.className+" ";-1===t.ignoredTags.indexOf(r.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&s(r,t)}}};var d=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},s(e,n)}}(),o=o.default}()}));
+1 -1
View File
@@ -1 +1 @@
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={},t={inline:["$","$"],display:["$$","$$"]};var n=function(e,n){void 0===n&&(n=t);for(var r=e.querySelectorAll(".katex-mathml + .katex-html"),a=0;a<r.length;a++){var o=r[a];o.remove?o.remove():o.parentNode&&o.parentNode.removeChild(o)}for(var i=e.querySelectorAll(".katex-mathml"),l=0;l<i.length;l++){var f=i[l],c=f.querySelector("annotation");c&&(f.replaceWith?f.replaceWith(c):f.parentNode&&f.parentNode.replaceChild(c,f),c.innerHTML=n.inline[0]+c.innerHTML+n.inline[1])}for(var d=e.querySelectorAll(".katex-display annotation"),s=0;s<d.length;s++){var p=d[s];p.innerHTML=n.display[0]+p.innerHTML.substr(n.inline[0].length,p.innerHTML.length-n.inline[0].length-n.inline[1].length)+n.display[1]}return e};function r(e){var t=e instanceof Element?e:e.parentElement;return t&&t.closest(".katex")}return document.addEventListener("copy",(function(e){var t=window.getSelection();if(!t.isCollapsed&&e.clipboardData){var a=e.clipboardData,o=t.getRangeAt(0),i=r(o.startContainer);i&&o.setStartBefore(i);var l=r(o.endContainer);l&&o.setEndAfter(l);var f=o.cloneContents();if(f.querySelector(".katex-mathml")){var c=Array.prototype.map.call(f.childNodes,(function(e){return e instanceof Text?e.textContent:e.outerHTML})).join("");a.setData("text/html",c),a.setData("text/plain",n(f).textContent),e.preventDefault()}}})),e=e.default}()}));
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)("object"==typeof exports?exports:e)[o]=n[o]}}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={};const t={inline:["$","$"],display:["$$","$$"]};var n=function(e,n){void 0===n&&(n=t);const o=e.querySelectorAll(".katex-mathml + .katex-html");for(let e=0;e<o.length;e++){const t=o[e];t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}const r=e.querySelectorAll(".katex-mathml");for(let e=0;e<r.length;e++){const t=r[e],o=t.querySelector("annotation");o&&(t.replaceWith?t.replaceWith(o):t.parentNode&&t.parentNode.replaceChild(o,t),o.innerHTML=n.inline[0]+o.innerHTML+n.inline[1])}const l=e.querySelectorAll(".katex-display annotation");for(let e=0;e<l.length;e++){const t=l[e];t.innerHTML=n.display[0]+t.innerHTML.substr(n.inline[0].length,t.innerHTML.length-n.inline[0].length-n.inline[1].length)+n.display[1]}return e};function o(e){const t=e instanceof Element?e:e.parentElement;return t&&t.closest(".katex")}return document.addEventListener("copy",(function(e){const t=window.getSelection();if(t.isCollapsed||!e.clipboardData)return;const r=e.clipboardData,l=t.getRangeAt(0),i=o(l.startContainer);i&&l.setStartBefore(i);const a=o(l.endContainer);a&&l.setEndAfter(a);const s=l.cloneContents();if(!s.querySelector(".katex-mathml"))return;const c=Array.prototype.map.call(s.childNodes,(e=>e instanceof Text?e.textContent:e.outerHTML)).join("");r.setData("text/html",c),r.setData("text/plain",n(s).textContent),e.preventDefault()})),e=e.default}()}));
+1 -1
View File
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
-1580
View File
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
-330
View File
@@ -1,330 +0,0 @@
# Contributors-Readme
## [Contributors](https://github.com/hugo-fixit/FixIt/graphs/contributors)
<!-- readme: contributors,d-baer -start -->
<table>
<tr>
<td align="center">
<a href="https://github.com/Lruihao">
<img src="https://avatars.githubusercontent.com/u/33419593?v=4" width="100;" alt="Lruihao"/>
<br />
<sub><b>Cell</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/dillonzq">
<img src="https://avatars.githubusercontent.com/u/30786232?v=4" width="100;" alt="dillonzq"/>
<br />
<sub><b>Dillon</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Fastbyte01">
<img src="https://avatars.githubusercontent.com/u/16869546?v=4" width="100;" alt="Fastbyte01"/>
<br />
<sub><b>Giuseppe Pignataro</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Programazing">
<img src="https://avatars.githubusercontent.com/u/11393826?v=4" width="100;" alt="Programazing"/>
<br />
<sub><b>Christopher C. Johnson</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/astropenguin">
<img src="https://avatars.githubusercontent.com/u/13254278?v=4" width="100;" alt="astropenguin"/>
<br />
<sub><b>Akio Taniguchi</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/DaveA-W">
<img src="https://avatars.githubusercontent.com/u/6415842?v=4" width="100;" alt="DaveA-W"/>
<br />
<sub><b>Dave A-W</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/yureiita">
<img src="https://avatars.githubusercontent.com/u/26035759?v=4" width="100;" alt="yureiita"/>
<br />
<sub><b>Abdul Halim Daud</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/psi59">
<img src="https://avatars.githubusercontent.com/u/15508203?v=4" width="100;" alt="psi59"/>
<br />
<sub><b>Sangil Park</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Fedomn">
<img src="https://avatars.githubusercontent.com/u/6177727?v=4" width="100;" alt="Fedomn"/>
<br />
<sub><b>Frank Ma</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Mejituu">
<img src="https://avatars.githubusercontent.com/u/36153418?v=4" width="100;" alt="Mejituu"/>
<br />
<sub><b>Mejituu</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/ctj12461">
<img src="https://avatars.githubusercontent.com/u/42143810?v=4" width="100;" alt="ctj12461"/>
<br />
<sub><b>Justin Chen</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/edte">
<img src="https://avatars.githubusercontent.com/u/50194671?v=4" width="100;" alt="edte"/>
<br />
<sub><b>Edte</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/solarpowerinncr">
<img src="https://avatars.githubusercontent.com/u/37186560?v=4" width="100;" alt="solarpowerinncr"/>
<br />
<sub><b>Solarpowerinncr</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/xueweiwujxw">
<img src="https://avatars.githubusercontent.com/u/45992640?v=4" width="100;" alt="xueweiwujxw"/>
<br />
<sub><b>Xuewei Wu</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/youngxhui">
<img src="https://avatars.githubusercontent.com/u/16971804?v=4" width="100;" alt="youngxhui"/>
<br />
<sub><b>Youngxhui</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Kapusch">
<img src="https://avatars.githubusercontent.com/u/9576733?v=4" width="100;" alt="Kapusch"/>
<br />
<sub><b>Jean-Emmanuel BAILLAT</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/0x020B">
<img src="https://avatars.githubusercontent.com/u/106423923?v=4" width="100;" alt="0x020B"/>
<br />
<sub><b>N0tr00t</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/dogukanerel">
<img src="https://avatars.githubusercontent.com/u/19349444?v=4" width="100;" alt="dogukanerel"/>
<br />
<sub><b>Doğukan Erel</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/devandreacarratta">
<img src="https://avatars.githubusercontent.com/u/46504271?v=4" width="100;" alt="devandreacarratta"/>
<br />
<sub><b>Andrea Carratta</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/cmpsoares91">
<img src="https://avatars.githubusercontent.com/u/4914211?v=4" width="100;" alt="cmpsoares91"/>
<br />
<sub><b>Carlos Manuel Soares</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/AutomationD">
<img src="https://avatars.githubusercontent.com/u/1790594?v=4" width="100;" alt="AutomationD"/>
<br />
<sub><b>Dmitry Kireev</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/thejayhaykid">
<img src="https://avatars.githubusercontent.com/u/9452325?v=4" width="100;" alt="thejayhaykid"/>
<br />
<sub><b>Jake Hayes</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/markdluethje">
<img src="https://avatars.githubusercontent.com/u/31922494?v=4" width="100;" alt="markdluethje"/>
<br />
<sub><b>Mark-Daniel Lüthje</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/mathieu-gilloots">
<img src="https://avatars.githubusercontent.com/u/1282351?v=4" width="100;" alt="mathieu-gilloots"/>
<br />
<sub><b>Mathieu GILLOOTS</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/NicoDreamzZ">
<img src="https://avatars.githubusercontent.com/u/12086166?v=4" width="100;" alt="NicoDreamzZ"/>
<br />
<sub><b>Nico Rügheimer</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/ramrodo">
<img src="https://avatars.githubusercontent.com/u/2797052?v=4" width="100;" alt="ramrodo"/>
<br />
<sub><b>Rodolfo Martínez Vega</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/SilkeHenderickx">
<img src="https://avatars.githubusercontent.com/u/28140438?v=4" width="100;" alt="SilkeHenderickx"/>
<br />
<sub><b>Silke Henderickx</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/stefanoginobili">
<img src="https://avatars.githubusercontent.com/u/67482642?v=4" width="100;" alt="stefanoginobili"/>
<br />
<sub><b>Stefano Ginobili</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/tlereste">
<img src="https://avatars.githubusercontent.com/u/12964583?v=4" width="100;" alt="tlereste"/>
<br />
<sub><b>Thibault Le Reste</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/vanildosouto">
<img src="https://avatars.githubusercontent.com/u/1603028?v=4" width="100;" alt="vanildosouto"/>
<br />
<sub><b>Vanildo Souto Mangueira</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/victor-pogor">
<img src="https://avatars.githubusercontent.com/u/24962085?v=4" width="100;" alt="victor-pogor"/>
<br />
<sub><b>Victor Pogor</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/wtchangdm">
<img src="https://avatars.githubusercontent.com/u/1546333?v=4" width="100;" alt="wtchangdm"/>
<br />
<sub><b>W.T. Chang</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/anup92k">
<img src="https://avatars.githubusercontent.com/u/51033013?v=4" width="100;" alt="anup92k"/>
<br />
<sub><b>Anup</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/codedge">
<img src="https://avatars.githubusercontent.com/u/4409904?v=4" width="100;" alt="codedge"/>
<br />
<sub><b>Holger Lösken</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/hiifong">
<img src="https://avatars.githubusercontent.com/u/89133723?v=4" width="100;" alt="hiifong"/>
<br />
<sub><b>Hiifong</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/nikusaikou">
<img src="https://avatars.githubusercontent.com/u/32993922?v=4" width="100;" alt="nikusaikou"/>
<br />
<sub><b>Niku</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/onisuly">
<img src="https://avatars.githubusercontent.com/u/8399827?v=4" width="100;" alt="onisuly"/>
<br />
<sub><b>Onisuly</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/quyleanh">
<img src="https://avatars.githubusercontent.com/u/9365035?v=4" width="100;" alt="quyleanh"/>
<br />
<sub><b>Quy Le Anh</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/sarathsp06">
<img src="https://avatars.githubusercontent.com/u/964542?v=4" width="100;" alt="sarathsp06"/>
<br />
<sub><b>Sarath Sadasivan Pillai</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/tomaja-linuxo">
<img src="https://avatars.githubusercontent.com/u/37209662?v=4" width="100;" alt="tomaja-linuxo"/>
<br />
<sub><b>Tomaja</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/ziobron">
<img src="https://avatars.githubusercontent.com/u/4595135?v=4" width="100;" alt="ziobron"/>
<br />
<sub><b>Łukasz Ziobroń</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/d-baer">
<img src="https://avatars.githubusercontent.com/u/22482986?v=4" width="100;" alt="d-baer"/>
<br />
<sub><b>D-baer</b></sub>
</a>
</td></tr>
</table>
<!-- readme: contributors,d-baer -end -->
## Bots
<!-- readme: bots -start -->
<table>
<tr>
<td align="center">
<a href="https://github.com/dependabot[bot]">
<img src="https://avatars.githubusercontent.com/in/29110?v=4" width="100;" alt="dependabot[bot]"/>
<br />
<sub><b>dependabot[bot]</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/github-actions[bot]">
<img src="https://avatars.githubusercontent.com/in/15368?v=4" width="100;" alt="github-actions[bot]"/>
<br />
<sub><b>github-actions[bot]</b></sub>
</a>
</td></tr>
</table>
<!-- readme: bots -end -->
+3 -3
View File
@@ -3,11 +3,11 @@
"https://fixit.lruihao.cn",
"https://pre.fixit.lruihao.cn",
"https://hugofixit.vercel.app",
"https://fixit-x-cell.vercel.app"
"https://docs-cell-x.vercel.app"
],
"originsRegex": [
"https://fixit-git-([A-z0-9]|-)*x-cell\\.vercel\\.app",
"https://fixit-[A-z0-9]{9}-x-cell\\.vercel\\.app",
"https://docs-git-([A-z0-9]|-)*cell-x\\.vercel\\.app",
"https://docs-[A-z0-9]{9}-cell-x\\.vercel\\.app",
"http://localhost:[0-9]+"
],
"defaultCommentOrder": "oldest"
+357 -348
View File
@@ -1,6 +1,8 @@
# =====================================================================================
# It's recommended to use Alternate Theme Config to configure FixIt
# Modifying this file may result in merge conflict
# There are currently some restrictions to what a theme component can configure:
# params, menu, outputformats and mediatypes
# =====================================================================================
# -------------------------------------------------------------------------------------
@@ -131,7 +133,7 @@ enableEmoji = true
[module]
[module.hugoVersion]
extended = true
min = "0.112.0"
min = "0.123.0"
# -------------------------------------------------------------------------------------
# Markup related configuration in Hugo
@@ -420,9 +422,6 @@ enableEmoji = true
# Footer config
[params.footer]
enable = true
# FixIt 0.2.17 | CHANGED Custom content (HTML format is supported)
# For advanced use, see parameter `params.customFilePath.footer`
custom = ""
# whether to show copyright info
copyright = true
# whether to show the author
@@ -613,340 +612,14 @@ enableEmoji = true
Phone = ""
Email = ""
RSS = true
# Page config
[params.page]
# FixIt 0.2.18 | NEW whether to enable the author's avatar of the post
authorAvatar = true
# whether to hide a page from home page
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
# whether to enable twemoji
twemoji = false
# whether to enable lightgallery
# FixIt 0.2.18 | CHANGED if set to "force", images in the content will be forced to shown as the gallery.
lightgallery = false
# whether to enable the ruby extended syntax
ruby = true
# whether to enable the fraction extended syntax
fraction = true
# whether to enable the fontawesome extended syntax
fontawesome = true
# license info (HTML format is supported)
license = '<a rel="license external nofollow noopener noreferrer" href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a>'
# whether to show link to Raw Markdown content of the post
linkToMarkdown = true
# FixIt 0.3.0 | NEW whether to show link to view source code of the post
linkToSource = true
# FixIt 0.3.0 | NEW whether to show link to edit the post
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", ...]
pageStyle = "normal"
# FixIt 0.2.17 | CHANGED Auto Bookmark Support
# If true, save the reading progress when closing the page.
autoBookmark = false
# FixIt 0.2.17 | NEW whether to enable wordCount
wordCount = true
# FixIt 0.2.17 | NEW whether to enable readingTime
readingTime = true
# FixIt 0.2.17 | NEW end of post flag
endFlag = ""
# FixIt 0.2.18 | NEW whether to enable instant.page
instantPage = false
# FixIt 0.3.0 | NEW whether to enable collection list at the sidebar
collectionList = false
# FixIt 0.3.0 | NEW whether to enable collection navigation at the end of the post
collectionNavigation = false
# FixIt 0.2.15 | NEW Repost config
[params.page.repost]
enable = false
url = ""
# Table of the contents config
[params.page.toc]
# whether to enable the table of the contents
enable = true
# whether to keep the static table of the contents in front of the post
keepStatic = false
# whether to make the table of the contents in the sidebar automatically collapsed
auto = true
# FixIt 0.2.13 | NEW position of TOC ["left", "right"]
position = "right"
# 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
# Display the reminder if the last modified time is more than 90 days ago
reminder = 90
# Display warning if the last modified time is more than 180 days ago
warning = 180
# If the article expires, close the comment or not
closeComment = false
# FixIt 0.3.0 | NEW page heading config
[params.page.heading]
# used with `markup.tableOfContents.ordered` parameter
[params.page.heading.number]
# whether to enable auto heading numbering
enable = false
[params.page.heading.number.format]
h1 = "{title}"
h2 = "{h2} {title}"
h3 = "{h2}.{h3} {title}"
h4 = "{h2}.{h3}.{h4} {title}"
h5 = "{h2}.{h3}.{h4}.{h5} {title}"
h6 = "{h2}.{h3}.{h4}.{h5}.{h6} {title}"
# FixIt 0.2.16 | CHANGED KaTeX mathematical formulas (https://katex.org)
[params.page.math]
enable = true
# default inline delimiter is $ ... $ and \( ... \)
inlineLeftDelimiter = ""
inlineRightDelimiter = ""
# default block delimiter is $$ ... $$, \[ ... \], \begin{equation} ... \end{equation} and some other functions
blockLeftDelimiter = ""
blockRightDelimiter = ""
# KaTeX extension copy_tex
copyTex = true
# KaTeX extension mhchem
mhchem = true
# Code config
[params.page.code]
# whether to show the copy button of the code block
copy = true
# FixIt 0.2.13 | NEW whether to show the edit button of the code block
edit = true
# the maximum number of lines of displayed code by default
maxShownLines = 10
# Mapbox GL JS config (https://docs.mapbox.com/mapbox-gl-js)
[params.page.mapbox]
# access token of Mapbox GL JS
accessToken = ""
# style for the light theme
lightStyle = "mapbox://styles/mapbox/light-v9"
# style for the dark theme
darkStyle = "mapbox://styles/mapbox/dark-v9"
# whether to add NavigationControl
navigation = true
# whether to add GeolocateControl
geolocate = true
# whether to add ScaleControl
scale = true
# whether to add FullscreenControl
fullscreen = true
# FixIt 0.3.0 | NEW [Experimental] cache remote images locally, see: https://github.com/hugo-fixit/FixIt/pull/362
[params.page.cacheRemoteImages]
enable = false
# replace remote image url with local image url (place in public/images/remote/)
replace = false
# FixIt 0.3.0 | NEW Related content config (https://gohugo.io/content-management/related/)
[params.page.related]
enable = false
count = 5
# FixIt 0.2.17 | NEW Donate (Sponsor) settings
[params.page.reward]
enable = false
animation = false
# position relative to post footer, optional values: ["before", "after"]
position = "after"
# comment = "Buy me a coffee"
# FixIt 0.2.18 | NEW display mode of QR code images, optional values: ["static", "fixed"], default: `static`
mode = "static"
[params.page.reward.ways]
# wechatpay = "/images/wechatpay.png"
# alipay = "/images/alipay.png"
# paypal = "/images/paypal.png"
# bitcoin = "/images/bitcoin.png"
# social share links in post page
[params.page.share]
enable = true
Twitter = true
Facebook = true
Linkedin = false
Whatsapp = false
Pinterest = false
Tumblr = false
HackerNews = false
Reddit = false
VK = false
Buffer = false
Xing = false
Line = false
Instapaper = false
Pocket = false
Flipboard = false
Weibo = true
Myspace = false
Blogger = false
Baidu = false
Odnoklassniki = false
Evernote = false
Skype = false
Trello = false
Mix = false
# FixIt 0.2.15 | CHANGED Comment config
[params.page.comment]
enable = false
# FixIt 0.2.13 | NEW Artalk comment config (https://artalk.js.org/)
[params.page.comment.artalk]
enable = false
server = "https://yourdomain"
site = "默认站点"
placeholder = ""
noComment = ""
sendBtn = ""
editorTravel = true
flatMode = "auto"
# FixIt 0.2.17 | CHANGED enable lightgallery support
lightgallery = false
locale = "" # FixIt 0.2.15 | NEW
# FixIt 0.2.18 | NEW
emoticons = ""
nestMax = 2
nestSort = "DATE_ASC" # ["DATE_ASC", "DATE_DESC", "VOTE_UP_DESC"]
vote = true
voteDown = false
uaBadge = true
listSort = true
imgUpload = true
preview = true
versionCheck = true
# Disqus comment config (https://disqus.com)
[params.page.comment.disqus]
enable = false
# Disqus shortname to use Disqus in posts
shortname = ""
# Gitalk comment config (https://github.com/gitalk/gitalk)
[params.page.comment.gitalk]
enable = false
owner = ""
repo = ""
clientId = ""
clientSecret = ""
# Valine comment config (https://github.com/xCss/Valine)
[params.page.comment.valine]
enable = false
appId = ""
appKey = ""
placeholder = ""
avatar = "mp"
meta = ""
requiredFields = ""
pageSize = 10
lang = ""
visitor = true
recordIP = true
highlight = true
enableQQ = false
serverURLs = ""
# emoji data file name, default is "google.yml"
# ["apple.yml", "google.yml", "facebook.yml", "twitter.yml"]
# located in "themes/FixIt/assets/lib/valine/emoji/" directory
# you can store your own data files in the same path under your project:
# "assets/lib/valine/emoji/"
emoji = ""
commentCount = true # FixIt 0.2.13 | NEW
# FixIt 0.2.16 | CHANGED Waline comment config (https://waline.js.org)
[params.page.comment.waline]
enable = false
serverURL = ""
pageview = false # FixIt 0.2.15 | NEW
emoji = ["//unpkg.com/@waline/emojis@1.1.0/weibo"]
meta = ["nick", "mail", "link"]
requiredMeta = []
login = "enable"
wordLimit = 0
pageSize = 10
imageUploader = false # FixIt 0.2.15 | NEW
highlighter = false # FixIt 0.2.15 | NEW
comment = false # FixIt 0.2.15 | NEW
texRenderer = false # FixIt 0.2.16 | NEW
search = false # FixIt 0.2.16 | NEW
recaptchaV3Key = "" # FixIt 0.2.16 | NEW
reaction = false # FixIt 0.2.18 | NEW
# Facebook comment config (https://developers.facebook.com/docs/plugins/comments)
[params.page.comment.facebook]
enable = false
width = "100%"
numPosts = 10
appId = ""
languageCode = ""
# Telegram comments config (https://comments.app)
[params.page.comment.telegram]
enable = false
siteID = ""
limit = 5
height = ""
color = ""
colorful = true
dislikes = false
outlined = false
# Commento comment config (https://commento.io)
[params.page.comment.commento]
enable = false
# Utterances comment config (https://utteranc.es)
[params.page.comment.utterances]
enable = false
# owner/repo
repo = ""
issueTerm = "pathname"
label = ""
lightTheme = "github-light"
darkTheme = "github-dark"
# FixIt 0.2.13 | NEW Twikoo comment config (https://twikoo.js.org/)
[params.page.comment.twikoo]
enable = false
envId = ""
region = ""
path = ""
visitor = true
commentCount = true
# FixIt 0.2.17 | CHANGED enable lightgallery support
lightgallery = false
# FixIt 0.2.17 | NEW enable Katex support
katex = false
# FixIt 0.2.14 | NEW Giscus comments config
[params.page.comment.giscus]
enable = false
repo = ""
repoId = ""
category = ""
categoryId = ""
mapping = ""
strict = "0" # FixIt NEW | 0.2.18
term = ""
reactionsEnabled = "1"
emitMetadata = "0"
inputPosition = "bottom" # ["top", "bottom"]
lightTheme = "light"
darkTheme = "dark"
lazyLoad = true
# Third-party library config
[params.page.library]
[params.page.library.css]
# someCSS = "some.css"
# located in "assets/"
# Or
# someCSS = "https://cdn.example.com/some.css"
[params.page.library.js]
# someJavascript = "some.js"
# located in "assets/"
# Or
# someJavascript = "https://cdn.example.com/some.js"
# Page SEO config
[params.page.seo]
# image URL
images = []
# Publisher info
[params.page.seo.publisher]
name = ""
logoUrl = ""
# custom social links like the following
# [params.social.twitter]
# id = "lruihao"
# weight = 3
# prefix = "https://twitter.com/"
# Title = "Twitter"
# [social.twitter.icon]
# class = "fa-brands fa-x-twitter fa-fw"
# TypeIt config
[params.typeit]
@@ -1067,7 +740,7 @@ enableEmoji = true
# FixIt 0.2.18 | NEW Depends on the author's email, if the author's email is not set, the local avatar will be used
enable = false
# Gravatar host, default: "www.gravatar.com"
host = "www.gravatar.com" # ["cn.gravatar.com", "gravatar.loli.net", ...]
host = "www.gravatar.com" # ["cravatar.cn", "gravatar.loli.net", ...]
style = "" # ["", "mp", "identicon", "monsterid", "wavatar", "retro", "blank", "robohash"]
# FixIt 0.2.16 | NEW Back to top
@@ -1099,23 +772,359 @@ 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.2.17 | NEW Define custom file paths
# Create your custom files in site directory `layouts/partials/custom` and uncomment needed files below
[params.customFilePath]
# aside = "custom/aside.html"
# profile = "custom/profile.html"
# footer = "custom/footer.html"
# FixIt 0.2.15 | NEW Developer options
# Select the scope named `public_repo` to generate personal access token,
# Configure with environment variable `HUGO_PARAMS_GHTOKEN=xxx`, see https://gohugo.io/functions/os/getenv/#examples
[params.dev]
enable = false
# Check for updates
c4u = false
# Please do not expose to public!
githubToken = ""
# Mobile Devtools config
[params.dev.mDevtools]
enable = false
# "vConsole", "eruda" supported
type = "vConsole"
# Page config
[params.page]
# FixIt 0.2.18 | NEW whether to enable the author's avatar of the post
authorAvatar = true
# whether to hide a page from home page
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
# whether to enable twemoji
twemoji = false
# whether to enable lightgallery
# FixIt 0.2.18 | CHANGED if set to "force", images in the content will be forced to shown as the gallery.
lightgallery = false
# whether to enable the ruby extended syntax
ruby = true
# whether to enable the fraction extended syntax
fraction = true
# whether to enable the fontawesome extended syntax
fontawesome = true
# license info (HTML format is supported)
license = '<a rel="license external nofollow noopener noreferrer" href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a>'
# whether to show link to Raw Markdown content of the post
linkToMarkdown = true
# FixIt 0.3.0 | NEW whether to show link to view source code of the post
linkToSource = true
# FixIt 0.3.0 | NEW whether to show link to edit the post
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", ...]
pageStyle = "normal"
# FixIt 0.2.17 | CHANGED Auto Bookmark Support
# If true, save the reading progress when closing the page.
autoBookmark = false
# FixIt 0.2.17 | NEW whether to enable wordCount
wordCount = true
# FixIt 0.2.17 | NEW whether to enable readingTime
readingTime = true
# FixIt 0.2.17 | NEW end of post flag
endFlag = ""
# FixIt 0.2.18 | NEW whether to enable instant.page
instantPage = false
# FixIt 0.3.0 | NEW whether to enable collection list at the sidebar
collectionList = false
# FixIt 0.3.0 | NEW whether to enable collection navigation at the end of the post
collectionNavigation = false
# FixIt 0.2.15 | NEW Repost config
[params.page.repost]
enable = false
url = ""
# Table of the contents config
[params.page.toc]
# whether to enable the table of the contents
enable = true
# whether to keep the static table of the contents in front of the post
keepStatic = false
# whether to make the table of the contents in the sidebar automatically collapsed
auto = true
# FixIt 0.2.13 | NEW position of TOC ["left", "right"]
position = "right"
# 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
# Display the reminder if the last modified time is more than 90 days ago
reminder = 90
# Display warning if the last modified time is more than 180 days ago
warning = 180
# If the article expires, close the comment or not
closeComment = false
# FixIt 0.3.0 | NEW page heading config
[params.page.heading]
# FixIt 0.3.3 | NEW whether to capitalize automatic text of headings
capitalize = false
# used with `markup.tableOfContents.ordered` parameter
[params.page.heading.number]
# whether to enable auto heading numbering
enable = false
# FixIt 0.3.3 | NEW only enable in main section pages (default is posts)
onlyMainSection = true
[params.page.heading.number.format]
h1 = "{title}"
h2 = "{h2} {title}"
h3 = "{h2}.{h3} {title}"
h4 = "{h2}.{h3}.{h4} {title}"
h5 = "{h2}.{h3}.{h4}.{h5} {title}"
h6 = "{h2}.{h3}.{h4}.{h5}.{h6} {title}"
# FixIt 0.2.16 | CHANGED KaTeX mathematical formulas (https://katex.org)
[params.page.math]
enable = true
# default inline delimiter is $ ... $ and \( ... \)
inlineLeftDelimiter = ""
inlineRightDelimiter = ""
# default block delimiter is $$ ... $$, \[ ... \], \begin{equation} ... \end{equation} and some other functions
blockLeftDelimiter = ""
blockRightDelimiter = ""
# KaTeX extension copy_tex
copyTex = true
# KaTeX extension mhchem
mhchem = true
# Code config
[params.page.code]
# whether to show the copy button of the code block
copy = true
# FixIt 0.2.13 | NEW whether to show the edit button of the code block
edit = true
# the maximum number of lines of displayed code by default
maxShownLines = 10
# Mapbox GL JS config (https://docs.mapbox.com/mapbox-gl-js)
[params.page.mapbox]
# access token of Mapbox GL JS
accessToken = ""
# style for the light theme
lightStyle = "mapbox://styles/mapbox/light-v9"
# style for the dark theme
darkStyle = "mapbox://styles/mapbox/dark-v9"
# whether to add NavigationControl
navigation = true
# whether to add GeolocateControl
geolocate = true
# whether to add ScaleControl
scale = true
# whether to add FullscreenControl
fullscreen = true
# FixIt 0.3.0 | NEW [Experimental] cache remote images locally, see: https://github.com/hugo-fixit/FixIt/pull/362
[params.page.cacheRemoteImages]
enable = false
# replace remote image url with local image url (place in public/images/remote/)
replace = false
# FixIt 0.3.0 | NEW Related content config (https://gohugo.io/content-management/related/)
[params.page.related]
enable = false
count = 5
# FixIt 0.2.17 | NEW Donate (Sponsor) settings
[params.page.reward]
enable = false
animation = false
# position relative to post footer, optional values: ["before", "after"]
position = "after"
# comment = "Buy me a coffee"
# FixIt 0.2.18 | NEW display mode of QR code images, optional values: ["static", "fixed"], default: `static`
mode = "static"
[params.page.reward.ways]
# wechatpay = "/images/wechatpay.png"
# alipay = "/images/alipay.png"
# paypal = "/images/paypal.png"
# bitcoin = "/images/bitcoin.png"
# social share links in post page
[params.page.share]
enable = true
Twitter = true
Facebook = true
Linkedin = false
Whatsapp = false
Pinterest = false
Tumblr = false
HackerNews = false
Reddit = false
VK = false
Buffer = false
Xing = false
Line = false
Instapaper = false
Pocket = false
Flipboard = false
Weibo = true
Myspace = false
Blogger = false
Baidu = false
Odnoklassniki = false
Evernote = false
Skype = false
Trello = false
Mix = false
# FixIt 0.2.15 | CHANGED Comment config
[params.page.comment]
enable = false
# FixIt 0.2.13 | NEW Artalk comment config (https://artalk.js.org/)
[params.page.comment.artalk]
enable = false
server = "https://yourdomain"
site = "默认站点"
# FixIt 0.3.3 | NEW whether use backend configuration
useBackendConf = false
placeholder = ""
noComment = ""
sendBtn = ""
editorTravel = true
flatMode = "auto"
# FixIt 0.2.17 | CHANGED enable lightgallery support
lightgallery = false
locale = "" # FixIt 0.2.15 | NEW
# FixIt 0.2.18 | NEW
emoticons = ""
nestMax = 2
nestSort = "DATE_ASC" # ["DATE_ASC", "DATE_DESC", "VOTE_UP_DESC"]
vote = true
voteDown = false
uaBadge = true
listSort = true
imgUpload = true
preview = true
versionCheck = true
# Disqus comment config (https://disqus.com)
[params.page.comment.disqus]
enable = false
# Disqus shortname to use Disqus in posts
shortname = ""
# Gitalk comment config (https://github.com/gitalk/gitalk)
[params.page.comment.gitalk]
enable = false
owner = ""
repo = ""
clientId = ""
clientSecret = ""
# Valine comment config (https://github.com/xCss/Valine)
[params.page.comment.valine]
enable = false
appId = ""
appKey = ""
placeholder = ""
avatar = "mp"
meta = ""
requiredFields = ""
pageSize = 10
lang = ""
visitor = true
recordIP = true
highlight = true
enableQQ = false
serverURLs = ""
# emoji data file name, default is "google.yml"
# ["apple.yml", "google.yml", "facebook.yml", "twitter.yml"]
# located in "themes/FixIt/assets/lib/valine/emoji/" directory
# you can store your own data files in the same path under your project:
# "assets/lib/valine/emoji/"
emoji = ""
commentCount = true # FixIt 0.2.13 | NEW
# FixIt 0.2.16 | CHANGED Waline comment config (https://waline.js.org)
[params.page.comment.waline]
enable = false
serverURL = ""
pageview = false # FixIt 0.2.15 | NEW
emoji = ["//unpkg.com/@waline/emojis@1.1.0/weibo"]
meta = ["nick", "mail", "link"]
requiredMeta = []
login = "enable"
wordLimit = 0
pageSize = 10
imageUploader = false # FixIt 0.2.15 | NEW
highlighter = false # FixIt 0.2.15 | NEW
comment = false # FixIt 0.2.15 | NEW
texRenderer = false # FixIt 0.2.16 | NEW
search = false # FixIt 0.2.16 | NEW
recaptchaV3Key = "" # FixIt 0.2.16 | NEW
turnstileKey = "" # FixIt 0.3.8 | NEW
reaction = false # FixIt 0.2.18 | NEW
# Facebook comment config (https://developers.facebook.com/docs/plugins/comments)
[params.page.comment.facebook]
enable = false
width = "100%"
numPosts = 10
appId = ""
languageCode = ""
# Telegram comments config (https://comments.app)
[params.page.comment.telegram]
enable = false
siteID = ""
limit = 5
height = ""
color = ""
colorful = true
dislikes = false
outlined = false
# Commento comment config (https://commento.io)
[params.page.comment.commento]
enable = false
# Utterances comment config (https://utteranc.es)
[params.page.comment.utterances]
enable = false
# owner/repo
repo = ""
issueTerm = "pathname"
label = ""
lightTheme = "github-light"
darkTheme = "github-dark"
# FixIt 0.2.13 | NEW Twikoo comment config (https://twikoo.js.org/)
[params.page.comment.twikoo]
enable = false
envId = ""
region = ""
path = ""
visitor = true
commentCount = true
# FixIt 0.2.17 | CHANGED enable lightgallery support
lightgallery = false
# FixIt 0.2.17 | NEW enable Katex support
katex = false
# FixIt 0.2.14 | NEW Giscus comments config
[params.page.comment.giscus]
enable = false
repo = ""
repoId = ""
category = ""
categoryId = ""
mapping = ""
origin = "https://giscus.app" # FixIt NEW | 0.3.7 Or set it to your self-hosted domain
strict = "0" # FixIt NEW | 0.2.18
term = ""
reactionsEnabled = "1"
emitMetadata = "0"
inputPosition = "bottom" # ["top", "bottom"]
lang = ""
lightTheme = "light"
darkTheme = "dark"
lazyLoad = true
# Third-party library config
[params.page.library]
[params.page.library.css]
# someCSS = "some.css"
# located in "assets/"
# Or
# someCSS = "https://cdn.example.com/some.css"
[params.page.library.js]
# someJavascript = "some.js"
# located in "assets/"
# Or
# someJavascript = "https://cdn.example.com/some.js"
# Page SEO config
[params.page.seo]
# image URL
images = []
# Publisher info
[params.page.seo.publisher]
name = ""
logoUrl = ""
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Dieser Artikel wurde zuletzt auf {{ .Date }} aktualisiert,
encryptedAbstract = ""
encryptedMessage = ""
password = "Passwort"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Ähnliche Inhalte"
+2 -1
View File
@@ -14,7 +14,7 @@ quicklyUpgrade = "Quickly upgrade use command: "
[baseof]
backToTop = "Back to Top"
viewComments = "View Comments"
noscript = "Theme FixIt works best with JavaScript enabled."
noscript = "यह वेबसाइट जावास्क्रिप्ट सक्षम होने पर सबसे अच्छा काम करती है।"
# === baseof ===
# === Taxonomy ===
@@ -128,6 +128,7 @@ expirationReminder = "This article was last updated on {{ .Date }}, the content
encryptedAbstract = "This article has been encrypted, so its raw content is invisible!"
encryptedMessage = "Please enter the password"
password = "Password"
enterBtn = "Enter"
encryptyAgain = "Encrypt again"
relatedContent = "Related Content"
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Este artículo se actualizó por última vez el {{ .Date }
encryptedAbstract = ""
encryptedMessage = ""
password = "Contraseña"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Contenido relacionado"
+2 -1
View File
@@ -15,7 +15,7 @@ quicklyUpgrade = "La mise à jour rapide utilise la commande: "
[baseof]
backToTop = "Retour en Haut"
viewComments = "Afficher les Commentaires"
noscript = "Le thème FixIt fonctionne mieux quand JavaScript est activé."
noscript = "Ce site Web fonctionne mieux quand JavaScript est activé."
# === baseof ===
# === Taxonomy ===
@@ -128,6 +128,7 @@ expirationReminder = "Cet article a été mis à jour pour la dernière fois le
encryptedAbstract = "Cet article a été chiffré, son contenu n'est donc pas lisible!"
encryptedMessage = "Entrer le mot de passe"
password = "Mot de passe"
enterBtn = "Entrer"
encryptyAgain = "Chiffrer à nouveau"
relatedContent = "Contenu lié"
+198
View File
@@ -0,0 +1,198 @@
# Translations for Hindi
# हिंदी के लिए अनुवाद
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# === init ===
[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 = "वर्तमान परिवेश \"डिवेलप्मेंट\" का है। \"टिप्पणी प्रणाली\", \"सीडीएन\" और \"फ़िंगरप्रिंट\" अक्षम कर दिए जाएंगे। "
quicklyUpgrade = "शीघ्रता से अपग्रेड यह कमांड का उपयोग करें: "
# === init ===
# === baseof ===
[baseof]
backToTop = "वापस शीर्ष पर"
viewComments = "टिप्पणियाँ देखें"
# This website works best with JavaScript enabled.
noscript = "यह वेबसाइट जेएस को चालू करके बेहतर काम करती है।"
# === baseof ===
# === Taxonomy ===
[archives]
other = "अभिलेखागार"
[allSome]
other = "सभी {{ .Some }}"
[category]
other = "श्रेणी"
[categories]
other = "श्रेणियाँ"
[collection]
other = "संग्रह"
[collections]
other = "संग्रह"
[tag]
other = "टैग"
[tags]
other = "टैग "
[posts]
other = "पदों"
# === Taxonomy ===
# === Section ===
[section]
recentlyUpdated = "हाल ही में अपडेट किया गया"
[section.totalWordCount]
one = "कुल एक शब्द"
other = "कुल {{ .Count }} शब्द"
[section.archiveCounter]
one = "केवल एक लेख"
other = "कुल {{ .Count }} लेख"
# === Section ===
# === Pagination ===
[pagination]
more = "और देखें"
# === Pagination ===
# === partials/header.html ===
[header]
selectLanguage = "भाषा चुने"
noMoretTranslations = "कोई और अनुवाद नहीं"
switchTheme = "थीम बदलें"
# === partials/header.html ===
# === partials/footer.html ===
[footer]
poweredBySome = "{{ .Hugo }} के द्वारा संचालित | थीम - {{ .Theme }}"
siteUV = "कुल विज़िटर"
sitePV = "कुल विज़िट"
siteRunning = "वेबसाइट चल रही है ..."
# === partials/footer.html ===
# === partials/comment.html ===
[comment]
valineLang = "hi"
valinePlaceholder = "आपकी टिप्पणी ..."
facebookLanguageCode = "hi"
# === partials/comment.html ===
# === partials/assets.html ===
[assets]
search = "खोज"
searchPlaceholder = "शीर्षक या सामग्री खोजें ..."
clear = "साफ़ करें"
cancel = "रद्द करें"
noResultsFound = "कोई परिणाम नहीं मिला"
copyToClipboard = "क्लिपबोर्ड पर कॉपी करें"
editLockTitle = "संपादन योग्य कोड ब्लॉक को लॉक करें"
editUnLockTitle = "संपादन योग्य कोड ब्लॉक को अनलॉक करें"
cookieconsentMessage = "यह वेबसाइट आपके अनुभव को बेहतर बनाने के लिए कुकीज़ का उपयोग करती है।"
cookieconsentDismiss = "समझ गया!"
cookieconsentLink = "और अधिक जानें"
# === partials/assets.html ===
# === partials/plugin/share.html ===
[shareOn]
other = " शेयर करें"
# === partials/plugin/share.html ===
# === posts/single.html ===
[single]
contents = "सामग्री"
pin = "शीर्ष पर पिन करें"
repost = "दोबारा पोस्ट करें"
publishedOnDate = "{{ .Date }} पर प्रकाशित"
views = "दृश्य"
comments = "टिप्पणियाँ"
author = "रचयिता"
updatedOnDate = "{{ .Date }} पर अपडेट"
readMarkdown = "मार्कडाउन पढ़ें"
viewSource = "स्रोत देखें"
editThisPage = "इस पृष्ठ को संपादित करें"
reportIssue = "समस्या की रिपोर्ट करें"
back = "पीछे"
home = "घर"
readMore = "और पढ़ें"
expirationReminder = "यह लेख अंतिम बार {{ .Date }} पर अद्यतन किया गया था, सामग्री पुरानी हो सकती है."
encryptedAbstract = "यह लेख एन्क्रिप्ट किया गया है, इसलिए इसकी मूल सामग्री अदृश्य है!"
encryptedMessage = "कृपया पासवर्ड दर्ज करें"
password = "पासवर्ड"
enterBtn = "दर्ज करें"
encryptyAgain = "फिर से एन्क्रिप्ट करें"
relatedContent = "संबंधित सामग्री"
[single.includedIn]
categories = "{{ .Categories }} में शामिल"
collections = "{{ .Collections }} में शामिल"
both = "{{ .Categories }} और {{ .Collections }} में शामिल"
[single.wordCount]
one = "एक शब्द "
other = "{{ .Count }} शब्द "
[single.fuzzyWordCount]
other = "लगभग {{ .Count }} शब्द"
[single.readingTime]
one = "एक मिनट"
other = "{{ .Count }} मिनट"
[single.reward]
donate = "दान करें"
wechatpay = "वीचैट पे"
alipay = "अली पे"
paypal = "पेपैल"
bitcoin = "बिटकॉइन"
# === posts/single.html ===
# === 404.html ===
[pageNotFound]
other = "पृष्ठ नहीं मिला"
[pageNotFoundText]
other = "आप जिस पृष्ठ को खोज रहे हैं वह मौजूद नहीं है। क्षमा मांगना।"
# === 404.html ===
# === offline ===
[offlineTitle]
other = "ऑफलाइन"
[offlineText]
other = "आप इंटरनेट से कनेक्ट नहीं हैं, केवल कैश्ड पेज ही उपलब्ध होंगे।"
# === offline ===
# === shortcodes/admonition.html ===
[admonition]
note = "ध्यान दें"
abstract = "सारांश"
info = "जानकारी"
tip = "टिप"
success = "सफलता"
question = "प्रश्न"
warning = "चेतावनी"
failure = "असफलता"
danger = "खतरा"
bug = "बग"
example = "उदाहरण"
quote = "उद्धरण"
# === shortcodes/admonition.html ===
# === shortcodes/version.html ===
[version]
new = "नया"
changed = "बदला हुआ"
deleted = "हटाए गए"
# === shortcodes/version.html ===
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Questo articolo è stato aggiornato l'ultima volta il {{ .
encryptedAbstract = ""
encryptedMessage = ""
password = "Password"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Contenuti correlati"
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Ten artykuł był ostatnio aktualizowany {{ .Date }}, jego
encryptedAbstract = ""
encryptedMessage = ""
password = "Hasło"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Powiązane treści"
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Este artigo foi atualizado pela última vez em {{ .Date }}
encryptedAbstract = ""
encryptedMessage = ""
password = "Contrasinha"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Conteúdo relacionado"
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Acest articol a fost actualizat ultima dată pe {{ .Date }
encryptedAbstract = ""
encryptedMessage = ""
password = "Parolă"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Conținut înrudit"
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Эта статья последний раз обновл
encryptedAbstract = ""
encryptedMessage = ""
password = "арготизм"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Связанный контент"
+1
View File
@@ -129,6 +129,7 @@ expirationReminder = "Овај чланак је последњи пут ажу
encryptedAbstract = ""
encryptedMessage = ""
password = "Паролица"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Повезани садржај"
+1
View File
@@ -128,6 +128,7 @@ expirationReminder = "Bài viết này được cập nhật lần cuối vào {
encryptedAbstract = ""
encryptedMessage = ""
password = "Mật khẩu"
enterBtn = ""
encryptyAgain = ""
relatedContent = "Nội dung liên quan"
+2 -1
View File
@@ -15,7 +15,7 @@ quicklyUpgrade = "使用命令快速升级:"
[baseof]
backToTop = "回到顶部"
viewComments = "查看评论"
noscript = "FixIt 主题在启用 JavaScript 的情况下效果最佳。"
noscript = "该网站在启用 JavaScript 的情况下效果最佳。"
# === baseof ===
# === Taxonomy ===
@@ -126,6 +126,7 @@ expirationReminder = "本文最后更新于 {{ .Date }},文中内容可能已
encryptedAbstract = "本文已加密,因此其原始内容不可见!"
encryptedMessage = "请输入密码"
password = "密码"
enterBtn = "进入"
encryptyAgain = "重新加密"
relatedContent = "相关内容"
+2 -1
View File
@@ -15,7 +15,7 @@ quicklyUpgrade = "使用命令快速升級:"
[baseof]
backToTop = "回到頂部"
viewComments = "查看評論"
noscript = "FixIt 主題在啟用 JavaScript 的情況下效果最佳。"
noscript = "該網站在啟用 JavaScript 的情況下效果最佳。"
# === baseof ===
# === Taxonomy ===
@@ -126,6 +126,7 @@ expirationReminder = "本文最後更新於 {{ .Date }},文中內容可能已
encryptedAbstract = "本文已加密,囙此其原始內容不可見!"
encryptedMessage = "請輸入密碼"
password = "密碼"
enterBtn = "進入"
encryptyAgain = "重新加密"
relatedContent = "相關內容"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

@@ -1,3 +1,5 @@
{{- $id := dict "Content" (trim (partial "function/dos2unix.html" .Inner) "\n") "Scratch" .Page.Scratch | partial "function/id.html" -}}
<div class="mermaid" id="{{ $id }}"></div>
{{- .Page.Scratch.SetInMap "this" "mermaid" true -}}
<pre class="mermaid">
{{- .Inner | safeHTML }}
</pre>
<template>{{- .Inner | safeHTML }}</template>
{{- .Page.Store.Set "hasMermaid" true -}}
@@ -1,3 +1,2 @@
{{- $id := dict "Content" .Attributes "Scratch" .Page.Scratch | partial "function/id.html" -}}
{{- $codeBlock := transform.Highlight .Inner .Type .Options -}}
{{- replace $codeBlock "<div class=\"highlight\">" (printf "<div class=\"highlight\" id=\"%v\">" $id) 1 | safeHTML -}}
{{- $result := transform.HighlightCodeBlock . -}}
{{- $result.Wrapped -}}
+13 -9
View File
@@ -1,5 +1,5 @@
{{- /* Read the config and format */ -}}
{{- $params := .Page.Scratch.Get "params" -}}
{{- $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}" -}}
@@ -13,9 +13,10 @@
{{- end -}}
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading-element">
<a href="#{{ .Anchor | safeURL }}" class="heading-mark"></a>
{{- if $params.heading.number.enable -}}
{{- $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 -}}
{{- /* Add 1 to the current level */ -}}
{{- $headingMap := .Page.Scratch.Get "heading-counter" -}}
{{- $count := (string .Level) | index $headingMap | int | add 1 -}}
@@ -30,7 +31,7 @@
{{- $h6 := "6" | index $headingMap | int | string -}}
{{- /* Apply the level based on the format */ -}}
{{- $title := "" -}}
{{- $title = "" -}}
{{- if .Level | eq 1 -}}
{{- $title = $h1Format -}}
{{- else if .Level | eq 2 -}}
@@ -52,10 +53,13 @@
{{- $title = replace $title "{h5}" $h5 -}}
{{- $title = replace $title "{h6}" $h6 -}}
{{- $title = replace $title "{title}" .Text -}}
{{- $title | safeHTML -}}
{{- else -}}
{{- .Text | safeHTML -}}
{{- end -}}
{{- if $params.heading.capitalize -}}
{{- $title = replace $title .PlainText (title .PlainText) -}}
{{- end -}}
<span>{{ $title | safeHTML }}</span>
<a href="#{{ .Anchor | safeURL }}" class="heading-mark">
<svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
</a>
</h{{ .Level }}>
{{- /* EOF */ -}}
+4 -2
View File
@@ -1,11 +1,13 @@
{{- $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" true "Responsive" true | partial "plugin/image.html" -}}
{{- dict "Src" .Destination "Alt" .Text "Caption" .Text "Title" .Title "Linked" $linked "Responsive" true | partial "plugin/image.html" -}}
<figcaption class="image-caption">
{{- .Text | safeHTML -}}
</figcaption>
</figure>
{{- else -}}
{{- $linked := (eq (.Page.Scratch.Get "params").lightgallery "force") | or (ne .Title "") -}}
{{- $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" -}}
{{- end -}}
+5 -2
View File
@@ -1,4 +1,5 @@
{{- partial "init/index.html" . -}}
{{- partial "custom.html" . -}}
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/WebPage" lang="{{ .Site.LanguageCode }}">
@@ -14,6 +15,8 @@
{{- partial "head/meta.html" . -}}
{{- partial "head/link.html" . -}}
{{- partial "head/seo.html" . -}}
{{- /* 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 */ -}}
@@ -21,14 +24,14 @@
<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="{{ (.Scratch.Get `params`).pageStyle | default `normal` }}">
<div class="wrapper" data-page-style="{{ (partial `function/params.html`).pageStyle | default `normal` }}">
{{- partial "header.html" . -}}
{{- partial "breadcrumb.html" . -}}
{{- $toc := .Scratch.Get "toc" -}}
<main class="container{{ if (eq $toc.enable true) | and (eq $toc.position `left`) }} container-reverse{{ end }}">
{{- block "content" . }}{{ end -}}
</main>
{{- partial "footer.html" . -}}
{{- partialCached "footer.html" . -}}
</div>
{{- /* Theme widgets */ -}}
+8 -4
View File
@@ -1,5 +1,5 @@
{{- define "title" -}}
{{- .Params.Title | default (T .Section) | default .Section | dict "Some" | T "allSome" -}}
{{- title (.Params.Title | default ((T .Section) | default .Section | dict "Some" | T "allSome")) -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
@@ -8,8 +8,12 @@
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">
{{- dict "Class" "fa-solid fa-feather fa-fw me-1" | partial "plugin/icon.html" -}}
{{- .Params.Title | default (T .Section) | default .Section | dict "Some" | T "allSome" }} <sup>{{ .Pages.Len }}</sup>
{{- $titleIcon := "fa-solid fa-feather" -}}
{{- with .Params.titleIcon -}}
{{- $titleIcon = . -}}
{{- end -}}
{{- dict "Class" (add $titleIcon " fa-fw me-1") | partial "plugin/icon.html" -}}
{{- title (.Params.Title | default ((T .Section) | default .Section | dict "Some" | T "allSome")) }} <sup>{{ .Pages.Len }}</sup>
</h1>
{{- /* Total word count */ -}}
{{- /* See https://github.com/hugo-fixit/FixIt/issues/124 */ -}}
@@ -49,7 +53,7 @@
{{- if eq $repost.enable true -}}
{{- dict "Class" "fa-solid fa-share fa-fw text-success me-1" | partial "plugin/icon.html" -}}
{{- end -}}
{{- .LinkTitle -}}
{{- title .LinkTitle -}}
</a>
<span class="archive-item-date" title='{{ "2006-01-02 15:04:05" | .Date.Format }}'>
{{- .Date | dateFormat ($.Site.Params.section.dateFormat | default "01-02") -}}
+3 -3
View File
@@ -1,14 +1,14 @@
{{- define "title" -}}
{{- .Title -}}
{{- title .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
{{- define "content" -}}
{{- $params := .Scratch.Get "params" -}}
{{- $params := partial "function/params.html" -}}
<article class="page single special">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- .Title -}}</h1>
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- title .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . }}</p>{{- end -}}
+3 -3
View File
@@ -1,9 +1,9 @@
{{- $params := .Scratch.Get "params" -}}
{{- $params := partial "function/params.html" -}}
{{- $author := .Store.Get "author" -}}
# {{ .Title }}
# {{ title .Title }}
{{ if $params.password -}}
***{{ T "single.encryptedAbstract" }}***
_**{{ T "single.encryptedAbstract" }}**_
{{- else -}}
{{ .RawContent | replaceRE "\n?{{% fixit-encryptor .+ %}}((\n|.)*){{% /fixit-encryptor %}}\n?" "" }}
{{- end }}
+2 -2
View File
@@ -12,7 +12,7 @@
{{- with $image -}}
<div class="featured-image-preview">
<a href="{{ $.RelPermalink }}" aria-label="{{ $.Title }}">
{{- dict "Src" . "Title" $.Description "Alt" $.Title "Resources" $.Resources | partial "plugin/image.html" -}}
{{- dict "Src" . "Title" $.Description "Alt" $.Title "Resources" $.Resources "Width" "50%" "Height" "50%" | partial "plugin/image.html" -}}
</a>
</div>
{{- end -}}
@@ -31,7 +31,7 @@
<span title="{{ $title }}" class="icon-repost">{{- $icon | partial "plugin/icon.html" -}}</span>
{{- end -}}
{{- end -}}
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
<a href="{{ .RelPermalink }}">{{ title .Title }}</a>
</h2>
{{- /* Meta */ -}}
-44
View File
@@ -1,44 +0,0 @@
{{- /* TODO remove this template */ -}}
{{- warnf "The `type:friends` in front matter is deprecated. Use `layout:friends` instead.\n" -}}
{{- warnf "Front matter 参数 `type:friends` 已弃用。请改用 `layout:friends`。" -}}
{{- define "title" -}}
{{- .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{ end -}}
{{- define "content" -}}
{{- $params := .Scratch.Get "params" -}}
<article class="page single special friends">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . }}</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">
{{ if $friend.avatar }}
{{- dict "Src" $friend.avatar "Alt" $friend.nickname "Class" "friend-avatar" | partial "plugin/image.html" -}}
{{ else }}
<svg class="friend-avatar" aria-hidden="true">
<use xlink:href="#icon-{{ add 1 $index }}"></use>
</svg>
{{ end }}
<span class="friend-nickname" title="{{ $friend.nickname }}">@{{ $friend.nickname }}</span>
</a>
{{ 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>
{{- /* Comment */ -}}
{{- partial "single/comment.html" . -}}
</article>
{{- end -}}
+1 -1
View File
@@ -51,7 +51,7 @@
{{- if eq $repost.enable true -}}
{{- dict "Class" "fa-solid fa-share fa-fw text-success me-1" | partial "plugin/icon.html" -}}
{{- end -}}
{{- .LinkTitle -}}
{{- title .LinkTitle -}}
</a>
<span class="archive-item-date" title='{{ "2006-01-02 15:04:05" | .Date.Format }}'>
{{- .Date | dateFormat ($.Site.Params.archives.dateFormat | default "01-02") -}}
+1 -1
View File
@@ -6,7 +6,7 @@
{{- end -}}
{{- define "content" -}}
{{- $params := .Scratch.Get "params" -}}
{{- $params := partial "function/params.html" -}}
{{- $profile := .Site.Params.home.profile -}}
{{- $posts := .Site.Params.home.posts -}}
+1 -1
View File
@@ -1,4 +1,4 @@
{{- if .Site.Params.search -}}
{{- if .Site.Params.search.enable -}}
{{- $index := slice -}}
{{- $pages := where .Site.RegularPages "Params.password" "eq" nil -}}
{{- if .Site.Params.page.hiddenFromSearch -}}
+1 -1
View File
@@ -5,7 +5,7 @@
{{- T "section.archiveCounter" (len $pages) }}
{{ range $pages.GroupByPublishDate "2006" }}
{{- if ne .Key "0001" -}}
{{- printf "\n## %v\n\n" .Key -}}
{{- printf "\n## %v\n\n%v\n\n" .Key (T "section.archiveCounter" .Pages.Len) -}}
{{- range .Pages -}}
{{- printf "- %v [%v](%v \"%v\")\n" (.PublishDate.Format "01-02") .Title .Permalink (.PublishDate.Format "2006-01-02 15:04:05") -}}
{{- end -}}
+1 -1
View File
@@ -37,7 +37,7 @@
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
{{ end }}
{{- range .Scratch.Get "mainSectionPages" | first (.Site.Params.home.rss | default 10) -}}
{{- $params := .Scratch.Get "params" -}}
{{- $params := partial "function/params.html" -}}
{{- if $params.password | or $params.hiddenFromRss }}{{ continue }}{{ end -}}
{{- dict "Page" . "Site" .Site | partial "rss/item.html" -}}
{{- end -}}
+3 -3
View File
@@ -1,14 +1,14 @@
{{- define "title" -}}
{{- .Title -}}
{{- title .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
{{- define "content" -}}
{{- $params := .Scratch.Get "params" -}}
{{- $params := partial "function/params.html" -}}
<article class="page single special friends">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- .Title -}}</h1>
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- title .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . }}</p>{{- end -}}
</div>
+18 -13
View File
@@ -1,7 +1,8 @@
{{- $params := .Scratch.Get "params" -}}
{{- $params := partial "function/params.html" -}}
{{- $cdn := .Scratch.Get "cdn" | default dict -}}
{{- $fingerprint := .Scratch.Get "fingerprint" -}}
{{- $config := (.Scratch.Get "this").config -}}
{{- $config = dict "version" (.Scratch.Get "version") | merge $config -}}
{{- /* Search */ -}}
{{- if .Site.Params.search | and .Site.Params.search.enable -}}
@@ -70,11 +71,11 @@
{{- end -}}
{{- /* TypeIt */ -}}
{{- with (.Scratch.Get "this").typeitMap -}}
{{- $typeit := $.Site.Params.typeit -}}
{{- if .Store.Get "hasTyped" -}}
{{- $typeit := .Site.Params.typeit -}}
{{- $source := $cdn.typeitJS | default "lib/typeit/index.umd.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- $config = dict "speed" $typeit.speed "cursorSpeed" $typeit.cursorSpeed "cursorChar" $typeit.cursorChar "duration" $typeit.duration "loop" $typeit.loop "data" . | dict "typeit" | merge $config -}}
{{- $config = dict "speed" $typeit.speed "cursorSpeed" $typeit.cursorSpeed "cursorChar" $typeit.cursorChar "duration" $typeit.duration "loop" $typeit.loop | dict "typeit" | merge $config -}}
{{- end -}}
{{- /* KaTeX */ -}}
@@ -114,15 +115,16 @@
{{- end -}}
{{- /* mermaid */ -}}
{{- if (.Scratch.Get "this").mermaid -}}
{{- $source := $cdn.mermaidJS | default "lib/mermaid/mermaid.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $mermaid := .Site.Params.mermaid -}}
{{- $config = dict "themes" $mermaid.themes | dict "mermaid" | merge $config -}}
{{- if .Store.Get "hasMermaid" -}}
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
window.mermaid = mermaid;
window.mermaid.themes = {{ .Site.Params.mermaid.themes }};
</script>
{{- end -}}
{{- /* ECharts */ -}}
{{- if (.Scratch.Get "this").echarts -}}
{{- if .HasShortcode "echarts" -}}
{{- $source := $cdn.echartsJS | default "lib/echarts/echarts.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $lightTheme := resources.Get "lib/echarts/theme/light.yml" | transform.Unmarshal -}}
@@ -131,7 +133,7 @@
{{- end -}}
{{- /* Mapbox GL */ -}}
{{- if (.Scratch.Get "this").mapbox -}}
{{- if .HasShortcode "mapbox" -}}
{{- $source := $cdn.mapboxGLCSS | default "lib/mapbox-gl/mapbox-gl.css" -}}
{{- dict "Source" $source "Minify" true "Fingerprint" $fingerprint "Preload" true | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source = $cdn.mapboxGLJS | default "lib/mapbox-gl/mapbox-gl.js" -}}
@@ -141,7 +143,7 @@
{{- end -}}
{{- /* Music */ -}}
{{- if (.Scratch.Get "this").music -}}
{{- if .HasShortcode "music" -}}
{{- /* APlayer */ -}}
{{- $source := $cdn.aplayerCSS | default "lib/aplayer/APlayer.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Preload" true | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
@@ -183,7 +185,7 @@
{{- end -}}
{{- /* Content Decryption */ -}}
{{- $encryptPartial := (.Scratch.Get "this").encryptPartial -}}
{{- $encryptPartial := .HasShortcode "fixit-encryptor" -}}
{{- if $params.password | or $encryptPartial -}}
{{- $cryptoCoreJS := $cdn.cryptoCoreJS | default "lib/crypto-js/core.js" -}}
{{- $cryptoEncBase64JS := $cdn.cryptoEncBase64JS | default "lib/crypto-js/enc-base64.js" -}}
@@ -304,3 +306,6 @@
{{- end -}}
{{- partial "plugin/analytics.html" . -}}
{{- /* Custom Assets */ -}}
{{- block "custom-assets" . }}{{ end -}}
+2 -2
View File
@@ -3,10 +3,10 @@
<ol class="breadcrumb">
{{- range .Ancestors.Reverse -}}
{{- if or .Site.Params.breadcrumb.showHome (not .IsHome) -}}
<li class="breadcrumb-item"><a href="{{ .RelPermalink }}" title="{{ with .Description }}{{ . }}{{ else }}{{ if .IsPage | and .Summary }}{{ .Summary }}{{ else }}{{ .LinkTitle }}{{ end }}{{ end }}">{{ cond (and .Site.Params.breadcrumb.showHome .IsHome) (T "single.home") ((lower .LinkTitle | T) | default .LinkTitle) }}</a></li>
<li class="breadcrumb-item"><a href="{{ .RelPermalink }}" title="{{ with .Description }}{{ . }}{{ else }}{{ if .IsPage | and .Summary }}{{ .Summary }}{{ else }}{{ title .LinkTitle }}{{ end }}{{ end }}">{{ cond (and .Site.Params.breadcrumb.showHome .IsHome) (T "single.home") ((lower .LinkTitle | T) | default (title .LinkTitle)) }}</a></li>
{{- end -}}
{{- end -}}
<li class="breadcrumb-item active" aria-current="page">{{ .LinkTitle }}</li>
<li class="breadcrumb-item active" aria-current="page">{{ title .LinkTitle }}</li>
</ol>
</nav>
{{- end -}}
+22
View File
@@ -0,0 +1,22 @@
{{- /*
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" -}}
{{- end -}}
{{- define "custom-profile" -}}
{{- end -}}
{{- define "custom-aside" -}}
{{- end -}}
{{- define "custom-footer" -}}
{{- end -}}
{{- define "custom-widgets" -}}
{{- end -}}
{{- define "custom-assets" -}}
{{- end -}}
-1
View File
@@ -1 +0,0 @@
{{- /* Custom aside html */ -}}
-6
View File
@@ -1,6 +0,0 @@
{{- /* Custom footer html */ -}}
{{- with .Site.Params.footer.custom -}}
<div class="footer-line custom">
{{- safeHTML . -}}
</div>
{{- end -}}
-1
View File
@@ -1 +0,0 @@
{{- /* Custom profile html at home page */ -}}
+2 -2
View File
@@ -3,8 +3,8 @@
{{- if ne $footerConfig.enable false -}}
<footer class="footer">
<div class="footer-container">
{{- /* Custom Content */ -}}
{{- partial (.Scratch.Get "customFilePath").footer . -}}
{{- /* Custom Footer */ -}}
{{- block "custom-footer" . }}{{ end -}}
{{- /* Powered by Hugo and Theme - FixIt */ -}}
{{- if ne $footerConfig.powered.enable false -}}
@@ -0,0 +1,12 @@
{{- /* How to use */ -}}
{{- /* partial "function/format-number" (dict "PRECISION" 2 "NUMBER" 5201314 */ -}}
{{- $number := .NUMBER -}}
{{- $precision := .PRECISION | default 1 -}}
{{- with $number -}}
{{- if ge . 1000 -}}
{{- $number = printf "%vk" (lang.FormatNumberCustom $precision (div . 1000.0) "- .") -}}
{{ printf "%v" $number }}
{{- end -}}
{{- end -}}
{{- return $number -}}
@@ -1,18 +1,22 @@
{{- /* cache remote image locally */ -}}
{{- $resource := 0 -}}
{{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" ".avif" ".svg" -}}
{{- $suffixValid := (dict "Path" . "Suffixes" $suffixList | partial "function/suffix-validation.html") -}}
{{- $suffixValid := (dict "Path" .Path "Suffixes" $suffixList | partial "function/suffix-validation.html") -}}
{{- /* maybe could add domain validation */ -}}
{{- $pass := $suffixValid | or .Pass -}}
{{- if $suffixValid -}}
{{- with $remoteResource := resources.GetRemote . -}}
{{- if $pass -}}
{{- with $remoteResource := resources.GetRemote .Path -}}
{{- with .Err -}}
{{- warnf "%s" . -}}
{{ else }}
{{- erroridf "error-get-remote-image" "%s" . -}}
{{- else -}}
{{- if eq $remoteResource.ResourceType "image" -}}
{{- /* placed remote image in public/images/remote/ */ -}}
{{- $resource = $remoteResource | resources.Copy (add "/images/remote/" $remoteResource.Name) -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{- erroridf "error-get-remote-image" "Unable to get remote image %q" .Path -}}
{{- end -}}
{{- end -}}
{{- return $resource -}}
@@ -0,0 +1,12 @@
{{- $response := dict -}}
{{- with resources.GetRemote .URL .OPTIONS -}}
{{- with .Err -}}
{{- erroridf "error-get-remote-json" "%s" . -}}
{{- else -}}
{{- $response = .Content | transform.Unmarshal -}}
{{- end -}}
{{- else -}}
{{- erroridf "error-get-remote-json" "Unable to get remote resource %q" .URL -}}
{{- end -}}
{{- return $response -}}
-3
View File
@@ -8,7 +8,4 @@
{{- $id = printf "id-%d" $count -}}
{{- $count | add 1 | $.Scratch.SetInMap "this" "count" -}}
{{- end -}}
{{- with .Content -}}
{{- dict $id . | dict "data" | dict "config" | merge ($.Scratch.Get "this") | $.Scratch.Set "this" -}}
{{- end -}}
{{- return $id -}}
+2
View File
@@ -0,0 +1,2 @@
{{- $params := page.Params | merge site.Params.page -}}
{{- return $params -}}

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