mirror of
https://github.com/hugo-fixit/FixIt.git
synced 2026-09-01 03:02:42 +00:00
Compare commits
101 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d1ab1a578 | |||
| ca73ca2066 | |||
| 678e2c0053 | |||
| 7e2e1006f1 | |||
| 256f491244 | |||
| 6eaae74708 | |||
| 5c4de3ae21 | |||
| 8db70c5829 | |||
| b4940f46ea | |||
| cbde3f0898 | |||
| 4c9e20b377 | |||
| 1a454de9d2 | |||
| b998371564 | |||
| 9679c3442a | |||
| d908af0a27 | |||
| b1f5515beb | |||
| 069355cc70 | |||
| 6cc4d44ef4 | |||
| 3c4284eb21 | |||
| a985b0e789 | |||
| 70afe3e883 | |||
| efd7b86b67 | |||
| d7c06360c2 | |||
| aa68514546 | |||
| 6b65ca8946 | |||
| 3e6dfc337b | |||
| d82fefa7dd | |||
| f13e95950a | |||
| df7443951b | |||
| 71e855ab08 | |||
| eb0acca980 | |||
| f32402dcdf | |||
| 3e60685d5a | |||
| 3682a2a1d3 | |||
| 4d07d872d5 | |||
| a1e123ac02 | |||
| 6c3c3d7a9a | |||
| a66bc4e0d1 | |||
| b7e9c6166b | |||
| df47c49726 | |||
| c881715c2a | |||
| b32370803b | |||
| 020a8fdbcc | |||
| b06b89cc11 | |||
| ba4b506b2f | |||
| 51bffc18b5 | |||
| 87f0fe68ae | |||
| c2d168c6d1 | |||
| c1b61c7997 | |||
| 5098685763 | |||
| 3c886553db | |||
| 84bca1af4f | |||
| 851b8e48cb | |||
| 89beb8fe4f | |||
| 462506cb92 | |||
| f6ed1ce8fe | |||
| b52b31a0cd | |||
| 12ada20fb8 | |||
| 39e6466d78 | |||
| fd0b171e5f | |||
| 7ceed732d2 | |||
| e07904b0f6 | |||
| 5f5d019f09 | |||
| f4e8babd12 | |||
| 1ed0acdf35 | |||
| 3b89a4eaab | |||
| 20433ed50d | |||
| 6c83d0630c | |||
| 79b5c27ed8 | |||
| dfeaf0e9a7 | |||
| 1e493fef48 | |||
| 7f19569336 | |||
| 429698a096 | |||
| 09440190aa | |||
| 1217640d40 | |||
| 300bbe9a44 | |||
| 7ec41cdb00 | |||
| fd13ca782b | |||
| bae1678c59 | |||
| 72bd72f5ed | |||
| c09f141034 | |||
| a2d8eaa249 | |||
| ff8e5fc7bf | |||
| 84e9eea483 | |||
| 5705048952 | |||
| d379911220 | |||
| 773a8a7eb9 | |||
| 6ab33ff7bf | |||
| dc0b96210a | |||
| 4dc8d0f7d7 | |||
| 76fec05da2 | |||
| 54c773368e | |||
| 05693d8b4c | |||
| 38cf4ee0de | |||
| 3df577cb0d | |||
| 063d8fa219 | |||
| 7f38d99ae4 | |||
| c771bce957 | |||
| 2ea592b4a3 | |||
| a9fd15e47d | |||
| d6be3c1fc2 |
@@ -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:"
|
||||
}
|
||||
}
|
||||
@@ -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}`
|
||||
})
|
||||
}
|
||||
@@ -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}}
|
||||
@@ -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
|
||||
|
||||
@@ -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 }}
|
||||
@@ -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
@@ -25,4 +25,4 @@ $RECYCLE.BIN/
|
||||
## Linux
|
||||
.directory
|
||||
|
||||
|
||||
CHANGELOG.md
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,70 +1,32 @@
|
||||
# FixIt Theme | Hugo
|
||||
|
||||
[](https://github.com/hugo-fixit/FixIt/releases)
|
||||
[](https://gohugo.io/)
|
||||
[](https://gohugo.io/)
|
||||
[](/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.
|
||||
|
||||

|
||||

|
||||
|
||||
## 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 ☕️.
|
||||
[](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
@@ -1,70 +1,32 @@
|
||||
# FixIt 主题 | Hugo
|
||||
|
||||
[](https://github.com/hugo-fixit/FixIt/releases)
|
||||
[](https://gohugo.io/)
|
||||
[](https://gohugo.io/)
|
||||
[](/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) 来了解更多。
|
||||

|
||||
|
||||

|
||||
## 主题文档
|
||||
|
||||
## 快速上手
|
||||
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 🌟 已经是对我最大的鼓励和支持了。\
|
||||
如果你喜爱这个主题,请考虑给我买杯咖啡 ☕️。
|
||||
[](https://github.com/hugo-fixit/FixIt)
|
||||
|
||||
如果你喜爱这个主题,请考虑给我买杯咖啡 ☕️,谢谢!
|
||||
|
||||
- [PayPal](https://paypal.me/Lruihao)
|
||||
- [支付宝](images/alipay.jpg)
|
||||
- [微信支付](images/wechatpay.jpg)
|
||||
|
||||
谢谢!❤️
|
||||
如果你喜欢这个主题,别忘了留下一颗 ⭐️ 哦,谢谢!
|
||||
|
||||
[^1]: 主题名称趣谈:“leave it, keep it,love it,fix it”。出现又离开,爱而不得。这像不像那该死的爱情和 BUG 呢?🤣
|
||||
|
||||
+7
-3
@@ -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
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
}
|
||||
|
||||
&.active {
|
||||
@extend .text-secondary;
|
||||
color: var(--#{$prefix}secondary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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%)};
|
||||
}
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
@import '_link';
|
||||
@import '_blur';
|
||||
@import '_details';
|
||||
@import '_scrollbar-width';
|
||||
@import '_z-index';
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@mixin scrollbar-width($width: thin, $widthLegacy: 12px) {
|
||||
--#{$prefix}scrollbar-width: #{$width};
|
||||
--#{$prefix}scrollbar-width-legacy: #{$widthLegacy};
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'] & {
|
||||
|
||||
@@ -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,5 +1,6 @@
|
||||
@import '_admonition';
|
||||
@import '_bilibili';
|
||||
@import '_douyin';
|
||||
@import '_cardlink';
|
||||
@import '_center-quote';
|
||||
@import '_echarts';
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
.mermaid {
|
||||
text-align: center;
|
||||
&[data-processed='true'] {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
svg {
|
||||
max-width: 100%;
|
||||
|
||||
@@ -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 ========== //
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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,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,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
@@ -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
@@ -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
@@ -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, '&').replace(/</g, '<').replace(/>/g, '>')
|
||||
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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+3
-4
@@ -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]
|
||||
|
||||
Vendored
-8
@@ -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;
|
||||
|
||||
Vendored
-1
File diff suppressed because one or more lines are too long
Vendored
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -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];
|
||||
|
||||
Vendored
+1
-1
@@ -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}()}));
|
||||
Vendored
+1
-1
@@ -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}()}));
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
-1580
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
-1
File diff suppressed because one or more lines are too long
-330
@@ -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
@@ -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"
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Dieser Artikel wurde zuletzt auf {{ .Date }} aktualisiert,
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "Passwort"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Ähnliche Inhalte"
|
||||
|
||||
|
||||
+2
-1
@@ -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"
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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 ===
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Questo articolo è stato aggiornato l'ultima volta il {{ .
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "Password"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Contenuti correlati"
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Ten artykuł był ostatnio aktualizowany {{ .Date }}, jego
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "Hasło"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Powiązane treści"
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Este artigo foi atualizado pela última vez em {{ .Date }}
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "Contrasinha"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Conteúdo relacionado"
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Acest articol a fost actualizat ultima dată pe {{ .Date }
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "Parolă"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Conținut înrudit"
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Эта статья последний раз обновл
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "арготизм"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Связанный контент"
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ expirationReminder = "Овај чланак је последњи пут ажу
|
||||
encryptedAbstract = ""
|
||||
encryptedMessage = ""
|
||||
password = "Паролица"
|
||||
enterBtn = ""
|
||||
encryptyAgain = ""
|
||||
relatedContent = "Повезани садржај"
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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 -}}
|
||||
|
||||
@@ -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 */ -}}
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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 */ -}}
|
||||
|
||||
@@ -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") -}}
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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 */ -}}
|
||||
|
||||
@@ -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 -}}
|
||||
@@ -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
@@ -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
@@ -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 -}}
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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 +0,0 @@
|
||||
{{- /* Custom aside html */ -}}
|
||||
@@ -1,6 +0,0 @@
|
||||
{{- /* Custom footer html */ -}}
|
||||
{{- with .Site.Params.footer.custom -}}
|
||||
<div class="footer-line custom">
|
||||
{{- safeHTML . -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
@@ -1 +0,0 @@
|
||||
{{- /* Custom profile html at home page */ -}}
|
||||
@@ -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 -}}
|
||||
@@ -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 -}}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user