Compare commits

...

126 Commits

Author SHA1 Message Date
Nuno C. d0a1a5b249 Merge pull request #2731 from nunocoracao/dev
🔖 v2.98.0
2026-02-11 22:29:46 +00:00
Nuno Coração 7742b4e239 bumped hugo version in netflix build 2026-02-11 22:27:07 +00:00
Nuno Coração faab08cec5 dependecies fix 2026-02-11 22:25:02 +00:00
Nuno Coração d38accc6ff release polish 2026-02-11 22:15:07 +00:00
Nuno C. 58799b9847 Merge pull request #2779 from suidpit/typeit-random-lines
Feat: typeit support for random shuffle with multiple lines
2026-02-11 21:53:06 +00:00
Nuno C. ad697ff032 Merge pull request #2776 from ZhenShuo2021/docs-icon
📝 Docs: add icon-ref shortcode
2026-02-11 21:52:00 +00:00
Nuno C. e753c191c3 Merge pull request #2775 from ZhenShuo2021/firebase
 Feat: improve Firebase
2026-02-11 21:51:05 +00:00
Nuno C. c53c0ce6d6 Merge pull request #2774 from abdalrahmanshaban0/dev
fix(a11y): add alt text to author profile image
2026-02-11 21:49:53 +00:00
Nuno C. 8bdb64c6d7 Merge pull request #2773 from alxhslm/carousel-captions
feat: Add captions argument to carousel shortcode
2026-02-11 21:49:26 +00:00
Nuno C. 8ac2ee05b8 Merge pull request #2772 from fairchild2026/patch-3
Translate shortcode documentation to Chinese
2026-02-11 21:48:14 +00:00
Nuno C. 326e3536e9 Merge pull request #2771 from alxhslm/gallery-captions
Feat: Allow images inside gallery to have captions
2026-02-11 21:47:24 +00:00
Nuno C. 0cc0b57139 Merge pull request #2770 from alxhslm/accordion-icon
Feat: add icon param to accordian
2026-02-11 21:46:36 +00:00
Nuno C. 3b46fb243b Merge pull request #2768 from fairchild2026/patch-1
Update index.zh-cn.md
2026-02-11 21:45:43 +00:00
Nuno C. 8cd533569e Merge pull request #2778 from AtmosphericIgnition/main
Add personal site
2026-02-11 21:31:58 +00:00
Nuno C. 889c87bf14 Merge branch 'dev' into main 2026-02-11 21:31:45 +00:00
Nuno C. 68cf60bd1d Merge pull request #2754 from EricGusmao/remove-jquery
Remove jQuery dependency and update theme version to 2.97.0
2026-02-11 21:28:13 +00:00
Nuno C. 92c7b3ecdf Merge branch 'dev' into remove-jquery 2026-02-11 21:27:54 +00:00
Nuno C. f017af8d84 Merge pull request #2780 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.37.2 2026-02-11 20:39:36 +00:00
Nuno C. d4c8c941e4 Merge pull request #2769 from nunocoracao/dependabot/npm_and_yarn/dev/commander-14.0.3 2026-02-11 20:39:19 +00:00
Nuno C. 72ca84791a Merge pull request #2767 from nunocoracao/hugo-new-version 2026-02-11 20:38:57 +00:00
dependabot[bot] 94ff143975 📌 Bump puppeteer from 24.36.1 to 24.37.2
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.36.1 to 24.37.2.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.36.1...puppeteer-v24.37.2)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 24.37.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 05:03:29 +00:00
suidpit 38a04ae80b typeit multiple lines shuffled in random order 2026-02-10 12:30:17 +01:00
ZhenShuo Leo 99d329c7b0 feat: reduce firebase blocking time
- use esm format
- defer loading with type="module"
- upgrade from v8.10.0 to v9.23.0
- allow homepage/taxonomy/term log
2026-02-10 06:52:05 +08:00
AtmosphericIgnition 1408e8bb53 Add personal site 2026-02-09 16:11:33 -05:00
nunocoracao 617c6f0c15 Update Hugo supported version 2026-02-09 06:28:14 +00:00
Alex Haslam 896bc473a8 Update docs 2026-02-08 15:50:11 +00:00
Alex Haslam 712cb48fb2 Allow markdown captions 2026-02-08 15:43:16 +00:00
Alex Haslam 73580313b4 Make caption visible again 2026-02-08 14:55:48 +00:00
Alex Haslam b509f51f9b Fix horizontal scrolling issue 2026-02-08 14:02:07 +00:00
ZhenShuo Leo bbe38534d5 docs: add icon-ref shortcode 2026-02-07 23:20:39 +08:00
ZhenShuo Leo 0e9a151ce5 refactor: gather firebase templates 2026-02-07 21:48:53 +08:00
abdalrahmanshaban0 54e7ebc4d9 fix(a11y): add alt text to author profile image 2026-02-06 22:14:25 +02:00
Alex Haslam 76a23c05af Reduce the diff 2026-02-06 13:09:58 +00:00
Alex Haslam 3dd3d0fae8 Make captions move 2026-02-06 13:06:58 +00:00
Alex Haslam 166a326dc7 Add captions argument to carousel 2026-02-06 12:56:14 +00:00
Robin Fairchild 5ee9c27876 Translate shortcode documentation to Chinese 2026-02-05 20:27:52 +08:00
Alex Haslam 76edd20456 Allow figure to be used inside a gallery 2026-02-04 18:00:52 +00:00
Alex Haslam eb09b4ec25 Add tab parameter 2026-02-04 17:41:55 +00:00
dependabot[bot] 8e1f46b102 📌 Bump commander from 14.0.2 to 14.0.3
Bumps [commander](https://github.com/tj/commander.js) from 14.0.2 to 14.0.3.
- [Release notes](https://github.com/tj/commander.js/releases)
- [Changelog](https://github.com/tj/commander.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tj/commander.js/compare/v14.0.2...v14.0.3)

---
updated-dependencies:
- dependency-name: commander
  dependency-version: 14.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 05:04:39 +00:00
Robin Fairchild 33d013309d Update index.zh-cn.md 2026-02-04 00:39:05 +08:00
Nuno C. 506740b1cf Merge pull request #2764 from alxhslm/accordian
 Feat: Add accordian shortcode
2026-02-03 00:04:54 +00:00
Nuno C. 7b04a6407a Merge pull request #2762 from rewse/add-rewse-blog
Add Tats Shibata's blog to users.json
2026-02-03 00:02:42 +00:00
Nuno C. 788493921e Merge branch 'dev' into add-rewse-blog 2026-02-03 00:01:57 +00:00
Nuno C. 25961a04d9 Merge pull request #2755 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.36.1
📌 Bump puppeteer from 24.35.0 to 24.36.1
2026-02-02 23:54:51 +00:00
Nuno C. 651804603a Merge pull request #2756 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.28
📌 Bump katex from 0.16.27 to 0.16.28
2026-02-02 23:54:41 +00:00
Nuno C. c107bc0c50 Merge pull request #2757 from nunocoracao/dependabot/npm_and_yarn/dev/prettier-3.8.1
📌 Bump prettier from 3.8.0 to 3.8.1
2026-02-02 23:54:30 +00:00
Nuno C. 3960982afa Merge pull request #2758 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-02-02 23:54:03 +00:00
Nuno C. ab668ca55d Merge pull request #2752 from baozidai/main
Update sitemap.xml
2026-02-02 23:53:00 +00:00
Nuno C. e63154d379 Merge pull request #2751 from tyloch/patch-2
Add user Artur Tyloch with personal site details
2026-02-02 23:50:22 +00:00
Alex Haslam 7dec363f54 Tidy up examples in docs 2026-01-31 20:31:46 +00:00
Alex Haslam 827fab1ef9 Add space between items 2026-01-31 20:26:10 +00:00
Alex Haslam 63da02addc Add md flag 2026-01-31 20:25:24 +00:00
Alex Haslam 277f7a94cb Add markdown and short-codes to the example 2026-01-31 20:18:41 +00:00
Alex Haslam 750766a445 Add separated flag 2026-01-31 20:18:41 +00:00
Alex Haslam a975c43516 Add example with collapse mode 2026-01-31 20:18:41 +00:00
Alex Haslam 7a9baa1c50 Update to use existing compiled classes 2026-01-31 20:18:41 +00:00
Alex Haslam 82a593e0ed Add to docs 2026-01-31 20:18:39 +00:00
Alex Haslam b096d35b85 Implement accordion shortcode 2026-01-31 20:18:25 +00:00
nunocoracao 2da29e25d5 Update Hugo supported version 2026-01-31 06:12:24 +00:00
Shibata, Tats 96ef081d17 feat: add Tats Shibata's blog to users list 2026-01-29 23:37:23 +09:00
dependabot[bot] fbf833bce5 📌 Bump prettier from 3.8.0 to 3.8.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.8.0...3.8.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 05:03:54 +00:00
dependabot[bot] 18ed97928f 📌 Bump katex from 0.16.27 to 0.16.28
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.27 to 0.16.28.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.27...v0.16.28)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 05:03:48 +00:00
dependabot[bot] b7eeb165d1 📌 Bump puppeteer from 24.35.0 to 24.36.1
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.35.0 to 24.36.1.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.35.0...puppeteer-v24.36.1)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 24.36.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 05:03:43 +00:00
Eric Gusmao 39209dbab3 Remove jQuery dependency and update theme version to 2.97.0 2026-01-26 20:36:32 -03:00
baozidai 31019347aa Update sitemap.xml
Ensure pages with .Sitemap.Disable=true are excluded from sitemap
2026-01-25 16:19:49 +08:00
Artur Tyloch faca690a95 Add user Artur Tyloch with personal site details 2026-01-24 11:47:30 +01:00
Nuno C. be564f4ae1 Merge pull request #2745 from nunocoracao/dependabot/npm_and_yarn/dev/prettier-3.8.0
📌 Bump prettier from 3.7.4 to 3.8.0
2026-01-22 17:00:00 +00:00
Nuno C. 77ac889406 Merge pull request #2744 from nunocoracao/dependabot/npm_and_yarn/dev/jquery-4.0.0
📌 Bump jquery from 3.7.1 to 4.0.0
2026-01-22 16:58:43 +00:00
dependabot[bot] 8c9e51e310 📌 Bump prettier from 3.7.4 to 3.8.0
Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to 3.8.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 05:04:02 +00:00
dependabot[bot] 269f09b8a6 📌 Bump jquery from 3.7.1 to 4.0.0
Bumps [jquery](https://github.com/jquery/jquery) from 3.7.1 to 4.0.0.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Changelog](https://github.com/jquery/jquery/blob/main/changelog.md)
- [Commits](https://github.com/jquery/jquery/compare/3.7.1...4.0.0)

---
updated-dependencies:
- dependency-name: jquery
  dependency-version: 4.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 05:03:54 +00:00
Nuno C. 3a9016a6d9 Update FUNDING.yml with additional funding options
Added support for various funding platforms and updated Buy Me a Coffee username.
2026-01-21 00:15:21 +00:00
Nuno C. a402822d8b Merge pull request #2738 from schaerfo/fix/hero-content-dark-mode
🐛 fix: respect value of disableHeroImageFilter for content
2026-01-17 16:36:28 +00:00
Nuno C. 6da1c6b870 Merge pull request #2735 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.35.0
📌 Bump puppeteer from 24.34.0 to 24.35.0
2026-01-17 16:35:46 +00:00
Christian Schärf ed75c36449 🐛 fix: respect value of disableHeroImageFilter for content 2026-01-15 22:49:34 +01:00
dependabot[bot] 2172b94fe6 💄 Rebuild CSS 2026-01-14 05:04:29 +00:00
dependabot[bot] 69775ac779 📌 Bump puppeteer from 24.34.0 to 24.35.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.34.0 to 24.35.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.34.0...puppeteer-v24.35.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 24.35.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-14 05:03:59 +00:00
Nuno C. 37b5015278 Merge pull request #2732 from GOODJINC/main
Update users.json
2026-01-13 16:02:42 +00:00
GOODJINC ce657d3351 Update users.json 2026-01-13 13:32:15 +09:00
Nuno Coração 9d5806220e 🔖 v2.98.0 2026-01-12 18:10:55 +00:00
Nuno C. 9f2045746e Merge pull request #2700 from nunocoracao/dev
🔖 v2.97.0
2026-01-12 18:07:25 +00:00
Nuno Coração 071ab0de6c udpated users 2026-01-12 18:06:16 +00:00
Nuno C. d9ea382e81 Merge pull request #2704 from RxChi1d/fix/admonition-title-casing
fix(admonition): preserve custom title casing and integrate upstream improvements
2026-01-12 17:45:21 +00:00
Nuno C. 599ebb8610 Merge pull request #2717 from pwhittlesea/optional-new-tab-on-external-links
 Feat: Add option for external link in new tab
2026-01-12 17:44:47 +00:00
Nuno Coração 2540c8102f Merge branch 'dev' of https://github.com/nunocoracao/blowfish into dev 2026-01-12 17:42:22 +00:00
Nuno Coração b8fa87eca2 added views and updated docs 2026-01-12 17:42:10 +00:00
Nuno C. 9c8e3a1e2e Merge pull request #2729 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-01-12 17:40:14 +00:00
nunocoracao 7be81551d4 Update Hugo supported version 2026-01-12 06:09:41 +00:00
Nuno C. f08149b7db Merge pull request #2716 from ZhenShuo2021/stale
🔧 Chore: allow keeping issues
2026-01-12 00:54:44 +00:00
Nuno C. e5fc548eb5 Merge pull request #2714 from ZhenShuo2021/feat/compact
💄 Style(article-link): truncate long summary
2026-01-12 00:53:58 +00:00
Nuno C. 7a23e560c3 Merge pull request #2715 from ZhenShuo2021/stylee
💄 Style: multiple appearance improvements
2026-01-12 00:53:25 +00:00
Nuno C. 7090513545 Merge pull request #2713 from ZhenShuo2021/feat/tabs
 Feat(tabs): add icon, group, and default options
2026-01-12 00:52:30 +00:00
Nuno C. 4277590661 Merge pull request #2723 from davidwritesxyz/patch-1
Update users.json
2026-01-12 00:51:09 +00:00
Nuno C. d3109b4cc9 Merge pull request #2726 from nunocoracao/hugo-new-version 2026-01-11 16:54:00 +00:00
nunocoracao 9fd883fab5 Update Hugo supported version 2026-01-11 06:07:46 +00:00
Nuno C. e5d370cb2d Merge pull request #2702 from reyneese/patch-1 2026-01-10 02:03:42 +00:00
Nuno C. 228eaa164d Merge pull request #2705 from nunocoracao/hugo-new-version 2026-01-10 02:02:54 +00:00
David Thomas e27e55856e Update users.json
Request to add Blowfish site
2026-01-07 12:09:16 -07:00
ZhenShuo Leo 1d275134ad style(list): see details
- Align list TOC wrapper with single TOC wrapper
- Adjust margin
2026-01-08 00:40:24 +08:00
ZhenShuo Leo 10083786cb style(card-link): add line clamp and BEM classes
Add BEM class names for easier CSS targeting
2026-01-07 16:06:56 +08:00
nunocoracao 8121c3f032 Update Hugo supported version 2026-01-07 06:08:15 +00:00
Phillip Whittlesea-Clark 9c861e7c62 Feat: Add option for external link in new tab 2026-01-05 17:26:03 +00:00
rxchi1d 17906e63e2 refactor(admonition): simplify title handling logic
Replace complex title processing (9 lines) with single-line title filter approach.

Changes:
- Simplify $admonitionTitle definition from 5 variables to 1 line
- Remove $titleClass conditional logic (4 lines)
- Replace dynamic CSS class with static "grow" class
- Use Hugo title filter instead of CSS capitalize
- Remove TrimSpace processing per author feedback

This maintains the same visual behavior while significantly reducing code complexity.

Related: PR #2704 feedback from ZhenShuo2021
2026-01-04 23:25:28 +08:00
ZhenShuo Leo 2c7d234312 chore: allow keeping issues 2026-01-04 21:18:55 +08:00
ZhenShuo Leo 493bb3eb5c feat(tabs): update docs 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 6fe75d5277 feat(tabs): wrap items 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 601bb87559 feat(tabs): support default tab 2026-01-04 19:29:38 +08:00
ZhenShuo Leo dbb7d3f7f2 feat(tabs): support group 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 2cac2bfe4a feat(tabs): support icon 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 8c8a914fa9 style(admonition): tweak the dark bg
warning and caution are slightly different from the others to make them more distinguishable
2026-01-04 19:26:32 +08:00
ZhenShuo Leo c3e7d1b8b1 style(alert): add shadow to alert shortcode 2026-01-04 19:25:56 +08:00
ZhenShuo Leo 4a16b20d3f style(header): tweak fixed-fill-blur 2026-01-04 19:25:56 +08:00
ZhenShuo Leo 0083e927c1 style(doc): remove opacity from homepage contributors
images look gray
2026-01-04 01:28:53 +08:00
ZhenShuo Leo ec69178703 style(doc): tweak the icon color on the homepage 2026-01-04 01:28:41 +08:00
ZhenShuo Leo 14a2ea0c80 style(doc): build css for the new homepage 2026-01-04 01:28:35 +08:00
rxchi1d 966828efff fix(i18n): add admonition titles for en 2026-01-03 11:19:17 +08:00
rxchi1d fc9e6efb80 fix(render-blockquote): preserve custom title casing 2026-01-03 11:19:17 +08:00
reyneese 590d4c1479 Feat: add User Reyneese
a wow fiction storytelling blog powered by Blowfish
2026-01-03 06:05:06 +08:00
Nuno Coração b7dc7bc8a2 🔖 v2.97.0 2026-01-02 16:59:50 +00:00
Nuno C. f9eb1d4e81 Merge pull request #2696 from nunocoracao/dev
🔖 v2.96.0
2026-01-02 16:59:10 +00:00
Nuno C. 57591446ea Merge pull request #2699 from nunocoracao/sponsors-callout
update and add sponsors and contributors
2026-01-02 16:58:16 +00:00
Nuno Coração d79d17e807 update and add sponsors and contributors 2026-01-02 16:57:37 +00:00
Nuno C. bb4eeeeeee Merge pull request #2698 from ZhenShuo2021/fix/menu
🐛 Fix(mobile-menu): body not scrollable
2026-01-02 16:21:17 +00:00
Nuno C. 4ce7a3521a Merge pull request #2697 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-01-02 16:20:58 +00:00
ZhenShuo Leo 287e397b82 fix(mobile-menu): body not scrollable 2026-01-02 20:09:50 +08:00
nunocoracao a377e1b072 Update Hugo supported version 2026-01-02 06:08:12 +00:00
Nuno Coração 8281d9d990 🔖 v2.96.0 2026-01-02 00:00:16 +00:00
2324 changed files with 21006 additions and 17280 deletions
+1
View File
@@ -32,3 +32,4 @@ jobs:
days-before-close: 0
remove-stale-when-updated: true
operations-per-run: 100
exempt-issue-labels: 'keep,security'
+9
View File
@@ -23,6 +23,15 @@ exampleSite/resources/
node_modules
.hugo_build.lock
# Firebase scripts
scripts/serviceAccountKey.json
scripts/node_modules/
scripts/*.csv
# Google Analytics export (temporary)
ga-pageviews.csv
*.csv
# OS generated files
.DS_Store
.DS_Store?
-1
View File
@@ -6,7 +6,6 @@
"trailingComma": "all",
"proseWrap": "always",
"plugins": [
"@awmottaz/prettier-plugin-void-html",
"prettier-plugin-go-template"
],
"overrides": [
+47
View File
@@ -178,6 +178,53 @@
],
"description": "Output a set of up to three different colors. Blowfish swatches Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#swatches ",
},
"Tabs - Basic": {
"prefix": "tabs",
"body": [
"{{< tabs >}}",
"",
" {{< tab label=\"${1:Tab 1}\" >}}",
" $2",
" {{< /tab >}}",
"",
" {{< tab label=\"${3:Tab 2}\" >}}",
" $4",
" {{< /tab >}}",
"",
"{{< /tabs >}}"
],
"description": "Insert Hugo tabs shortcode"
},
"Tabs - Full Options": {
"prefix": "tabsfull",
"body": [
"{{< tabs group=\"${1:group-name}\" default=\"${2:Default Tab}\" >}}",
"",
" {{< tab label=\"${3:Tab 1}\" icon=\"${4:code}\" >}}",
" $5",
" {{< /tab >}}",
"",
" {{< tab label=\"${2:Default Tab}\" icon=\"${6:sun}\" >}}",
" $7",
" {{< /tab >}}",
"",
" {{< tab label=\"${8:Tab 3}\" icon=\"${9:moon}\" >}}",
" $0",
" {{< /tab >}}",
"",
"{{< /tabs >}}"
],
"description": "Insert Hugo tabs with group, default, and icons"
},
"Tab": {
"prefix": "tab",
"body": [
"{{< tab label=\"${1:Tab Label}\" >}}",
"$2",
"{{< /tab >}}"
],
"description": "Insert Hugo tab item"
},
"timeline": {
"prefix": ["BFS-timeline", "HSC-timeline", "timeline"],
"body": [
+15 -3
View File
@@ -1,6 +1,18 @@
github: [nunocoracao]
custom:
# These are supported funding model platforms
github: [nunocoracao] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: nunocoracao # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
[
"https://www.paypal.me/nunocoracao",
"https://www.buymeacoffee.com/nunocoracao",
]
+112 -68
View File
@@ -10,7 +10,6 @@
"Courier New", monospace;
--spacing: 0.25rem;
--container-2xs: 18rem;
--container-xs: 20rem;
--container-md: 28rem;
--container-xl: 36rem;
--container-3xl: 48rem;
@@ -923,6 +922,9 @@
.mt-12 {
margin-top: calc(var(--spacing) * 12);
}
.mt-16 {
margin-top: calc(var(--spacing) * 16);
}
.mt-20 {
margin-top: calc(var(--spacing) * 20);
}
@@ -983,6 +985,9 @@
.mb-12 {
margin-bottom: calc(var(--spacing) * 12);
}
.mb-16 {
margin-bottom: calc(var(--spacing) * 16);
}
.mb-20 {
margin-bottom: calc(var(--spacing) * 20);
}
@@ -1030,6 +1035,12 @@
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.line-clamp-5 {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
}
.\!block {
display: block !important;
}
@@ -1063,9 +1074,6 @@
.table-cell {
display: table-cell;
}
.aspect-\[\.\.\.\] {
aspect-ratio: ...;
}
.aspect-\[4\/3\] {
aspect-ratio: 4/3;
}
@@ -1115,6 +1123,9 @@
.h-14 {
height: calc(var(--spacing) * 14);
}
.h-16 {
height: calc(var(--spacing) * 16);
}
.h-24 {
height: calc(var(--spacing) * 24);
}
@@ -1199,6 +1210,9 @@
.w-12 {
width: calc(var(--spacing) * 12);
}
.w-16 {
width: calc(var(--spacing) * 16);
}
.w-24 {
width: calc(var(--spacing) * 24);
}
@@ -1417,6 +1431,13 @@
.gap-4 {
gap: calc(var(--spacing) * 4);
}
.space-y-2 {
:where(& > :not(:last-child)) {
--tw-space-y-reverse: 0;
margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
}
}
.space-y-3 {
:where(& > :not(:last-child)) {
--tw-space-y-reverse: 0;
@@ -1607,6 +1628,10 @@
--tw-border-style: dotted;
border-style: dotted;
}
.border-none {
--tw-border-style: none;
border-style: none;
}
.border-solid {
--tw-border-style: solid;
border-style: solid;
@@ -1731,10 +1756,10 @@
.bg-primary-200 {
background-color: rgba(var(--color-primary-200), 1);
}
.bg-primary-200\/50 {
background-color: color-mix(in srgb, rgba(rgba(var(--color-primary-200), 1), 1) 50%, transparent);
.bg-primary-200\/80 {
background-color: color-mix(in srgb, rgba(rgba(var(--color-primary-200), 1), 1) 80%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, rgba(var(--color-primary-200), 1) 50%, transparent);
background-color: color-mix(in oklab, rgba(var(--color-primary-200), 1) 80%, transparent);
}
}
.bg-primary-500 {
@@ -1749,10 +1774,10 @@
.bg-white {
background-color: #fff;
}
.bg-linear-65 {
--tw-gradient-position: 65deg;
.bg-linear-60 {
--tw-gradient-position: 60deg;
@supports (background-image: linear-gradient(in lab, red, red)) {
--tw-gradient-position: 65deg in oklab;
--tw-gradient-position: 60deg in oklab;
}
background-image: linear-gradient(var(--tw-gradient-stops));
}
@@ -1915,9 +1940,6 @@
.pe-3 {
padding-inline-end: calc(var(--spacing) * 3);
}
.pt-1 {
padding-top: calc(var(--spacing) * 1);
}
.pt-2 {
padding-top: calc(var(--spacing) * 2);
}
@@ -2108,6 +2130,9 @@
.text-neutral-500 {
color: rgba(var(--color-neutral-500), 1);
}
.text-neutral-600 {
color: rgba(var(--color-neutral-600), 1);
}
.text-neutral-700 {
color: rgba(var(--color-neutral-700), 1);
}
@@ -2240,6 +2265,13 @@
--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.ring-2 {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.ring-primary-500 {
--tw-ring-color: rgba(var(--color-primary-500), 1);
}
.outline {
outline-style: var(--tw-outline-style);
outline-width: 1px;
@@ -2327,6 +2359,11 @@
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-opacity {
transition-property: opacity;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -2393,6 +2430,23 @@
rotate: 0deg;
}
}
.group-hover\:scale-110 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
--tw-scale-x: 110%;
--tw-scale-y: 110%;
--tw-scale-z: 110%;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
}
}
.group-hover\:text-primary-500 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
color: rgba(var(--color-primary-500), 1);
}
}
}
.group-hover\:opacity-100 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
@@ -2400,6 +2454,21 @@
}
}
}
.group-hover\:ring-2 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
}
}
.group-hover\:ring-primary-500 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
--tw-ring-color: rgba(var(--color-primary-500), 1);
}
}
}
.group-data-\[twe-input-focused\]\:border-x-0 {
&:is(:where(.group)[data-twe-input-focused] *) {
border-inline-style: var(--tw-border-style);
@@ -2950,16 +3019,16 @@
margin-inline: auto;
}
}
.lg\:ms-auto {
@media (width >= 1024px) {
margin-inline-start: auto;
}
}
.lg\:mt-0 {
@media (width >= 1024px) {
margin-top: calc(var(--spacing) * 0);
}
}
.lg\:ml-auto {
@media (width >= 1024px) {
margin-left: auto;
}
}
.lg\:block {
@media (width >= 1024px) {
display: block;
@@ -3010,11 +3079,6 @@
max-width: none;
}
}
.lg\:max-w-xs {
@media (width >= 1024px) {
max-width: var(--container-xs);
}
}
.lg\:grid-flow-col-dense {
@media (width >= 1024px) {
grid-auto-flow: column dense;
@@ -3292,6 +3356,14 @@
background-color: rgba(var(--color-primary-800), 1);
}
}
.dark\:bg-primary-800\/30 {
&:is(.dark *) {
background-color: color-mix(in srgb, rgba(rgba(var(--color-primary-800), 1), 1) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, rgba(var(--color-primary-800), 1) 30%, transparent);
}
}
}
.dark\:bg-primary-900 {
&:is(.dark *) {
background-color: rgba(var(--color-primary-900), 1);
@@ -3303,46 +3375,18 @@
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
}
.dark\:from-neutral-900\/88 {
&:is(.dark *) {
--tw-gradient-from: color-mix(in srgb, rgba(rgba(var(--color-neutral-900), 1), 1) 88%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-gradient-from: color-mix(in oklab, rgba(var(--color-neutral-900), 1) 88%, transparent);
}
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
}
.dark\:from-primary-600 {
&:is(.dark *) {
--tw-gradient-from: rgba(var(--color-primary-600), 1);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
}
.dark\:via-neutral-800\/72 {
&:is(.dark *) {
--tw-gradient-via: color-mix(in srgb, rgba(rgba(var(--color-neutral-800), 1), 1) 72%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-gradient-via: color-mix(in oklab, rgba(var(--color-neutral-800), 1) 72%, transparent);
}
--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);
--tw-gradient-stops: var(--tw-gradient-via-stops);
}
}
.dark\:to-neutral-800 {
&:is(.dark *) {
--tw-gradient-to: rgba(var(--color-neutral-800), 1);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
}
.dark\:to-neutral-900\/55 {
&:is(.dark *) {
--tw-gradient-to: color-mix(in srgb, rgba(rgba(var(--color-neutral-900), 1), 1) 55%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-gradient-to: color-mix(in oklab, rgba(var(--color-neutral-900), 1) 55%, transparent);
}
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
}
.dark\:to-secondary-800 {
&:is(.dark *) {
--tw-gradient-to: rgba(var(--color-secondary-800), 1);
@@ -4231,35 +4275,35 @@ body.zen-mode-enable {
--adm-todo-text: oklch(44.3% 0.11 240.79);
}
html.dark {
--adm-note-bg: color-mix(in srgb, color-mix(in oklab, oklch(39.1% 0.09 240.876) 40%, transparent), black 15%);
--adm-note-bg: color-mix(in srgb, oklch(44.3% 0.11 240.79), #0f0f0f 50%);
--adm-note-text: oklch(95.1% 0.026 236.824);
--adm-tip-bg: color-mix(in srgb, color-mix(in oklab, oklch(37.8% 0.077 168.94) 40%, transparent), black 15%);
--adm-tip-bg: color-mix(in srgb, oklch(43.2% 0.095 166.913), #0f0f0f 50%);
--adm-tip-text: oklch(95% 0.052 163.051);
--adm-important-bg: color-mix(in srgb, color-mix(in oklab, oklch(38.1% 0.176 304.987) 40%, transparent), black 15%);
--adm-important-bg: color-mix(in srgb, oklch(43.8% 0.218 303.724), #0f0f0f 50%);
--adm-important-text: oklch(94.6% 0.033 307.174);
--adm-warning-bg: color-mix(in srgb, color-mix(in oklab, oklch(40.8% 0.123 38.172) 40%, transparent), black 15%);
--adm-warning-bg: color-mix(in srgb, oklch(47% 0.157 37.304), #0f0f0f 45%);
--adm-warning-text: oklch(95.4% 0.038 75.164);
--adm-caution-bg: color-mix(in srgb, color-mix(in oklab, oklch(39.6% 0.141 25.723) 40%, transparent), black 15%);
--adm-caution-bg: color-mix(in srgb, oklch(44.4% 0.177 26.899), #0f0f0f 45%);
--adm-caution-text: oklch(93.6% 0.032 17.717);
--adm-abstract-bg: color-mix(in srgb, color-mix(in oklab, oklch(39.8% 0.07 227.392) 40%, transparent), black 15%);
--adm-abstract-bg: color-mix(in srgb, oklch(45% 0.085 224.283), #0f0f0f 50%);
--adm-abstract-text: oklch(95.6% 0.045 203.388);
--adm-bug-bg: color-mix(in srgb, color-mix(in oklab, oklch(41% 0.159 10.272) 40%, transparent), black 15%);
--adm-bug-bg: color-mix(in srgb, oklch(45.5% 0.188 13.697), #0f0f0f 50%);
--adm-bug-text: oklch(94.1% 0.03 12.58);
--adm-danger-bg: color-mix(in srgb, color-mix(in oklab, oklch(39.6% 0.141 25.723) 40%, transparent), black 15%);
--adm-danger-bg: color-mix(in srgb, oklch(44.4% 0.177 26.899), #0f0f0f 45%);
--adm-danger-text: oklch(93.6% 0.032 17.717);
--adm-example-bg: color-mix(in srgb, color-mix(in oklab, oklch(38.1% 0.176 304.987) 40%, transparent), black 15%);
--adm-example-bg: color-mix(in srgb, oklch(43.8% 0.218 303.724), #0f0f0f 50%);
--adm-example-text: oklch(94.6% 0.033 307.174);
--adm-failure-bg: color-mix(in srgb, color-mix(in oklab, oklch(40.8% 0.153 2.432) 40%, transparent), black 15%);
--adm-failure-bg: color-mix(in srgb, oklch(45.9% 0.187 3.815), #0f0f0f 50%);
--adm-failure-text: oklch(94.8% 0.028 342.258);
--adm-info-bg: color-mix(in srgb, color-mix(in oklab, oklch(37.9% 0.146 265.522) 40%, transparent), black 15%);
--adm-info-bg: color-mix(in srgb, oklch(42.4% 0.199 265.638), #0f0f0f 50%);
--adm-info-text: oklch(93.2% 0.032 255.585);
--adm-question-bg: color-mix(in srgb, color-mix(in oklab, oklch(41.4% 0.112 45.904) 40%, transparent), black 15%);
--adm-question-bg: color-mix(in srgb, oklch(47.3% 0.137 46.201), #0f0f0f 50%);
--adm-question-text: oklch(96.2% 0.059 95.617);
--adm-quote-bg: color-mix(in srgb, color-mix(in oklab, oklch(21% 0.034 264.665) 40%, transparent), black 15%);
--adm-quote-bg: color-mix(in srgb, oklch(27.8% 0.033 256.848), #0f0f0f 50%);
--adm-quote-text: oklch(96.7% 0.003 264.542);
--adm-success-bg: color-mix(in srgb, color-mix(in oklab, oklch(37.8% 0.077 168.94) 40%, transparent), black 15%);
--adm-success-bg: color-mix(in srgb, oklch(43.2% 0.095 166.913), #0f0f0f 50%);
--adm-success-text: oklch(95% 0.052 163.051);
--adm-todo-bg: color-mix(in srgb, color-mix(in oklab, oklch(44.3% 0.11 240.79) 40%, transparent), black 15%);
--adm-todo-bg: color-mix(in srgb, oklch(44.3% 0.11 240.79), #0f0f0f 50%);
--adm-todo-text: oklch(95.1% 0.026 236.824);
}
.admonition-content > :first-child {
@@ -4658,8 +4702,8 @@ body:has(#mobile-menu-toggle:checked) {
overflow: hidden;
}
@media (min-width: 853px) {
body {
position: static !important;
body:has(#mobile-menu-toggle:checked) {
overflow: visible;
}
}
#bmc-wbtn {
+15 -15
View File
@@ -68,50 +68,50 @@
html.dark {
/* GitHub Core Types (5) */
--adm-note-bg: color-mix(in srgb, theme("colors.sky.900 / 0.4"), black 15%);
--adm-note-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
--adm-note-text: theme("colors.sky.100");
--adm-tip-bg: color-mix(in srgb, theme("colors.emerald.900 / 0.4"), black 15%);
--adm-tip-bg: color-mix(in srgb, theme("colors.emerald.800"), #0f0f0f 50%);
--adm-tip-text: theme("colors.emerald.100");
--adm-important-bg: color-mix(in srgb, theme("colors.purple.900 / 0.4"), black 15%);
--adm-important-bg: color-mix(in srgb, theme("colors.purple.800"), #0f0f0f 50%);
--adm-important-text: theme("colors.purple.100");
--adm-warning-bg: color-mix(in srgb, theme("colors.orange.900 / 0.4"), black 15%);
--adm-warning-bg: color-mix(in srgb, theme("colors.orange.800"), #0f0f0f 45%);
--adm-warning-text: theme("colors.orange.100");
--adm-caution-bg: color-mix(in srgb, theme("colors.red.900 / 0.4"), black 15%);
--adm-caution-bg: color-mix(in srgb, theme("colors.red.800"), #0f0f0f 45%);
--adm-caution-text: theme("colors.red.100");
/* Extended Types (10) */
--adm-abstract-bg: color-mix(in srgb, theme("colors.cyan.900 / 0.4"), black 15%);
--adm-abstract-bg: color-mix(in srgb, theme("colors.cyan.800"), #0f0f0f 50%);
--adm-abstract-text: theme("colors.cyan.100");
--adm-bug-bg: color-mix(in srgb, theme("colors.rose.900 / 0.4"), black 15%);
--adm-bug-bg: color-mix(in srgb, theme("colors.rose.800"), #0f0f0f 50%);
--adm-bug-text: theme("colors.rose.100");
--adm-danger-bg: color-mix(in srgb, theme("colors.red.900 / 0.4"), black 15%);
--adm-danger-bg: color-mix(in srgb, theme("colors.red.800"), #0f0f0f 45%);
--adm-danger-text: theme("colors.red.100");
--adm-example-bg: color-mix(in srgb, theme("colors.purple.900 / 0.4"), black 15%);
--adm-example-bg: color-mix(in srgb, theme("colors.purple.800"), #0f0f0f 50%);
--adm-example-text: theme("colors.purple.100");
--adm-failure-bg: color-mix(in srgb, theme("colors.pink.900 / 0.4"), black 15%);
--adm-failure-bg: color-mix(in srgb, theme("colors.pink.800"), #0f0f0f 50%);
--adm-failure-text: theme("colors.pink.100");
--adm-info-bg: color-mix(in srgb, theme("colors.blue.900 / 0.4"), black 15%);
--adm-info-bg: color-mix(in srgb, theme("colors.blue.800"), #0f0f0f 50%);
--adm-info-text: theme("colors.blue.100");
--adm-question-bg: color-mix(in srgb, theme("colors.amber.900 / 0.4"), black 15%);
--adm-question-bg: color-mix(in srgb, theme("colors.amber.800"), #0f0f0f 50%);
--adm-question-text: theme("colors.amber.100");
--adm-quote-bg: color-mix(in srgb, theme("colors.gray.900 / 0.4"), black 15%);
--adm-quote-bg: color-mix(in srgb, theme("colors.gray.800"), #0f0f0f 50%);
--adm-quote-text: theme("colors.gray.100");
--adm-success-bg: color-mix(in srgb, theme("colors.emerald.900 / 0.4"), black 15%);
--adm-success-bg: color-mix(in srgb, theme("colors.emerald.800"), #0f0f0f 50%);
--adm-success-text: theme("colors.emerald.100");
--adm-todo-bg: color-mix(in srgb, theme("colors.sky.800 / 0.4"), black 15%);
--adm-todo-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
--adm-todo-text: theme("colors.sky.100");
}
+16
View File
@@ -83,6 +83,22 @@
width: calc(100% - 5px);
margin: 0px !important;
}
.gallery figure {
display: inline-block;
margin: 0;
}
.gallery figcaption {
margin-top: 0.25rem;
font-size: 0.875rem;
line-height: 1.25rem;
color: rgb(var(--color-neutral-600));
}
.dark .gallery figcaption {
color: rgb(var(--color-neutral-400));
}
@media (width >= 640px) {
.sm\:grid-w10 {
width: calc(10% - 5px);
+2 -2
View File
@@ -276,8 +276,8 @@ body:has(#mobile-menu-toggle:checked) {
/* Reset body position for desktop after it was modified on mobile */
@media (min-width: 853px) {
body {
position: static !important;
body:has(#mobile-menu-toggle:checked) {
overflow: visible;
}
}
-4
View File
@@ -1,4 +0,0 @@
document.getElementById("button_likes") &&
document.getElementById("button_likes").addEventListener("click", () => {
process_article();
});
+154
View File
@@ -0,0 +1,154 @@
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.23.0/firebase-app.js";
import {
getFirestore,
doc,
getDoc,
setDoc,
updateDoc,
increment,
onSnapshot,
} from "https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore.js";
import { getAuth, signInAnonymously } from "https://www.gstatic.com/firebasejs/9.23.0/firebase-auth.js";
let app, db, auth, oids;
try {
const configEl = document.getElementById("firebase-config");
if (!configEl?.textContent) {
throw new Error("Firebase config element not found");
}
const data = JSON.parse(configEl.textContent);
app = initializeApp(data.config);
oids = {
views: configEl.getAttribute("data-views"),
likes: configEl.getAttribute("data-likes"),
};
db = getFirestore(app);
auth = getAuth(app);
} catch (e) {
console.error("Firebase initialization failed:", e.message);
throw e;
}
const id = oids?.views?.replaceAll("/", "-");
const id_likes = oids?.likes?.replaceAll("/", "-");
let liked = false;
let authReady = false;
function formatNumber(n) {
return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function toggleLoaders(node) {
var classesString = node.className;
if (classesString == "") return;
var classes = classesString.split(" ");
for (var i in classes) {
node.classList.toggle(classes[i]);
}
}
function updateDisplay(collection, nodeId) {
const node = document.getElementById(nodeId);
if (!node) return;
const docId = nodeId.replaceAll("/", "-");
onSnapshot(
doc(db, collection, docId),
(snapshot) => {
node.innerText = snapshot.exists() ? formatNumber(snapshot.data()[collection]) : 0;
toggleLoaders(node);
},
(error) => {
console.error("Firebase snapshot update failed:", error);
},
);
}
async function recordView(id) {
if (!id || localStorage.getItem(id)) return;
try {
const ref = doc(db, "views", id);
const snap = await getDoc(ref);
snap.exists() ? await updateDoc(ref, { views: increment(1) }) : await setDoc(ref, { views: 1 });
localStorage.setItem(id, true);
} catch (e) {
console.error("Record view operation failed:", e.message);
}
}
function updateButton(isLiked) {
const hearts = document.querySelectorAll("span[id='button_likes_heart']");
const empties = document.querySelectorAll("span[id='button_likes_emtpty_heart']");
const texts = document.querySelectorAll("span[id='button_likes_text']");
hearts.forEach((el) => {
el.style.display = isLiked ? "" : "none";
});
empties.forEach((el) => {
el.style.display = isLiked ? "none" : "";
});
texts.forEach((el) => {
el.innerText = isLiked ? "" : "\xa0Like";
});
}
async function toggleLike(add) {
if (!id_likes || !authReady) return;
try {
const ref = doc(db, "likes", id_likes);
const snap = await getDoc(ref);
liked = add;
add ? localStorage.setItem(id_likes, true) : localStorage.removeItem(id_likes);
updateButton(add);
snap.exists()
? await updateDoc(ref, { likes: increment(add ? 1 : -1) })
: await setDoc(ref, { likes: add ? 1 : 0 });
} catch (e) {
console.error("Like operation failed:", e.message);
liked = !add;
add ? localStorage.removeItem(id_likes) : localStorage.setItem(id_likes, true);
updateButton(!add);
}
}
signInAnonymously(auth)
.then(() => {
authReady = true;
document.querySelectorAll("span[id^='views_']").forEach((node) => {
if (node.id) updateDisplay("views", node.id);
});
document.querySelectorAll("span[id^='likes_']").forEach((node) => {
if (node.id) updateDisplay("likes", node.id);
});
recordView(id);
if (id_likes && localStorage.getItem(id_likes)) {
liked = true;
updateButton(true);
}
const likeButton = document.getElementById("button_likes");
if (likeButton) {
likeButton.addEventListener("click", () => {
toggleLike(!liked);
});
}
})
.catch((error) => {
console.error("Firebase anonymous sign-in failed:", error.message);
authReady = false;
});
window.process_article = () => toggleLike(!liked);
-131
View File
@@ -1,131 +0,0 @@
const pageScriptElement = document.currentScript;
const oid =
pageScriptElement && pageScriptElement.getAttribute("data-oid")
? pageScriptElement.getAttribute("data-oid")
: (console.error("data-oid is null"), null);
const oid_likes =
pageScriptElement && pageScriptElement.getAttribute("data-oid-likes")
? pageScriptElement.getAttribute("data-oid-likes")
: (console.error("data-oid-likes is null"), null);
let liked_page = false;
const id = oid ? oid.replaceAll("/", "-") : oid;
const id_likes = oid_likes ? oid_likes.replaceAll("/", "-") : oid_likes;
if (typeof auth !== "undefined") {
const viewed = localStorage.getItem(id);
if (!viewed) {
auth
.signInAnonymously()
.then(() => {
const docRef = db.collection("views").doc(id);
localStorage.setItem(id, true);
docRef
.get()
.then((doc) => {
if (doc.exists) {
db.collection("views")
.doc(id)
.update({
views: firebase.firestore.FieldValue.increment(1),
});
} else {
db.collection("views").doc(id).set({ views: 1 });
}
})
.catch((error) => {
console.log("Error getting document:", error);
});
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
const liked = localStorage.getItem(id_likes);
if (liked) {
liked_page = true;
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
}
}
function like_article(id_likes) {
auth
.signInAnonymously()
.then(() => {
const docRef = db.collection("likes").doc(id_likes);
docRef
.get()
.then((doc) => {
liked_page = true;
localStorage.setItem(id_likes, true);
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
if (doc.exists) {
db.collection("likes")
.doc(id_likes)
.update({
likes: firebase.firestore.FieldValue.increment(1),
});
} else {
db.collection("likes").doc(id_likes).set({ likes: 1 });
}
})
.catch((error) => {
console.log("Error getting document:", error);
});
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
function remove_like_article(id_likes) {
auth
.signInAnonymously()
.then(() => {
const docRef = db.collection("likes").doc(id_likes);
docRef
.get()
.then((doc) => {
liked_page = false;
localStorage.removeItem(id_likes);
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "none";
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "";
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "\xa0Like";
if (doc.exists) {
db.collection("likes")
.doc(id_likes)
.update({
likes: firebase.firestore.FieldValue.increment(-1),
});
} else {
db.collection("likes").doc(id_likes).set({ likes: 0 });
}
})
.catch((error) => {
console.log("Error getting document:", error);
});
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
function process_article() {
if (!liked_page) {
like_article(id_likes);
} else {
remove_like_article(id_likes);
}
}
-70
View File
@@ -1,70 +0,0 @@
if (typeof auth !== "undefined") {
var viewsCollection = db.collection("views");
var likesCollection = db.collection("likes");
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function toggleLoaders(node) {
var classesString = node.className;
if (classesString == "") return;
var classes = classesString.split(" ");
for (var i in classes) {
node.classList.toggle(classes[i]);
}
}
var update_views = function (node, id) {
viewsCollection.doc(id).onSnapshot((doc) => {
var data = doc.data();
if (data) {
node.innerText = numberWithCommas(data.views);
} else {
node.innerText = 0;
}
toggleLoaders(node);
});
};
var update_likes = function (node, id) {
likesCollection.doc(id).onSnapshot((doc) => {
var data = doc.data();
if (data) {
node.innerText = numberWithCommas(data.likes);
} else {
node.innerText = 0;
}
toggleLoaders(node);
});
};
auth
.signInAnonymously()
.then(() => {
var views_nodes = document.querySelectorAll("span[id^='views_']");
for (var i in views_nodes) {
var node = views_nodes[i];
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
if (id) {
update_views(node, id);
}
}
var likes_nodes = document.querySelectorAll("span[id^='likes_']");
for (var i in likes_nodes) {
var node = likes_nodes[i];
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
if (id) {
update_likes(node, id);
}
}
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
+1 -2
View File
@@ -27,7 +27,7 @@ function _getPackeryOptions(nodeGallery) {
}
(function init() {
$(window).on("load", function () {
window.addEventListener("load", function () {
let packeries = [];
let nodeGalleries = document.querySelectorAll(".gallery");
@@ -35,6 +35,5 @@ function _getPackeryOptions(nodeGallery) {
let packery = new Packery(nodeGallery, _getPackeryOptions(nodeGallery));
packeries.push(packery);
});
console.groupEnd();
});
})();
+19 -1
View File
@@ -5,7 +5,25 @@ function initTabs() {
const container = button.closest(".tab__container");
const tabIndex = parseInt(button.dataset.tabIndex);
activateTab(container, tabIndex);
const tabLabel = button.dataset.tabLabel;
const group = container.dataset.tabGroup;
if (group) {
const allGroupContainers = document.querySelectorAll(`.tab__container[data-tab-group="${group}"]`);
allGroupContainers.forEach((groupContainer) => {
const targetButton = Array.from(groupContainer.querySelectorAll(".tab__button")).find(
(btn) => btn.dataset.tabLabel === tabLabel,
);
if (targetButton) {
const targetIndex = parseInt(targetButton.dataset.tabIndex);
activateTab(groupContainer, targetIndex);
}
});
} else {
activateTab(container, tabIndex);
}
};
document.addEventListener("click", tabClickHandler);
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+815 -1597
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -2,4 +2,4 @@
[module.hugoVersion]
extended = true
min = "0.141.0"
max = "0.154.0"
max = "0.155.3"
+1
View File
@@ -93,6 +93,7 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
showWordCount = true
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram", "line"]
showZenMode = false
# externalLinkForceNewTab = false # disable to allow external links in the same tab (defaults to true)
[list]
showHero = false
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
[{"avatar_url":"https://avatars.githubusercontent.com/u/928965?u=f5d781ca0eb5cb5c7ce9e5ee5d3b24dae3d6e987\u0026v=4\u0026s=128","profile_url":"https://github.com/nazar-pc","username":"nazar-pc"},{"avatar_url":"https://avatars.githubusercontent.com/u/17061177?v=4\u0026s=128","profile_url":"https://github.com/ytocquet","username":"ytocquet"},{"avatar_url":"https://avatars.githubusercontent.com/u/49299328?v=4\u0026s=128","profile_url":"https://github.com/LITUATUI","username":"LITUATUI"},{"avatar_url":"https://avatars.githubusercontent.com/u/147227691?v=4\u0026s=128","profile_url":"https://github.com/AtmosphericIgnition","username":"AtmosphericIgnition"}]
+8 -8
View File
@@ -63,7 +63,7 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
[article]
showDate = false
showViews = false
showViews = true
showLikes = false
showDateOnlyInArticle = false
showDateUpdated = false
@@ -134,13 +134,13 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
cardViewScreenWidth = false
[firebase]
#apiKey = "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY"
#authDomain = "blowfish-21fff.firebaseapp.com"
#projectId = "blowfish-21fff"
#storageBucket = "blowfish-21fff.appspot.com"
#messagingSenderId = "60108104191"
#appId = "1:60108104191:web:039842ebe1370698b487ca"
#measurementId = "G-PEDMYR1V0K"
apiKey = "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY"
authDomain = "blowfish-21fff.firebaseapp.com"
projectId = "blowfish-21fff"
storageBucket = "blowfish-21fff.appspot.com"
messagingSenderId = "60108104191"
appId = "1:60108104191:web:039842ebe1370698b487ca"
measurementId = "G-PEDMYR1V0K"
[fathomAnalytics]
# site = "ABC12345"
@@ -258,6 +258,7 @@ Many of the article defaults here can be overridden on a per article basis by sp
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "bluesky", "email", "facebook", "line", "linkedin", "mastodon", "pinterest", "reddit", "telegram", "twitter", and "whatsapp" |
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
| `article.externalLinkForceNewTab` | `true` | Flag per aprire i link esterni nel markdown in una nuova scheda. |
### List
@@ -258,6 +258,7 @@ Blowfish は、テーマの機能を制御する多数の設定パラメータ
| `article.showComments` | `false` | 記事のフッターの後に [コメントパーシャル]({{< ref "partials#コメント" >}}) を含めるかどうかです。 |
| `article.sharingLinks` | _未設定_ | 各記事の最後に表示する共有リンクです。指定されていないか、`false` に設定されている場合、リンクは表示されません。使用可能な値は、"bluesky"、"email"、"facebook"、"line"、"linkedin"、"mastodon"、"pinterest"、"reddit"、"telegram"、"twitter"、"whatsapp"です。 |
| `article.showZenMode` | `false` | 記事のZenモードリーダー機能を有効にするフラグです。 |
| `article.externalLinkForceNewTab` | `true` | マークダウン内の外部リンクを新しいタブで開くかどうかです。 |
### リスト(List)
@@ -266,6 +266,7 @@ Many of the article defaults here can be overridden on a per article basis by sp
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "bluesky", "email", "facebook", "line", "linkedin", "mastodon", "pinterest", "reddit", "telegram", "twitter", and "whatsapp" |
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
| `article.externalLinkForceNewTab` | `true` | Should external links in markdown open in a new tab. |
### List
@@ -9,7 +9,7 @@ series: ["部署教程"]
series_order: 4
---
Blowfish 适宜个高度定制化的主题,使用到了一些 Hugo 中最新的特性来简化配置方式。
Blowfish 是一个高度定制化的主题,使用到了一些 Hugo 中最新的特性来简化配置方式。
主题附带了默认配置,可以让你快速启动一个基本的博客或静态网站。
@@ -262,6 +262,7 @@ Blowfish 提供了大量控制主题功能的配置参数,下面的表格中
| `article.showComments` | `false` | 是否在文章末尾添加 [评论部分]({{< ref "partials#comments" >}})。 |
| `article.sharingLinks` | __ | 在文章末尾显示的分享链接。如果没有提供或设置为 `false`,则不会显示任何分享链接。可用的值包括:"bluesky"、"email"、"facebook"、"line"、"linkedin"、"mastodon"、"pinterest"、"reddit"、"telegram"、"twitter"和"whatsapp" |
| `article.showZenMode` | `false` | 指定是否激活文章阅读的禅模式,即隐藏常规的界面元素。 |
| `article.externalLinkForceNewTab` | `true` | 是否强制 Markdown 中的外部链接在新标签页中打开。 |
### 列表页
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Firestore einrichten - Wählen Sie Build und öffnen Sie Firestore. Erstellen Sie eine neue Datenbank und wählen Sie den Start im Produktionsmodus. Wählen Sie den Serverstandort und warten Sie. Sobald dies gestartet ist, müssen Sie die Regeln konfigurieren. Kopieren Sie einfach die Datei unten und drücken Sie Veröffentlichen.
5. Firestore einrichten - Wählen Sie Build und öffnen Sie Firestore. Erstellen Sie eine neue Datenbank und wählen Sie den Start im Produktionsmodus. Wählen Sie den Serverstandort und warten Sie. Sobald dies gestartet ist, müssen Sie die Regeln konfigurieren. Kopieren Sie einfach die Datei unten und drücken Sie Veröffentlichen. Diese Regeln stellen sicher, dass Aufrufe nur um 1 erhöht werden können und Likes nur um +1 oder -1 geändert werden können (und nie unter 0 fallen).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Configurar Firestore - Selecciona Build y abre Firestore. Crea una nueva base de datos y elige iniciar en modo producción. Selecciona la ubicación del servidor y espera. Una vez iniciado, necesitas configurar las reglas. Simplemente copia y pega el archivo de abajo y presiona publicar.
5. Configurar Firestore - Selecciona Build y abre Firestore. Crea una nueva base de datos y elige iniciar en modo producción. Selecciona la ubicación del servidor y espera. Una vez iniciado, necesitas configurar las reglas. Simplemente copia y pega el archivo de abajo y presiona publicar. Estas reglas aseguran que las vistas solo pueden incrementarse en 1, y los likes solo pueden cambiarse en +1 o -1 (y nunca bajar de 0).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Configurer Firestore - Sélectionnez Build et ouvrez Firestore. Créez une nouvelle base de données et choisissez de démarrer en mode production. Sélectionnez l'emplacement du serveur et attendez. Une fois démarré, vous devez configurer les règles. Copiez et collez simplement le fichier ci-dessous et appuyez sur publier.
5. Configurer Firestore - Sélectionnez Build et ouvrez Firestore. Créez une nouvelle base de données et choisissez de démarrer en mode production. Sélectionnez l'emplacement du serveur et attendez. Une fois démarré, vous devez configurer les règles. Copiez et collez simplement le fichier ci-dessous et appuyez sur publier. Ces règles garantissent que les vues ne peuvent être incrémentées que de 1, et les likes ne peuvent être modifiés que de +1 ou -1 (et ne jamais descendre en dessous de 0).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish. These rules ensure that views can only be incremented by 1, and likes can only be changed by +1 or -1 (and never go below 0).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Firestore を設定する - 「ビルド」を選択して Firestore を開きます。新しいデータベースを作成し、本番モードで開始することを選択します。サーバーの場所を選択して待ちます。開始したら、ルールを設定する必要があります。以下のファイルをコピーして貼り付け、「公開」をクリックします。
5. Firestore を設定する - 「ビルド」を選択して Firestore を開きます。新しいデータベースを作成し、本番モードで開始することを選択します。サーバーの場所を選択して待ちます。開始したら、ルールを設定する必要があります。以下のファイルをコピーして貼り付け、「公開」をクリックします。これらのルールは、閲覧数は1ずつのみ増加でき、いいねは+1または-1のみ変更可能(0未満にはならない)であることを保証します。
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish. These rules ensure that views can only be incremented by 1, and likes can only be changed by +1 or -1 (and never go below 0).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Configurar Firestore - Selecione Build e abra Firestore. Crie um novo banco de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Uma vez iniciado, você precisa configurar as regras. Basta copiar e colar o arquivo abaixo e pressionar publicar.
5. Configurar Firestore - Selecione Build e abra Firestore. Crie um novo banco de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Uma vez iniciado, você precisa configurar as regras. Basta copiar e colar o arquivo abaixo e pressionar publicar. Essas regras garantem que as visualizações só podem ser incrementadas em 1, e as curtidas só podem ser alteradas em +1 ou -1 (e nunca abaixo de 0).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Configurar Firestore - Selecione Build e abra Firestore. Crie uma nova base de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Assim que estiver iniciado, precisa de configurar as regras. Basta copiar e colar o ficheiro abaixo e premir publicar.
5. Configurar Firestore - Selecione Build e abra Firestore. Crie uma nova base de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Assim que estiver iniciado, precisa de configurar as regras. Basta copiar e colar o ficheiro abaixo e premir publicar. Estas regras garantem que as visualizações só podem ser incrementadas em 1, e os gostos só podem ser alterados em +1 ou -1 (e nunca abaixo de 0).
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. 设置 Firestore - 选择 Build 并打开 Firestore. 创建一个数据库,并在生产环境中启动。选择服务器位置然后等待其部署完成。启动之后你需要配置规则。只需要复制并粘贴下面的内容,然后点击发布即可。
5. 设置 Firestore - 选择 Build 并打开 Firestore. 创建一个数据库,并在生产环境中启动。选择服务器位置然后等待其部署完成。启动之后你需要配置规则。只需要复制并粘贴下面的内容,然后点击发布即可。这些规则确保阅读量只能增加1,点赞量只能增加或减少1(且不会低于0)。
```txt
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Views - read anyone, only increment by 1
match /views/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['views'])
&& request.resource.data.views == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
&& request.resource.data.views == resource.data.views + 1;
}
// Likes - read anyone, only +1 or -1
match /likes/{document} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.keys().hasOnly(['likes'])
&& request.resource.data.likes == 1;
allow update: if request.auth != null
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
&& (request.resource.data.likes == resource.data.likes + 1
|| request.resource.data.likes == resource.data.likes - 1)
&& request.resource.data.likes >= 0;
}
// Deny everything else
match /{document=**} {
allow read, write: if request.auth != null;
allow read, write: if false;
}
}
}
@@ -57,4 +57,5 @@ Die Standardwerte der Front-Matter-Parameter werden von der [Basiskonfiguration]
| `excludeFromSearch` | `false` | Ob dieser Artikel von der Sitemap und dem Suchindex ausgeschlossen werden soll. Wenn `true`, erscheint die Seite nicht in `sitemap.xml` oder `index.json`. |
| `layoutBackgroundBlur` | `true` | Lässt das Hintergrundbild im background heroStyle beim Scrollen verschwimmen |
| `layoutBackgroundHeaderSpace` | `true` | Fügt Abstand zwischen Header und Body hinzu. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Sollen externe Links im Markdown in einem neuen Tab geöffnet werden? |
<!-- prettier-ignore-end -->
@@ -57,4 +57,5 @@ Los valores predeterminados de los parámetros de front matter se heredan de la
| `excludeFromSearch` | `false` | Si este artículo debe excluirse del sitemap y el índice de búsqueda. Cuando es `true`, la página no aparecerá en `sitemap.xml` ni `index.json`. |
| `layoutBackgroundBlur` | `true` | Hace que la imagen de fondo en el heroStyle background se difumine con el desplazamiento |
| `layoutBackgroundHeaderSpace` | `true` | Añade espacio entre el encabezado y el cuerpo. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | ¿Deben los enlaces externos en markdown abrirse en una nueva pestaña? |
<!-- prettier-ignore-end -->
@@ -57,4 +57,5 @@ Les valeurs par défaut des paramètres front matter sont héritées de la [conf
| `excludeFromSearch` | `false` | Si cet article doit être exclu du sitemap et de l'index de recherche. Lorsque `true`, la page n'apparaîtra pas dans `sitemap.xml` ou `index.json`. |
| `layoutBackgroundBlur` | `true` | Fait flouter l'image d'arrière-plan dans le heroStyle background avec le défilement |
| `layoutBackgroundHeaderSpace` | `true` | Ajoute de l'espace entre l'en-tête et le corps. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Les liens externes dans le markdown doivent-ils s'ouvrir dans un nouvel onglet? |
<!-- prettier-ignore-end -->
@@ -55,4 +55,5 @@ I valori predefiniti dei parametri del front metter vengono ereditati dalla [con
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | Se questo articolo è incluso o meno nel file `/sitemap.xml` generato. |
| `layoutBackgroundBlur` | `true` | Rende l'immagine di sfondo sullo sfondo heroStyle sfocata con lo scorrimento. |
| `layoutBackgroundHeaderSpace` | `true` | Aggiungi spazio tra l'intestazione e il body. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Flag per aprire i link esterni nel markdown in una nuova scheda. |
<!-- prettier-ignore-end -->
@@ -56,4 +56,5 @@ series_order: 7
| `xml` | `sitemap.excludedKinds` によって除外されない限り `true` | この記事が生成された `/sitemap.xml` ファイルに含まれるかどうか。 |
| `layoutBackgroundBlur` | `true` | background heroStyle の背景画像をスクロールでぼかします |
| `layoutBackgroundHeaderSpace` | `true` | ヘッダーと本文の間にスペースを追加します |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | マークダウン内の外部リンクを新しいタブで開くかどうかです。 |
<!-- prettier-ignore-end -->
@@ -57,4 +57,5 @@ Front matter parameter default values are inherited from the theme's [base confi
| `excludeFromSearch` | `false` | Whether or not this article should be excluded from the sitemap and search index. When `true`, the page will not appear in `sitemap.xml` or `index.json`. |
| `layoutBackgroundBlur` | `true` | Makes the background image in the background heroStyle blur with the scroll |
| `layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Should external links in markdown open in a new tab. |
<!-- prettier-ignore-end -->
@@ -57,4 +57,5 @@ Os valores padrão dos parâmetros de front matter são herdados da [configuraç
| `excludeFromSearch` | `false` | Se este artigo deve ser excluído do sitemap e índice de pesquisa. Quando `true`, a página não aparecerá em `sitemap.xml` ou `index.json`. |
| `layoutBackgroundBlur` | `true` | Faz a imagem de fundo no heroStyle background desfocar com a rolagem |
| `layoutBackgroundHeaderSpace` | `true` | Adiciona espaço entre o cabeçalho e o corpo. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Links externos no markdown devem abrir em uma nova aba? |
<!-- prettier-ignore-end -->
@@ -57,4 +57,5 @@ Os valores predefinidos dos parâmetros de front matter são herdados da [config
| `excludeFromSearch` | `false` | Se este artigo deve ser excluído do sitemap e índice de pesquisa. Quando `true`, a página não aparecerá em `sitemap.xml` ou `index.json`. |
| `layoutBackgroundBlur` | `true` | Faz a imagem de fundo no heroStyle background desfocar com a rolagem |
| `layoutBackgroundHeaderSpace` | `true` | Adiciona espaço entre o cabeçalho e o corpo. |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Links externos no markdown devem abrir em uma nova aba? |
<!-- prettier-ignore-end -->
@@ -56,4 +56,5 @@ front matter 参数中的默认值是从[基础配置]({{< ref "configuration" >
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | 是否将这篇文章包含在生成的 `/sitemap.xml` 文件中。 |
| `layoutBackgroundBlur` | `true` | 向下滚动主页时,是否模糊背景图。 |
| `layoutBackgroundHeaderSpace` | `true` | 在标题和正文之间添加空白区域间隔。 |
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | 是否强制 Markdown 中的外部链接在新标签页中打开。 |
<!-- prettier-ignore-end -->
+215 -1
View File
@@ -96,6 +96,93 @@ The alert sign (`+` or `-`) is optional to control whether the admonition is fol
> [!INFO]- Customize admonition
> See the [admonition customization guide](https://github.com/nunocoracao/blowfish/blob/main/layouts/_default/_markup/render-blockquote.html).
## Accordion
`accordion` creates a collapsible set of panels. Use the `accordionItem` sub-shortcode to define each item. You can control whether multiple items can be open at the same time using the `mode` parameter.
<!-- prettier-ignore-start -->
| Parameter | Description |
| --------- | ------------------------------------------------------------------------------------------------- |
| `mode` | **Optional.** `collapse` (single open) or `open` (multiple open). Defaults to `collapse`. |
| `separated` | **Optional.** `true` to show each item as a separate card. Defaults to `false` (joined list). |
<!-- prettier-ignore-end -->
`accordionItem` parameters:
<!-- prettier-ignore-start -->
| Parameter | Description |
| --------- | --------------------------------------------------------------------------------------------------- |
| `title` | **Required.** Title shown in the item header. |
| `open` | **Optional.** Set to `true` to have the item open by default. |
| `header` | **Optional.** Alias for `title`, kept for compatibility with other shortcodes. |
| `icon` | **Optional.** Icon name to display before the title. |
<!-- prettier-ignore-end -->
**Example 1: `mode="open"` (multiple items can be open) + `separated=true`**
```md
{{</* accordion mode="open" separated=true */>}}
{{</* accordionItem title="Markdown example" icon="code" open=true */>}}
This item demonstrates Markdown rendering:
- **Bold text**
- Lists
- `inline code`
{{</* /accordionItem */>}}
{{</* accordionItem title="Shortcode example" md=false */>}}
This item demonstrates shortcode rendering with <code>md=false</code>:
{{</* alert */>}}This is an inline alert.{{</* /alert */>}}
{{</* /accordionItem */>}}
{{</* /accordion */>}}
```
{{< accordion mode="open" separated=true >}}
{{< accordionItem title="Markdown example" icon="code" open=true >}}
This item demonstrates Markdown rendering:
- **Bold text**
- Lists
- `inline code`
{{< /accordionItem >}}
{{< accordionItem title="Shortcode example" md=false >}}
This item demonstrates shortcode rendering with <code>md=false</code>:
{{< alert >}}This is an inline alert.{{< /alert >}}
{{< /accordionItem >}}
{{< /accordion >}}
**Example 2: `mode="collapse"` (only one item open at a time)**
```md
{{</* accordion mode="collapse" */>}}
{{</* accordionItem title="First item" open=true */>}}
This item uses Markdown with a short list:
1. One
2. Two
3. Three
{{</* /accordionItem */>}}
{{</* accordionItem title="Second item" md=false */>}}
This item includes another shortcode:
{{</* badge */>}}Tip{{</* /badge */>}}
{{</* /accordionItem */>}}
{{</* /accordion */>}}
```
{{< accordion mode="collapse" >}}
{{< accordionItem title="First item" open=true >}}
This item uses Markdown with a short list:
1. One
2. Two
3. Three
{{< /accordionItem >}}
{{< accordionItem title="Second item" md=false >}}
This item includes another shortcode:
{{< badge >}}Tip{{< /badge >}}
{{< /accordionItem >}}
{{< /accordion >}}
<br/><br/><br/>
@@ -165,10 +252,13 @@ Call to action
| Parameter | Description |
| --- | --- |
| `images` | **Required.** A regex string to match image names or URLs. |
| `captions` | **Optional.** A list of `key:caption` pairs. Keys can be image filenames (for local images) or full URLs (for remote images). Captions support Markdown. |
| `aspectRatio` | **Optional.** The aspect ratio for the carousel. It is set to `16-9` by default. |
| `interval` | **Optional.** The interval for the auto-scrooling, specified in milliseconds. Defaults to `2000` (2s) |
<!-- prettier-ignore-end -->
Captions are matched by key. For local images, use the filename (e.g. `01.jpg`). For remote images, use the full URL.
**Example 1:** 16:9 aspect ratio and verbose list of images
```md
@@ -185,6 +275,14 @@ Call to action
{{< carousel images="gallery/*" aspectRatio="21-9" interval="2500" >}}
**Example 3:** Add captions
```md
{{</* carousel images="gallery/*" captions="{01.jpg:First image with *formatting*,02.jpg:Second image with a [link](https://example.com)}" */>}}
```
{{< carousel images="gallery/*" captions="{01.jpg:First image with *formatting*,02.jpg:Second image with a [link](https://example.com)}" >}}
<br/><br/><br/>
## Chart
@@ -292,6 +390,7 @@ The `figure` shortcode accepts six parameters:
| `alt` | [Alternative text description](https://moz.com/learn/seo/alt-text) for the image. |
| `caption` | Markdown for the image caption, which will be displayed below the image. |
| `class` | Additional CSS classes to apply to the image. |
| `figureClass` | Additional CSS classes to apply to the `<figure>` wrapper. Useful for galleries. |
| `href` | URL that the image should be linked to. |
| `target` | The target attribute for the `href` URL. |
| `nozoom` | `nozoom=true` disables the image "zoom" functionality. This is most useful in combination with a `href` link. |
@@ -349,6 +448,8 @@ Blowfish also supports automatic conversion of images included using standard Ma
In order to add images to the gallery, use `img` tags for each image and add `class="grid-wXX"` in order for the gallery to be able to identify the column width for each image. The widths available by default start at 10% and go all the way to 100% in 5% increments. For example, to set the width to 65%, set the class to `grid-w65`. Additionally, widths for 33% and 66% are also available in order to build galleries with 3 cols. You can also leverage tailwind's responsive indicators to have a reponsive grid.
If you need captions, you can use the `figure` shortcode inside the gallery. When doing so, set the grid width on the `figure` using `figureClass`, and use `caption` for the text.
**Example 1: normal gallery**
```md
@@ -401,6 +502,24 @@ In order to add images to the gallery, use `img` tags for each image and add `cl
<br/><br/><br/>
**Example 3: gallery with captions (using `figure`)**
```md
{{</* gallery */>}}
{{</* figure src="gallery/01.jpg" alt="Gallery image 1" caption="First caption" figureClass="grid-w33" */>}}
{{</* figure src="gallery/02.jpg" alt="Gallery image 2" caption="Second caption" figureClass="grid-w33" */>}}
{{</* figure src="gallery/03.jpg" alt="Gallery image 3" caption="Third caption" figureClass="grid-w33" */>}}
{{</* /gallery */>}}
```
{{< gallery >}}
{{< figure src="gallery/01.jpg" alt="Gallery image 1" caption="First caption" figureClass="grid-w33" >}}
{{< figure src="gallery/02.jpg" alt="Gallery image 2" caption="Second caption" figureClass="grid-w33" >}}
{{< figure src="gallery/03.jpg" alt="Gallery image 3" caption="Third caption" figureClass="grid-w33" >}}
{{< /gallery >}}
<br/><br/><br/>
## Gist
`gist` shortcode allows you to embed a GitHub Gist directly into your content by specifying the Gist user, ID, and optionally a specific file.
@@ -753,7 +872,14 @@ You can see some additional Mermaid examples on the [diagrams and flowcharts sam
The `tabs` shortcode is commonly used to present different variants of a particular step. For example, it can be used to show how to install VS Code on different platforms.
**Example**
| Parameter | Description |
| --------- | -------------------------------------------------------- |
| `group` | **Optional.** Group name for synchronized tab switching. All tabs with the same group name will switch together. |
| `default` | **Optional.** Label of the tab to be active by default. If not set, the first tab will be active. |
| `label` | **Required.** The text label displayed on the tab button. |
| `icon` | **Optional.** Icon name to display before the label. |
**Example 1: Basic Usage**
`````md
{{</* tabs */>}}
@@ -815,6 +941,94 @@ The `tabs` shortcode is commonly used to present different variants of a particu
{{< /tabs >}}
**Example 2: With Group, Default, and Icon**
`````md
{{</* tabs group="lang" default="Python" */>}}
{{</* tab label="JavaScript" icon="code" */>}}
```javascript
console.log("Hello");
```
{{</* /tab */>}}
{{</* tab label="Python" icon="sun" */>}}
```python
print("Hello")
```
{{</* /tab */>}}
{{</* tab label="Go" icon="moon" */>}}
```go
fmt.Println("Hello")
```
{{</* /tab */>}}
{{</* /tabs */>}}
{{</* tabs group="lang" default="Python" */>}}
{{</* tab label="JavaScript" icon="code" */>}}
```javascript
const add = (a, b) => a + b;
```
{{</* /tab */>}}
{{</* tab label="Python" icon="sun" */>}}
```python
def add(a, b): return a + b
```
{{</* /tab */>}}
{{</* tab label="Go" icon="moon" */>}}
```go
func add(a, b int) int { return a + b }
```
{{</* /tab */>}}
{{</* /tabs */>}}
`````
**Output**
{{< tabs group="lang" default="Python" >}}
{{< tab label="JavaScript" icon="code" >}}
```javascript
console.log("Hello");
```
{{< /tab >}}
{{< tab label="Python" icon="sun" >}}
```python
print("Hello")
```
{{< /tab >}}
{{< tab label="Go" icon="moon" >}}
```go
fmt.Println("Hello")
```
{{< /tab >}}
{{< /tabs >}}
{{< tabs group="lang" default="Python" >}}
{{< tab label="JavaScript" icon="code" >}}
```javascript
const add = (a, b) => a + b;
```
{{< /tab >}}
{{< tab label="Python" icon="sun" >}}
```python
def add(a, b): return a + b
```
{{< /tab >}}
{{< tab label="Go" icon="moon" >}}
```go
func add(a, b int) int { return a + b }
```
{{< /tab >}}
{{< /tabs >}}
In this example, both tab groups share the same `group="lang"` parameter, so clicking any tab will synchronize both groups. The `default="Python"` parameter makes Python the initially active tab, and `icon="code"` adds an icon before each label.
<br/><br/><br/>
## Timeline
@@ -11,7 +11,7 @@ series_order: 8
除了所有[默认 Hugo 简码](https://gohugo.io/content-management/shortcodes/) 之外,Blowfish 还添加了一些额外的功能。
## Alert
## 醒目框
`alert` 可以将其中内容输出为文章中的风格化消息框。它对于吸引读者注意您不想让读者错过的重要信息很有用。
@@ -64,7 +64,7 @@ This is an error!
<br/><br/><br/>
## Admonition
## 提示框
Admonition 用于在内容中插入醒目提示。
@@ -99,7 +99,7 @@ Admonition 的用途与 alert shortcode 类似,但其实现方式是通过 Hug
<br/><br/><br/>
## Article
## 文章嵌入
`Article` 将把一篇文章嵌入到一个 markdown 文件中。 参数中的 `link`应该是要嵌入的文件的 `.RelPermalink`。请注意,如果简码引用其父级文件,则它不会显示任何内容。 *注意:如果您在 Blowfish(即 /blowfish/)等子文件夹中运行网站,请在链接中包含该路径。*
@@ -121,7 +121,7 @@ Admonition 的用途与 alert shortcode 类似,但其实现方式是通过 Hug
<br/><br/><br/>
## Badge
## 徽章
`badge` 输出一个美观的徽章组件,该组件对于显示元数据很有用。
@@ -139,7 +139,7 @@ New article!
<br/><br/><br/>
## Button
## 按钮
`button` 输出一个样式化的按钮组件,可用于突出显示主要操作。它有三个可选变量 `href``target``rel`,可用于指定链接的 URL、目标和关系。
@@ -157,7 +157,7 @@ Call to action
<br/><br/><br/>
## Carousel
## 滑动画册
`carousel` 用于生成可交互且具有视觉吸引力的方式展示多个图像的画廊。这允许用户滑动浏览多个图像,同时仅占用单个图像的垂直空间。 所有图像均使用父组件的完整宽度并使用预定义的宽高比 `16:9``21:9``32:9` 之一显示。
@@ -187,7 +187,7 @@ Call to action
<br/><br/><br/>
## Chart
## 图表
`chart` 使用 Chart.js 库将图表嵌入到使用简单结构化数据的文章中。它支持多种[不同的图表样式](https://www.chartjs.org/docs/latest/samples/),并且所有内容都可以在简码中进行配置。只需在简码中提供图表参数,Chart.js 将完成剩下的工作。
@@ -225,7 +225,7 @@ data: {
<br/><br/><br/>
## Code Importer
## 导入源码
此短代码用于轻松从外部源导入代码,无需复制和粘贴
@@ -306,7 +306,7 @@ Blowfish 还支持使用标准 Markdown 语法自动转换图像。只需使用
![Alt text](image.jpg "Image caption")
```
## Forgejo Card
## Forgejo 卡片
`forgejo` allows you to quickly link a Forgejo repository via the forgejo API, providing real-time updates on stats such as stars and forks.
@@ -345,7 +345,7 @@ Blowfish 还支持使用标准 Markdown 语法自动转换图像。只需使用
<br/><br/><br/>
## Gallery
## 排布画册
`gallery` 允许您以响应式一次展示多个图像,并具有更加多样化和有趣的布局的图库。
@@ -612,7 +612,7 @@ Blowfish 还支持使用标准 Markdown 语法自动转换图像。只需使用
<br/><br/><br/>
## Lead
## 开篇语
`lead` 用于强调文章的开头。它可以用来设计介绍的样式,或者指出一条重要的信息。只需将任何 Markdown 内容包装在 `lead` 简码中即可。
@@ -763,7 +763,14 @@ B-->C[Profit]
`tabs` 简码常用于呈现某个步骤的不同变体。例如,可用于展示在不同平台上安装 VS Code 的方式。
**示例**
| 参数 | 描述 |
| --------- | --------------------------------------- |
| `group` | **可选。** 用于同步切换标签页的组名。具有相同组名的所有标签页将一起切换。 |
| `default` | **可选。** 默认激活的标签页的标签。如果未设置,默认激活第一个标签页。 |
| `label` | **必填。** 显示在标签按钮上的文本标签。 |
| `icon` | **可选。** 在标签前显示的图标名称。 |
**示例 1:基本用法**
````md
{{</* tabs */>}}
@@ -825,6 +832,94 @@ B-->C[Profit]
{{< /tabs >}}
**示例 2:使用 Group、Default 和 Icon**
`````md
{{</* tabs group="lang" default="Python" */>}}
{{</* tab label="JavaScript" icon="code" */>}}
```javascript
console.log("Hello");
```
{{</* /tab */>}}
{{</* tab label="Python" icon="sun" */>}}
```python
print("Hello")
```
{{</* /tab */>}}
{{</* tab label="Go" icon="moon" */>}}
```go
fmt.Println("Hello")
```
{{</* /tab */>}}
{{</* /tabs */>}}
{{</* tabs group="lang" default="Python" */>}}
{{</* tab label="JavaScript" icon="code" */>}}
```javascript
const add = (a, b) => a + b;
```
{{</* /tab */>}}
{{</* tab label="Python" icon="sun" */>}}
```python
def add(a, b): return a + b
```
{{</* /tab */>}}
{{</* tab label="Go" icon="moon" */>}}
```go
func add(a, b int) int { return a + b }
```
{{</* /tab */>}}
{{</* /tabs */>}}
`````
**Output**
{{< tabs group="lang" default="Python" >}}
{{< tab label="JavaScript" icon="code" >}}
```javascript
console.log("Hello");
```
{{< /tab >}}
{{< tab label="Python" icon="sun" >}}
```python
print("Hello")
```
{{< /tab >}}
{{< tab label="Go" icon="moon" >}}
```go
fmt.Println("Hello")
```
{{< /tab >}}
{{< /tabs >}}
{{< tabs group="lang" default="Python" >}}
{{< tab label="JavaScript" icon="code" >}}
```javascript
const add = (a, b) => a + b;
```
{{< /tab >}}
{{< tab label="Python" icon="sun" >}}
```python
def add(a, b): return a + b
```
{{< /tab >}}
{{< tab label="Go" icon="moon" >}}
```go
func add(a, b int) int { return a + b }
```
{{< /tab >}}
{{< /tabs >}}
在这个示例中,两个标签组都使用了相同的 `group="lang"` 参数,因此点击任意一个标签时,两个标签组都会同步切换。`default="Python"` 参数用于指定 Python 为初始激活的标签,而 `icon="code"` 会在每个标签标题前添加一个图标。
<br/><br/><br/>
## 时间线
+1 -113
View File
@@ -15,116 +15,4 @@ Zusätzlich werden benutzerdefinierte Icons vollständig unterstützt. Stellen S
Die vollständige Liste der integrierten Icons und ihre entsprechenden Namen finden Sie unten.
| Icon-Name | Vorschau |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
+1 -113
View File
@@ -15,116 +15,4 @@ Además, los iconos personalizados también son totalmente compatibles. Simpleme
La lista completa de iconos integrados y sus nombres correspondientes se puede consultar a continuación.
| Nombre del icono | Vista previa |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
+1 -113
View File
@@ -15,116 +15,4 @@ De plus, les icônes personnalisées sont entièrement prises en charge. Fournis
La liste complète des icônes intégrées et leurs noms correspondants est référencée ci-dessous.
| Nom de l'icône | Aperçu |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
+1 -113
View File
@@ -15,116 +15,4 @@ Additionally, custom icons are also fully supported. Simply provide your own SVG
The full list of built-in icons and their corresponding names can referenced below.
| Icon name | Preview |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
+1 -113
View File
@@ -15,116 +15,4 @@ Blowfish はいくつもの [FontAwesome 6](https://fontawesome.com/icons) の
組み込んでいるアイコンと対応する名称の全リストは以下を参照してください。
| アイコン名 | プレビュー |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
+1 -113
View File
@@ -15,116 +15,4 @@ Additionally, custom icons are also fully supported. Simply provide your own SVG
The full list of built-in icons and their corresponding names can referenced below.
| Icon name | Preview |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
@@ -15,116 +15,4 @@ Além disso, ícones personalizados também são totalmente suportados. Simplesm
A lista completa de ícones integrados e seus nomes correspondentes pode ser consultada abaixo.
| Nome do ícone | Visualização |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
@@ -15,116 +15,4 @@ Além disso, os ícones personalizados também são totalmente suportados. Simpl
A lista completa de ícones integrados e os seus nomes correspondentes pode ser consultada abaixo.
| Nome do ícone | Pré-visualização |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
@@ -15,116 +15,4 @@ Blowfish 内置了许多 [FontAwesome 6](https://fontawesome.com/icons) 中的
下面是所有的内置图标及其名称。
| 图标名称 | 预览 |
| -------------------- | --------------------------------- |
| amazon | {{< icon amazon >}} |
| apple | {{< icon apple >}} |
| bars | {{< icon bars >}} |
| bell | {{< icon bell >}} |
| blogger | {{< icon blogger >}} |
| bluesky | {{< icon bluesky >}} |
| bomb | {{< icon bomb >}} |
| bug | {{< icon bug >}} |
| check | {{< icon check >}} |
| circle-info | {{< icon circle-info >}} |
| cloud | {{< icon cloud >}} |
| cloud-moon | {{< icon cloud-moon >}} |
| code | {{< icon code>}} |
| codeberg | {{< icon codeberg >}} |
| codepen | {{< icon codepen >}} |
| comment | {{< icon comment >}} |
| dev | {{< icon dev >}} |
| discourse | {{< icon discourse >}} |
| docker | {{< icon docker >}} |
| download | {{< icon download >}} |
| dribbble | {{< icon dribbble >}} |
| edit | {{< icon edit >}} |
| email | {{< icon email >}} |
| envelope | {{< icon envelope >}} |
| expand | {{< icon expand >}} |
| eye | {{< icon eye >}} |
| facebook | {{< icon facebook >}} |
| fediverse | {{< icon fediverse >}} |
| fire | {{< icon fire >}} |
| flickr | {{< icon flickr >}} |
| fork | {{< icon fork >}} |
| foursquare | {{< icon foursquare >}} |
| ghost | {{< icon ghost >}} |
| github | {{< icon github >}} |
| gitlab | {{< icon gitlab >}} |
| globe | {{< icon globe >}} |
| goodreads | {{< icon goodreads >}} |
| google | {{< icon google >}} |
| google-scholar | {{< icon google-scholar >}} |
| graduation-cap | {{< icon graduation-cap >}} |
| hackernews | {{< icon hackernews >}} |
| hashnode | {{< icon hashnode >}} |
| heart-empty | {{< icon heart-empty >}} |
| heart | {{< icon heart >}} |
| image | {{< icon image >}} |
| instagram | {{< icon instagram >}} |
| itch-io | {{< icon itch-io >}} |
| keybase | {{< icon keybase >}} |
| keyoxide | {{< icon keyoxide >}} |
| kickstarter | {{< icon kickstarter >}} |
| ko-fi | {{< icon ko-fi >}} |
| language | {{< icon language >}} |
| lastfm | {{< icon lastfm >}} |
| lightbulb | {{< icon lightbulb >}} |
| line | {{< icon line >}} |
| link | {{< icon link >}} |
| linkedin | {{< icon linkedin >}} |
| list | {{< icon list >}} |
| location-dot | {{< icon location-dot >}} |
| lock | {{< icon lock >}} |
| mastodon | {{< icon mastodon >}} |
| matrix | {{< icon matrix >}} |
| medium | {{< icon medium >}} |
| microsoft | {{< icon microsoft >}} |
| moon | {{< icon moon >}} |
| mug-hot | {{< icon mug-hot >}} |
| music | {{< icon music >}} |
| orcid | {{< icon orcid >}} |
| patreon | {{< icon patreon >}} |
| paypal | {{< icon paypal >}} |
| peertube | {{< icon peertube >}} |
| pencil | {{< icon pencil >}} |
| pgpkey | {{< icon pgpkey >}} |
| phone | {{< icon phone >}} |
| pinterest | {{< icon pinterest >}} |
| pixelfed | {{< icon pixelfed >}} |
| poo | {{< icon poo >}} |
| reddit | {{< icon reddit >}} |
| researchgate | {{< icon researchgate >}} |
| rss | {{< icon rss >}} |
| rss-square | {{< icon rss-square >}} |
| scale-balanced | {{< icon scale-balanced >}} |
| search | {{< icon search >}} |
| shield | {{< icon shield >}} |
| signal | {{< icon signal >}} |
| skull-crossbones | {{< icon skull-crossbones >}} |
| slack | {{< icon slack >}} |
| snapchat | {{< icon snapchat >}} |
| soundcloud | {{< icon soundcloud >}} |
| spotify | {{< icon spotify >}} |
| stack-overflow | {{< icon stack-overflow >}} |
| star | {{< icon star >}} |
| steam | {{< icon steam >}} |
| stripe | {{< icon stripe >}} |
| substack | {{< icon substack >}} |
| sun | {{< icon sun >}} |
| tag | {{< icon tag >}} |
| telegram | {{< icon telegram >}} |
| threads | {{< icon threads >}} |
| tiktok | {{< icon tiktok >}} |
| triangle-exclamation | {{< icon triangle-exclamation >}} |
| tumblr | {{< icon tumblr >}} |
| twitch | {{< icon twitch >}} |
| twitter | {{< icon twitter >}} |
| wand-magic-sparkles | {{< icon wand-magic-sparkles >}} |
| whatsapp | {{< icon whatsapp >}} |
| worktree | {{< icon worktree >}} |
| x-twitter | {{< icon x-twitter >}} |
| xing | {{< icon xing >}} |
| xmark | {{< icon xmark >}} |
| youtube | {{< icon youtube >}} |
{{< icon-ref >}}
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [Persönliche Seite, Themenautor]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [sitio personal, Autor del tema]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [Site personnel, Auteur du thème]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [Sito personale, Autore del tema]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [個人サイト, テーマ作者]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [Site pessoal, Autor do tema]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [Site pessoal, Autor do tema]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -0,0 +1,14 @@
---
title: "n9o.xyz"
tags: [个人网站, 主题作者]
externalUrl: "https://n9o.xyz"
weight: 1
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

@@ -1,13 +0,0 @@
---
title: "nveshaan"
tags: [Persönliche Seite]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "nveshaan"
tags: [Sitio Personal]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "nveshaan"
tags: [Site Personnel]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "nveshaan"
tags: [Sito personale]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "nveshaan"
tags: [個人サイト]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "nveshaan"
tags: [Personal Site]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "nveshaan"
tags: [Site Pessoal]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "nveshaan"
tags: [Site Pessoal]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "nveshaan"
tags: [个人网站]
externalUrl: "https://nveshaan.github.io/"
weight: 70
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

@@ -1,13 +0,0 @@
---
title: "DXPetti.com"
tags: [Persönliche Seite,Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "DXPetti.com"
tags: [Sitio Personal,Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "DXPetti.com"
tags: [Site Personnel,Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "DXPetti.com"
tags: [Sito personale, Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "DXPetti.com"
tags: [個人サイト, ブログ]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "DXPetti.com"
tags: [Personal site,Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "DXPetti.com"
tags: [Site Pessoal,Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "DXPetti.com"
tags: [Site Pessoal,Blog]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "DXPetti.com"
tags: [个人网站, 博客]
externalUrl: "https://www.dxpetti.com/"
weight: 55
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

@@ -1,13 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Persönliche Seite,Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Sitio Personal,Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Site Personnel,Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Sito personale, Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [個人サイト, ブログ]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Personal site,Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Site Pessoal,Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [Site Pessoal,Blog]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,14 +0,0 @@
---
title: "lazarusoverlook.com"
tags: [个人网站, 博客]
externalUrl: "https://lazarusoverlook.com"
weight: 75
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

@@ -1,13 +0,0 @@
---
title: "dizzytech.de"
tags: [Persönliche Seite]
externalUrl: "https://dizzytech.de"
weight: 17
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---
@@ -1,13 +0,0 @@
---
title: "dizzytech.de"
tags: [Sitio Personal]
externalUrl: "https://dizzytech.de"
weight: 17
showDate: false
showAuthor: false
showReadingTime: false
showEdit: false
showLikes: false
showViews: false
layoutBackgroundHeaderSpace: false
---

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