Compare commits

...

126 commits
v3.1.0 ... main

Author SHA1 Message Date
github-actions[bot]
e1860ad1a0
⬆️ chore(deps): upgrade KaTeX to v0.16.23 (#570)
Some checks failed
Build Site / Check and Build for Pull Requests (push) Has been cancelled
Build Site / Build and Deploy on Main Push (push) Has been cancelled
2025-10-04 13:14:19 +02:00
Óscar
e8dcd0528e
️ feat(a11y): add skip to content link for keyboard navigation (#552)
Some checks failed
Build Site / Check and Build for Pull Requests (push) Has been cancelled
Build Site / Build and Deploy on Main Push (push) Has been cancelled
Co-authored-by: Awiteb <a@4rs.nl>
2025-09-28 21:10:39 +02:00
welpo
13f88a8e86
feat: load extra features in section template
Some checks failed
Build Site / Check and Build for Pull Requests (push) Has been cancelled
Build Site / Build and Deploy on Main Push (push) Has been cancelled
Allows using copy code block options, KaTex, etc. in the homepage
2025-09-22 23:39:57 +02:00
github-actions[bot]
ea53c823cf
⬆️ chore(deps): upgrade mermaid to v11.12.0 (#569)
Some checks failed
Build Site / Check and Build for Pull Requests (push) Has been cancelled
Build Site / Build and Deploy on Main Push (push) Has been cancelled
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-09-20 10:31:04 +02:00
f0e804b4ff
📝 misc(README): add posixlycorrect.com to sites using tabi (#568)
Some checks failed
Build Site / Check and Build for Pull Requests (push) Has been cancelled
Build Site / Build and Deploy on Main Push (push) Has been cancelled
2025-09-17 21:48:35 +02:00
renovate[bot]
e33c1cc00d
⬆️ chore(deps): update scripts/release digest to 8e0a56e (#567)
Some checks failed
Build Site / Check and Build for Pull Requests (push) Has been cancelled
Build Site / Build and Deploy on Main Push (push) Has been cancelled
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-15 08:52:30 +02:00
redmie
83b0a5d011
feat(i18n): display lcode in language switcher (#565)
Some checks are pending
Build Site / Check and Build for Pull Requests (push) Waiting to run
Build Site / Build and Deploy on Main Push (push) Waiting to run
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-09-14 12:35:42 +02:00
github-actions[bot]
57277a0f23
⬆️ chore(deps): upgrade mermaid to v11.11.0 (#566)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-09-05 08:55:24 +02:00
github-actions[bot]
c36d868b55
⬆️ chore(deps): upgrade mermaid to v11.10.1 (#564)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-08-23 10:30:43 +02:00
github-actions[bot]
479fd96e50
⬆️ chore(deps): upgrade mermaid to v11.10.0 (#563)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-08-20 15:03:21 +02:00
Pedro Pontes García
a7a0c05100
feat: allow custom archive date format (#557)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-08-15 18:59:15 +02:00
renovate[bot]
a21edd31d5
⬆️ chore(deps): update actions/checkout action to v5 (#562)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-15 18:26:59 +02:00
mfiano
7e12f9acf3
♻️ refactor: prevent HTML escaping of joined CSP strings (#553)
Co-authored-by: kanuba <me@kanuba.me>
2025-08-10 14:25:58 +02:00
Pedro Pontes García
515fd078a5
📝 docs: fix broken custom skins link (#559) 2025-08-07 17:40:26 +02:00
Óscar
2064beae78
feat: add per-language date format configuration (#556) 2025-08-07 14:00:48 +02:00
Awiteb
3a40ae5a83
🌐 fix(i18n): iine Arabic translation (#551) 2025-08-01 22:40:15 +02:00
Óscar
daa8b1a412
feat(iine): add like buttons (#550) 2025-08-01 21:43:04 +02:00
renovate[bot]
79b5dcf9a7
⬆️ chore(deps): update shalzz/zola-deploy-action action to v0.21.0 (#544)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-20 20:56:09 +00:00
Ulrich Schreiner
0639c0c397
♻️ refactor: force a trailing slash on the nav home title (#547)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-07-20 19:06:13 +02:00
welpo
9f5f307444
📝 misc(README): clean up 'sites using tabi'
Site no longer used tabi.
2025-07-19 12:19:37 +02:00
welpo
9b7a45db53
🐛 fix(feed): conditionally render updated field
Zola 0.21.0 broke this
2025-07-19 09:45:42 +02:00
github-actions[bot]
36adac03a4
⬆️ chore(deps): upgrade mermaid to v11.9.0 (#545)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-07-18 00:22:33 +02:00
github-actions[bot]
bda9f22f79
⬆️ chore(deps): upgrade mermaid to v11.8.1 (#542)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-07-09 23:19:46 +02:00
github-actions[bot]
d241fc1fda
⬆️ chore(deps): upgrade mermaid to v11.8.0 (#541)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-07-05 10:24:31 +02:00
loraX
0f8733b91a
🍱 feat(socials): add codeberg icon (#540) 2025-07-01 21:00:03 +02:00
github-actions[bot]
0dfd434ce2
⬆️ chore(deps): upgrade mermaid to v11.7.0 (#538)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-06-21 12:02:09 +02:00
welpo
2499387693
📝 misc(projects): fix webmentions link 2025-06-16 22:43:58 +02:00
undecV
9b115904d7
feat(analytics): make Umami DNT behavior configurable (#536)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-06-16 22:42:13 +02:00
welpo
23a1baf96c
🔖 chore(release): prepare for v4.1.0 2025-06-14 09:53:41 +02:00
welpo
2e29782279
💄 style: remove extra spacing after author
Only seen when minification was set to `false`.
2025-06-08 22:42:37 +02:00
welpo
7321fc5a43
🐛 fix: render author HTML on page metadata 2025-06-08 22:17:23 +02:00
gortavoher
c325267bd1
feat: add support for webmentions (#485)
Co-authored-by: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com>
Co-authored-by: Henri Bourcereau <henri.bourcereau@gmail.com>
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-06-08 21:49:54 +02:00
bajacc
84c67ab2b2
🐛 fix: allow feed icon to be hidden (#533) 2025-06-01 19:56:50 +02:00
Cameron Taylor
979f347fb0
feat: extend tabi <head> and <body> elements (#528)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-06-01 17:12:41 +02:00
b1n
5c1e4acbb1
📝 misc(README): add b1n.io to 'sites using tabi' (#531) 2025-05-30 10:09:47 +02:00
tzinm
68c35b02f8
🐛 fix(feed): prioritise description > summary (#525) 2025-05-11 14:33:27 +02:00
Henri Bourcereau
5f28b0e87e
feat(webmentions): add hcard in post page (#524)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-05-10 16:51:35 +02:00
tzinm
c4f39d7643
feat(feed): add feed icon tag pages (#522)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-04-30 09:28:25 +02:00
rktjump
93af295d78
feat: parse markdown in post summary & description (#517)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-04-26 19:53:19 +02:00
tzinm
f47cefd42b
♻️ refactor: add "target_attribute" macro (#515)
Co-authored-by: Óscar <welpo@users.noreply.github.com>
2025-04-26 11:21:09 +02:00
Gabriel Martinez
221e245671
🍱 feat(socials): add itch.io icon (#520) 2025-04-26 11:18:36 +02:00
Olexandr88
b9b76799eb
📝 misc(README): fix broken link tag (#516) 2025-04-14 19:03:16 +02:00
github-actions[bot]
2d68b40e14
⬆️ chore(deps): upgrade KaTeX to v0.16.22 (#511)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-04-10 21:09:37 +02:00
Henri Bourcereau
3d2c3a14b8
🐛 fix: fix hcard html tags (#508) 2025-04-05 22:53:51 +02:00
Henri Bourcereau
94af15b6e8
feat(indieweb): add hidden h-card (#506)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-04-05 14:10:16 +02:00
welpo
a384ac80c8
♻️ refactor: improve error message when title is unset
Resolves #502
2025-04-05 00:06:15 +02:00
Axel Karjalainen
cc39652eb5
feat: cache bust images in shortcodes (#504) 2025-04-02 22:25:23 +02:00
Axel Karjalainen
c7bc652618
🌐 feat(i18n): add Finnish language (#505)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-04-02 22:21:39 +02:00
github-actions[bot]
a59310a6b2
⬆️ chore(deps): upgrade mermaid to v11.6.0 (#500)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-03-26 08:27:44 +01:00
Óscar
8678c477bf
💄 fix: fix external link icon breaking word wrapping (#498) 2025-03-15 10:12:11 +01:00
welpo
e11186a844
🐛 misc(CI): fix Mermaid version detection 2025-03-15 09:25:40 +01:00
github-actions[bot]
88ebde9b24
⬆️ chore(deps): upgrade mermaid to v11.5.0 (#497)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-03-15 00:22:52 +01:00
tzinm
f25dfe3429
📝 misc(README): add tzinm's blog to 'sites using tabi' (#496) 2025-03-12 20:35:09 +01:00
Clément Escolano
bf1d05e092
🐛 fix: fix padding hover on links with code (custom font) (#494) 2025-03-12 10:15:03 +01:00
welpo
1bb33439da
🔖 chore(release): prepare for v4.0.0 2025-02-16 21:28:11 +01:00
Mohammed Alotaibi
ed8e2d1888
🌐 docs(demo): basic Arabic translation (#390)
Signed-off-by: Awiteb <a@4rs.nl>
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-02-16 21:25:20 +01:00
welpo
1c067e708e
💄 fix: adapt footnotes styling for zola 0.19.x & 0.20.x
Also makes code tags slightly smaller (to match the font) in footnotes.

Zola 0.20.0 wraps footnotes in a <footer> tag, which broke existing styles.
This change makes the CSS selectors work with both old (<ol>) and new
(<footer>) HTML structures while maintaining the same visual appearance.
2025-02-16 16:25:40 +01:00
Óscar
09e724a82b
feat: add hide_from_main_feed support (#490) 2025-02-16 09:49:51 +01:00
welpo
45fe170467
🐛 fix(feed): styling now works in all website paths
The feed's stylesheet now uses the base URL from Zola's configuration,
ensuring correct stylesheet loading in all contexts (root path,
subdirectories, and subdomains).

Previously, the stylesheet URLs could break when feeds were in
subdirectories.
2025-02-16 09:28:57 +01:00
welpo
402965786b
📝 docs(series): add tip for custom text permalinks 2025-02-15 23:18:17 +01:00
welpo
2b106b7c62
💄 style(admonitions): fix external link icon
Should've been done in #443
2025-02-15 22:45:31 +01:00
Óscar
61793b2e56
feat: support Zola's native code block names (#489) 2025-02-15 22:31:55 +01:00
stalkerGH
6837f6f4f1
feat: render markdown in page titles & descriptions (#486)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-02-15 14:33:37 +01:00
Óscar
a5ab6259c6
feat: add indicator to external links (#443) 2025-02-15 09:34:54 +01:00
renovate[bot]
036b11b7da
⬆️ chore(deps): updatezola-deploy-action to v0.20.0 (#488)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-15 09:34:07 +01:00
welpo
a3ae897c83
feat: allow setting post_listing_date per section 2025-02-09 23:16:53 +01:00
Óscar
db5062fb3f
feat: render section content (#484) 2025-02-09 21:00:08 +01:00
Óscar
6ff0604beb
💥 feat(archive)!: enforce chronological sorting (#483) 2025-02-09 20:44:21 +01:00
welpo
d777d5d996
💄 style: increase emoji favicon size
Resolves #476
2025-02-08 10:17:26 +01:00
welpo
11eb774bd7
📝 misc(projects): add nemui project 2025-02-08 10:08:42 +01:00
Óscar
05d042d27a
️ fix: improve menu accessibility (#482) 2025-02-02 14:54:03 +01:00
Óscar
5b5bdda456
🐛 fix: support external URLs in menu (#481) 2025-02-02 14:25:52 +01:00
Jérôme Ramette
8fafc0f9c8
📝 misc(README): add idle-ti.me blog to sites using tabi (#479) 2025-02-01 20:03:37 +01:00
welpo
89ad44ce26
🍱 feat(socials): add more Fediverse social icons
Resolves #478
2025-02-01 20:01:37 +01:00
Stephen Kershaw
e519864543
🔒️ fix(CSP): improve CSP coverage (#471) 2025-01-25 18:45:35 +01:00
ZzMzaw
6445f549ad
📝 misc(README): add zzmzaw's blog to sites using tabi (#469) 2025-01-19 09:43:09 +01:00
Óscar
c3b048d34a
🐛 fix(feed): load CSS in subfolder setups (#467) 2025-01-18 14:19:10 +01:00
welpo
0e0a391ea8
🍱 feat(socials): add Letterboxd social icon 2025-01-18 07:07:48 -03:00
github-actions[bot]
9b5dc70546
⬆️ chore(deps): upgrade KaTeX to v0.16.21 (#466)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-01-18 10:46:13 +01:00
Niels Gouman
36ff72b318
🐛 fix: remove nofollow robots meta tag (#465) 2025-01-17 00:26:36 +01:00
Niels Gouman
7793b819a9
📝 misc(README): add nizzlay.com to Sites using tabi (#464) 2025-01-17 00:17:22 +01:00
github-actions[bot]
f440c011cc
⬆️ chore(deps): upgrade KaTeX to v0.16.20 (#462)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-01-14 22:11:48 +01:00
welpo
47ea26db97
👷 misc(CI): add concurrency control to sumi action 2025-01-12 18:42:06 +01:00
Niels Gouman
799f3c0681
feat: support disabling header font-subset (#458)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-01-12 18:39:40 +01:00
Olexandr88
162a84b6d6
📝 docs(README): fix typo (#457) 2025-01-08 19:34:16 +01:00
welpo
de6fa58fe3
🐛 fix: show feed icon without socials
Previously the feed icon would not display when it was the only
configured "social" option, as the containing <ul> required either
socials or email to be present.

Fixes #456
2025-01-04 11:39:12 +01:00
Christian Franzl
28fe074ea0
feat: support using info-page.html for sections (#455)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2025-01-02 21:50:56 +01:00
github-actions[bot]
e05860636b
⬆️ chore(deps): upgrade KaTeX to v0.16.19 (#453)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2024-12-30 11:27:47 +01:00
welpo
1dcd615615
📝 docs(shortcodes): clarify aside usage 2024-12-28 17:42:58 +01:00
welpo
da1b6bb0cc
📝 docs(shortcodes): clarify position parameter usage for "aside" 2024-12-27 12:30:18 +01:00
Óscar
98b0c8d161
feat(shortcodes): add 'aside' shortcode for side notes (#452) 2024-12-24 10:50:47 +01:00
welpo
e1b60542df
📝 misc: add "shuku" project 2024-12-24 00:56:50 +01:00
welpo
2cc336d9d0
🐛 fix: add separator between update date & remote changes link 2024-12-24 00:41:49 +01:00
Szabolcs
6810a0cb74
📝 misc(README): add szabolcs.me to Sites using tabi (#451) 2024-12-20 12:06:52 +01:00
github-actions[bot]
9c5b55d002
⬆️ chore(deps): upgrade KaTeX to v0.16.18 (#450)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2024-12-19 12:06:37 +01:00
welpo
dbb0e826b6
💄 style: remove extra whitespace in post metadata
Only happened with `minify_html = false`.
2024-12-19 01:36:24 +01:00
welpo
551b3d28c6
👷 misc(CI): add dependencies label to upgrade PRs 2024-12-18 12:26:51 +01:00
github-actions[bot]
92996d98ac
⬆️ chore(deps): upgrade KaTeX to v0.16.17 (#449)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2024-12-18 12:18:06 +01:00
welpo
eb0395352c
📝 docs: suggest MathML in lieu of KaTeX for JS-free math 2024-12-15 13:47:54 +01:00
Ariel Richtman
3dcd7a33db
🐛 fix(analytics): update umami domain (#448) 2024-12-14 13:41:41 +01:00
github-actions[bot]
21225f832d
⬆️ chore(deps): upgrade KaTeX to v0.16.15 (#447)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2024-12-10 11:18:52 +01:00
github-actions[bot]
f413c9f295
⬆️ chore(deps): upgrade KaTeX to v0.16.14 (#446)
Co-authored-by: welpo <welpo@users.noreply.github.com>
2024-12-09 15:04:56 +01:00
welpo
c6d1c3dff8
📝 misc: add ずつ (zutsu) project page 2024-12-04 22:56:53 +01:00
welpo
a6b6c32050
💄 style: use text-colour for hover on rt in links
Didn't look good on dark mode in note admonition.
2024-12-04 19:20:23 +01:00
welpo
0688628420
🐛 misc(upgrade-deps): improve version detection 2024-12-02 12:29:34 +01:00
welpo
69713c973c
📝 misc(README): set original colours for docs|up badge 2024-11-30 20:05:49 +01:00
welpo
077821208f
📝 misc(docs): fix Series section headings 2024-11-30 15:10:13 +01:00
welpo
0b10560a94
📝 misc(docs): use internal links in home description 2024-11-30 15:09:13 +01:00
welpo
29bbd2eecc
💚 misc(deps): check for existing branch upgrades 2024-11-29 13:16:58 +01:00
welpo
4834a9e85f
📝 docs(README): add maintenance badges 2024-11-29 13:10:19 +01:00
github-actions[bot]
e42832e131
⬆️ chore(deps): upgrade mermaid to v11.4.1 (#442) 2024-11-29 12:31:18 +01:00
Óscar
761f546b30
📝 docs: add tabi-start integration (#441) 2024-11-28 00:00:48 +01:00
Óscar
f8e98afd9d
feat: add raw_path parameter to image shortcodes (#439) 2024-11-27 21:34:42 +01:00
welpo
180fc53384
♻️ refactor: only show project tag filter with 2 or more tags
Prior to this change, the project filters would show up even with a single
tag, which wasn't very useful for filtering. Now filters only appear when
there are 2+ unique tags.
2024-11-27 19:33:47 +01:00
welpo
c15098a959
📝 misc: fix dōteki docs link 2024-11-27 16:00:40 +01:00
Óscar
9e58b3aca8
💄 style: fix home banner layout for short intro (#438) 2024-11-27 15:55:51 +01:00
welpo
6d44320f45
📝 misc: update git-sumi & dōteki projects 2024-11-25 15:17:28 +01:00
welpo
4be8a5634f
💄 style: fix numbered code blocks on iOS Safari
Tables used for line numbers were inheriting incorrect font sizes on iOS Safari
due to WebKit's text size adjustment behaviour.

Short lines were being centred, too.
2024-11-24 01:07:35 +01:00
Óscar
123110ea43
💄 style: fix numbered code blocks (#437) 2024-11-23 16:49:19 +01:00
welpo
cf6385553c
🍱 feat(socials): add ORCID icon 2024-11-23 14:13:03 +01:00
renovate[bot]
c9639dc5c8
⬆️ chore(deps): update scripts/release digest to a128ada (#433) 2024-11-23 02:54:52 +01:00
Óscar
39a6750d8b
🐛 fix: support relative paths in inherited social media card (#432) 2024-11-18 00:02:06 +01:00
welpo
a7833299ff
💥 feat!: add tag filtering for projects (#431)
- Card (project) images no longer require manual top/bottom margin
adjustments for proper spacing. Action needed: Review existing card
images as previous manual margin adjustments may now be
unnecessary/excessive.
- Sites using `cards.html` with tags will now load JavaScript by
default when tags are present. To maintain no-JS behaviour, explicitly
set `enable_cards_tag_filtering = false` in either `config.toml` or the
`_index.md` file where `cards.html` is used.
2024-11-17 00:38:32 +01:00
welpo
f93def0692
👷 misc(CI): ignore deleted files in pre-commit 2024-11-16 19:01:14 +01:00
welpo
557ea7786f
🐛 style: retain base code block style in admonitions 2024-11-16 16:06:25 +01:00
welpo
1e4859998d
⬆️ chore(deps): upgrade Inter font to v4.1
https://github.com/rsms/inter/releases/tag/v4.1
2024-11-16 14:04:52 +01:00
231 changed files with 6043 additions and 1422 deletions

View file

@ -148,8 +148,8 @@ fi
# Ensure JavaScript files are minified. #
##################################################################
# Get the newly added and modified files.
mapfile -t all_changed_files < <(git diff --cached --name-only)
# Get the newly added and modified files, but not deleted files.
mapfile -t all_changed_files < <(git diff --cached --name-only --diff-filter=d)
script_name=$(basename "$0")
# Loop through all newly added or modified files.

View file

@ -58,6 +58,7 @@ If you need help, please ask! -->
- [ ] I have verified the accessibility of my changes
- [ ] I have tested all possible scenarios for this change
- [ ] I have updated `theme.toml` with a sane default for the feature
- [ ] I have updated `config.toml` in [tabi-start](https://github.com/welpo/tabi-start)
- [ ] I have made corresponding changes to the documentation:
- [ ] Updated `config.toml` comments
- [ ] Updated `theme.toml` comments

View file

@ -13,7 +13,7 @@ jobs:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0

View file

@ -15,15 +15,15 @@ jobs:
if: github.event_name == 'pull_request'
steps:
- name: Checkout Code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Zola Build
uses: shalzz/zola-deploy-action@v0.19.2
uses: shalzz/zola-deploy-action@v0.21.0
env:
BUILD_ONLY: true
- name: Zola Check
uses: shalzz/zola-deploy-action@v0.19.2
uses: shalzz/zola-deploy-action@v0.21.0
env:
BUILD_ONLY: true
CHECK_LINKS: true
@ -34,10 +34,10 @@ jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout Code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Build and Deploy
uses: shalzz/zola-deploy-action@v0.19.2
uses: shalzz/zola-deploy-action@v0.21.0
env:
PAGES_BRANCH: gh-pages
TOKEN: ${{ secrets.TOKEN }}

View file

@ -8,6 +8,10 @@ on:
- synchronize
- ready_for_review
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
pull-requests: read

View file

@ -1,5 +1,4 @@
name: Dependency upgrade
on:
workflow_dispatch:
inputs:
@ -8,9 +7,9 @@ on:
required: true
type: choice
options:
- all
- mermaid
- katex
- all
- mermaid
- katex
schedule:
- cron: '32 4 * * *'
@ -26,7 +25,7 @@ jobs:
dependency: ${{ github.event_name == 'schedule' && fromJson('["mermaid", "katex"]') || fromJson(format('["{0}"]', github.event.inputs.dependency)) }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0
@ -48,6 +47,22 @@ jobs:
git config --global user.name "welpo"
git config --global user.email "welpo@users.noreply.github.com"
- name: Check for existing branch
id: check_branch
run: |
if git ls-remote --heads origin deps/upgrade-${{ matrix.dependency }} | grep -q deps/upgrade-${{ matrix.dependency }}; then
echo "branch_exists=true" >> $GITHUB_OUTPUT
else
echo "branch_exists=false" >> $GITHUB_OUTPUT
fi
- name: Handle existing branch
if: steps.check_branch.outputs.branch_exists == 'true'
run: |
echo "Branch deps/upgrade-${{ matrix.dependency }} already exists."
echo "Skipping upgrade as there's already an open PR"
exit 0
- name: Create and switch to new branch
run: |
git checkout -b deps/upgrade-${{ matrix.dependency }}
@ -69,6 +84,6 @@ jobs:
exit 0
fi
git push -u origin deps/upgrade-${{ matrix.dependency }}
gh pr create --fill --base main --head deps/upgrade-${{ matrix.dependency }}
gh pr create --fill --base main --head deps/upgrade-${{ matrix.dependency }} --label "dependencies"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -4,6 +4,166 @@ Welcome to the changelog for tabi. This document aims to provide a comprehensive
We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.MINOR.PATCH. Major version changes involve significant (breaking) changes, minor versions introduce features and improvements in a backward compatible manner, and patch versions are for bug fixes and minor tweaks.
## [4.1.0](https://github.com/welpo/tabi/compare/v4.0.0..v4.1.0) - 2025-06-14
### ✨ Features
- *(feed)* Add feed icon tag pages ([#522](https://github.com/welpo/tabi/issues/522)) by [@tzinm](https://github.com/tzinm) and [@welpo](https://github.com/welpo)
- *(i18n)* Add Finnish language ([#505](https://github.com/welpo/tabi/issues/505)) by [@axelkar](https://github.com/axelkar) and [@welpo](https://github.com/welpo)
- *(indieweb)* Add hidden h-card ([#506](https://github.com/welpo/tabi/issues/506)) by [@mmai](https://github.com/mmai) and [@welpo](https://github.com/welpo)
- *(socials)* Add itch.io icon ([#520](https://github.com/welpo/tabi/issues/520)) by [@mystal](https://github.com/mystal)
- *(webmentions)* Add hcard in post page ([#524](https://github.com/welpo/tabi/issues/524)) by [@mmai](https://github.com/mmai) and [@welpo](https://github.com/welpo)
- Add support for webmentions ([#485](https://github.com/welpo/tabi/issues/485)) by [@gortavoher](https://github.com/gortavoher), [@Jeremiah](https://github.com/Jeremiah) Russell, [@Henri](https://github.com/Henri) Bourcereau and [@welpo](https://github.com/welpo)
- Extend tabi `<head>` and `<body>` elements ([#528](https://github.com/welpo/tabi/issues/528)) by [@axis7818](https://github.com/axis7818) and [@welpo](https://github.com/welpo)
- Parse markdown in post summary & description ([#517](https://github.com/welpo/tabi/issues/517)) by [@rktjump](https://github.com/rktjump) and [@welpo](https://github.com/welpo)
- Cache bust images in shortcodes ([#504](https://github.com/welpo/tabi/issues/504)) by [@axelkar](https://github.com/axelkar)
### 🐛 Bug fixes
- *(feed)* Prioritise description > summary ([#525](https://github.com/welpo/tabi/issues/525)) by [@tzinm](https://github.com/tzinm)
- Render author HTML on page metadata ([7321fc5](https://github.com/welpo/tabi/commit/7321fc5a43fa50dc24c9fa87714612a2295b904a)) by [@welpo](https://github.com/welpo)
- Allow feed icon to be hidden ([#533](https://github.com/welpo/tabi/issues/533)) by [@bajacc](https://github.com/bajacc)
- Fix hcard html tags ([#508](https://github.com/welpo/tabi/issues/508)) by [@mmai](https://github.com/mmai)
- Fix external link icon breaking word wrapping ([#498](https://github.com/welpo/tabi/issues/498)) by [@welpo](https://github.com/welpo)
- Fix padding hover on links with code (custom font) ([#494](https://github.com/welpo/tabi/issues/494)) by [@clement-escolano](https://github.com/clement-escolano)
### 💄 Styling
- Remove extra spacing after author ([2e29782](https://github.com/welpo/tabi/commit/2e29782279d8154cb9c6f1df9a2401612ec77948)) by [@welpo](https://github.com/welpo)
### ♻️ Refactor
- Add "target_attribute" macro ([#515](https://github.com/welpo/tabi/issues/515)) by [@tzinm](https://github.com/tzinm) and @Óscar
- Improve error message when title is unset ([a384ac8](https://github.com/welpo/tabi/commit/a384ac80c8e6b8be46d4a335930fba697a523af9)) by [@welpo](https://github.com/welpo)
### 🔧 Miscellaneous tasks
- *(CI)* Fix Mermaid version detection ([e11186a](https://github.com/welpo/tabi/commit/e11186a8448f94494b350402f76a2cc5e5a98a97)) by [@welpo](https://github.com/welpo)
- *(README)* Add b1n.io to 'sites using tabi' ([#531](https://github.com/welpo/tabi/issues/531)) by [@b1nhack](https://github.com/b1nhack)
- *(README)* Fix broken link tag ([#516](https://github.com/welpo/tabi/issues/516)) by [@Olexandr88](https://github.com/Olexandr88)
- *(README)* Add tzinm's blog to 'sites using tabi' ([#496](https://github.com/welpo/tabi/issues/496)) by [@tzinm](https://github.com/tzinm)
### 👥 New contributors
🫶 [@gortavoher](https://github.com/gortavoher) made their first contribution in [#485](https://github.com/welpo/tabi/pull/485)
🫶 [@bajacc](https://github.com/bajacc) made their first contribution in [#533](https://github.com/welpo/tabi/pull/533)
🫶 [@axis7818](https://github.com/axis7818) made their first contribution in [#528](https://github.com/welpo/tabi/pull/528)
🫶 [@b1nhack](https://github.com/b1nhack) made their first contribution in [#531](https://github.com/welpo/tabi/pull/531)
🫶 [@tzinm](https://github.com/tzinm) made their first contribution in [#525](https://github.com/welpo/tabi/pull/525)
🫶 [@mmai](https://github.com/mmai) made their first contribution in [#524](https://github.com/welpo/tabi/pull/524)
🫶 [@rktjump](https://github.com/rktjump) made their first contribution in [#517](https://github.com/welpo/tabi/pull/517)
🫶 [@mystal](https://github.com/mystal) made their first contribution in [#520](https://github.com/welpo/tabi/pull/520)
🫶 [@axelkar](https://github.com/axelkar) made their first contribution in [#504](https://github.com/welpo/tabi/pull/504)
🫶 [@clement-escolano](https://github.com/clement-escolano) made their first contribution in [#494](https://github.com/welpo/tabi/pull/494)
## [4.0.0](https://github.com/welpo/tabi/compare/v3.1.0..v4.0.0) - 2025-02-16
### 💥 BREAKING CHANGES 💥
- *(archive)* Enforce chronological sorting ([#483](https://github.com/welpo/tabi/issues/483)) by [@welpo](https://github.com/welpo)
- Add tag filtering for projects ([#431](https://github.com/welpo/tabi/issues/431)) ([a783329](https://github.com/welpo/tabi/commit/a7833299fff4c753e35fa1f00667d8801f541f9a)) by [@welpo](https://github.com/welpo)
### ✨ Features
- *(archive)* [**‼BREAKING‼**] Enforce chronological sorting ([#483](https://github.com/welpo/tabi/issues/483)) by [@welpo](https://github.com/welpo)
- *(shortcodes)* Add 'aside' shortcode for side notes ([#452](https://github.com/welpo/tabi/issues/452)) by [@welpo](https://github.com/welpo)
- *(socials)* Add more Fediverse social icons ([89ad44c](https://github.com/welpo/tabi/commit/89ad44ce26d002f2f2c3baa6cf769fb8972551af)) by [@welpo](https://github.com/welpo)
- *(socials)* Add Letterboxd social icon ([0e0a391](https://github.com/welpo/tabi/commit/0e0a391ea84c3ed8b66931158ddef1e4cdd161f4)) by [@welpo](https://github.com/welpo)
- *(socials)* Add ORCID icon ([cf63855](https://github.com/welpo/tabi/commit/cf6385553c779710d1164509f3fc0d480e858ebd)) by [@welpo](https://github.com/welpo)
- Add `hide_from_main_feed` support ([#490](https://github.com/welpo/tabi/issues/490)) by [@welpo](https://github.com/welpo)
- Support Zola's native code block names ([#489](https://github.com/welpo/tabi/issues/489)) by [@welpo](https://github.com/welpo)
- Render markdown in page titles & descriptions ([#486](https://github.com/welpo/tabi/issues/486)) by [@stalkerGH](https://github.com/stalkerGH) and [@welpo](https://github.com/welpo)
- Add indicator to external links ([#443](https://github.com/welpo/tabi/issues/443)) by [@welpo](https://github.com/welpo)
- Allow setting post_listing_date per section ([a3ae897](https://github.com/welpo/tabi/commit/a3ae897c8310ba6a1da72db0fc81f19ca8993d6f)) by [@welpo](https://github.com/welpo)
- Render section content ([#484](https://github.com/welpo/tabi/issues/484)) by [@welpo](https://github.com/welpo)
- Support disabling header font-subset ([#458](https://github.com/welpo/tabi/issues/458)) by [@Nizzlay](https://github.com/Nizzlay) and [@welpo](https://github.com/welpo)
- Support using info-page.html for sections ([#455](https://github.com/welpo/tabi/issues/455)) by [@wischi-chr](https://github.com/wischi-chr) and [@welpo](https://github.com/welpo)
- Add `raw_path` parameter to image shortcodes ([#439](https://github.com/welpo/tabi/issues/439)) by [@welpo](https://github.com/welpo)
- [**‼BREAKING‼**] Add tag filtering for projects ([#431](https://github.com/welpo/tabi/issues/431)) ([a783329](https://github.com/welpo/tabi/commit/a7833299fff4c753e35fa1f00667d8801f541f9a)) by [@welpo](https://github.com/welpo)
### 🐛 Bug fixes
- *(CSP)* Improve CSP coverage ([#471](https://github.com/welpo/tabi/issues/471)) by [@stekershaw](https://github.com/stekershaw)
- *(analytics)* Update umami domain ([#448](https://github.com/welpo/tabi/issues/448)) by [@arichtman](https://github.com/arichtman)
- *(feed)* Styling now works in all website paths ([45fe170](https://github.com/welpo/tabi/commit/45fe17046704e249be3b5fbb94a3355d21149d4d)) by [@welpo](https://github.com/welpo)
- *(feed)* Load CSS in subfolder setups ([#467](https://github.com/welpo/tabi/issues/467)) by [@welpo](https://github.com/welpo)
- Adapt footnotes styling for zola 0.19.x & 0.20.x ([1c067e7](https://github.com/welpo/tabi/commit/1c067e708eac4282a2191507f046eacd9f18e0f6)) by [@welpo](https://github.com/welpo)
- Improve menu accessibility ([#482](https://github.com/welpo/tabi/issues/482)) by [@welpo](https://github.com/welpo)
- Support external URLs in menu ([#481](https://github.com/welpo/tabi/issues/481)) by [@welpo](https://github.com/welpo)
- Remove `nofollow` robots meta tag ([#465](https://github.com/welpo/tabi/issues/465)) by [@Nizzlay](https://github.com/Nizzlay)
- Show feed icon without socials ([de6fa58](https://github.com/welpo/tabi/commit/de6fa58fe3b276c12f16f9ddc1cf9f93269161f9)) by [@welpo](https://github.com/welpo)
- Add separator between update date & remote changes link ([2cc336d](https://github.com/welpo/tabi/commit/2cc336d9d0f7019015a356242230f0568658a523)) by [@welpo](https://github.com/welpo)
- Support relative paths in inherited social media card ([#432](https://github.com/welpo/tabi/issues/432)) by [@welpo](https://github.com/welpo)
### 💄 Styling
- *(admonitions)* Fix external link icon ([2b106b7](https://github.com/welpo/tabi/commit/2b106b7c628e01046495a3add7a9ec4cc00b9fa3)) by [@welpo](https://github.com/welpo)
- Increase emoji favicon size ([d777d5d](https://github.com/welpo/tabi/commit/d777d5d99679ab609bebb89726aef80562b30d87)) by [@welpo](https://github.com/welpo)
- Remove extra whitespace in post metadata ([dbb0e82](https://github.com/welpo/tabi/commit/dbb0e826b6572531d4c44bdb031d68207a906666)) by [@welpo](https://github.com/welpo)
- Use text-colour for hover on `rt` in links ([a6b6c32](https://github.com/welpo/tabi/commit/a6b6c3205096fd718757a6f32ff07d60bcc22808)) by [@welpo](https://github.com/welpo)
- Fix home banner layout for short intro ([#438](https://github.com/welpo/tabi/issues/438)) by [@welpo](https://github.com/welpo)
- Fix numbered code blocks on iOS Safari ([4be8a56](https://github.com/welpo/tabi/commit/4be8a5634fa2990825e9bc785029c4dddb340c39)) by [@welpo](https://github.com/welpo)
- Fix numbered code blocks ([#437](https://github.com/welpo/tabi/issues/437)) by [@welpo](https://github.com/welpo)
- Retain base code block style in admonitions ([557ea77](https://github.com/welpo/tabi/commit/557ea7786ffbad75fafdd69d864d6073fd1dadbc)) by [@welpo](https://github.com/welpo)
### 📝 Documentation
- *(README)* Fix typo ([#457](https://github.com/welpo/tabi/issues/457)) by [@Olexandr88](https://github.com/Olexandr88)
- *(README)* Add maintenance badges ([4834a9e](https://github.com/welpo/tabi/commit/4834a9e85ff89f1678374752289116bce6f3a076)) by [@welpo](https://github.com/welpo)
- *(demo)* Basic Arabic translation ([#390](https://github.com/welpo/tabi/issues/390)) by [@TheAwiteb](https://github.com/TheAwiteb) and [@welpo](https://github.com/welpo)
- *(series)* Add tip for custom text permalinks ([4029657](https://github.com/welpo/tabi/commit/402965786beb942aab0922de68cd98952f9a9be0)) by [@welpo](https://github.com/welpo)
- *(shortcodes)* Clarify aside usage ([1dcd615](https://github.com/welpo/tabi/commit/1dcd615615b492dffc00c34bd7e1bbc680cf95fd)) by [@welpo](https://github.com/welpo)
- *(shortcodes)* Clarify `position` parameter usage for "aside" ([da1b6bb](https://github.com/welpo/tabi/commit/da1b6bb0cc7719f3de23a6855d80dc0262d5c025)) by [@welpo](https://github.com/welpo)
- Suggest MathML in lieu of KaTeX for JS-free math ([eb03953](https://github.com/welpo/tabi/commit/eb0395352caffab67f1ad9b81aab51824e9feb54)) by [@welpo](https://github.com/welpo)
- Add tabi-start integration ([#441](https://github.com/welpo/tabi/issues/441)) by [@welpo](https://github.com/welpo)
### ♻️ Refactor
- Only show project tag filter with 2 or more tags ([180fc53](https://github.com/welpo/tabi/commit/180fc533844ec3427c447f7040ea837520c4fe5d)) by [@welpo](https://github.com/welpo)
### 🔧 Miscellaneous tasks
- *(CI)* Add concurrency control to sumi action ([47ea26d](https://github.com/welpo/tabi/commit/47ea26db97cfbd87518ab00b892fdbb245577535)) by [@welpo](https://github.com/welpo)
- *(CI)* Add dependencies label to upgrade PRs ([551b3d2](https://github.com/welpo/tabi/commit/551b3d28c6852c3a1e7acf3c645e0d7b84e079cb)) by [@welpo](https://github.com/welpo)
- *(CI)* Ignore deleted files in pre-commit ([f93def0](https://github.com/welpo/tabi/commit/f93def0692146a15b63d19406ec1180b9e41ba3d)) by [@welpo](https://github.com/welpo)
- *(README)* Add idle-ti.me blog to sites using tabi ([#479](https://github.com/welpo/tabi/issues/479)) by [@be-next](https://github.com/be-next)
- *(README)* Add zzmzaw's blog to sites using tabi ([#469](https://github.com/welpo/tabi/issues/469)) by [@ZzMzaw](https://github.com/ZzMzaw)
- *(README)* Add nizzlay.com to Sites using tabi ([#464](https://github.com/welpo/tabi/issues/464)) by [@Nizzlay](https://github.com/Nizzlay)
- *(README)* Add szabolcs.me to Sites using tabi ([#451](https://github.com/welpo/tabi/issues/451)) by [@szabolcsf](https://github.com/szabolcsf)
- *(README)* Set original colours for docs|up badge ([69713c9](https://github.com/welpo/tabi/commit/69713c973c11d7646c8fe56476261d96cc1978d8)) by [@welpo](https://github.com/welpo)
- *(deps)* Check for existing branch upgrades ([29bbd2e](https://github.com/welpo/tabi/commit/29bbd2eecc97aaaa95c61f8fb736d1301042aa91)) by [@welpo](https://github.com/welpo)
- *(docs)* Fix Series section headings ([0778212](https://github.com/welpo/tabi/commit/077821208f161e813da90c56db817b743bc211c4)) by [@welpo](https://github.com/welpo)
- *(docs)* Use internal links in home description ([0b10560](https://github.com/welpo/tabi/commit/0b10560a94f4a0a4bcb8536ee0595e8c4f4df800)) by [@welpo](https://github.com/welpo)
- *(projects)* Add nemui project ([11eb774](https://github.com/welpo/tabi/commit/11eb774bd74562a4628f87a130575281aa469918)) by [@welpo](https://github.com/welpo)
- *(upgrade-deps)* Improve version detection ([0688628](https://github.com/welpo/tabi/commit/06886284202f670be2034dcedbf6130446b91436)) by [@welpo](https://github.com/welpo)
- Add "shuku" project ([e1b6054](https://github.com/welpo/tabi/commit/e1b60542dfc3eb9bed39a92d3b7acfae88f32b84)) by [@welpo](https://github.com/welpo)
- Add ずつ (zutsu) project page ([c6d1c3d](https://github.com/welpo/tabi/commit/c6d1c3dff844461c7c774882dec8a87d7d3ea548)) by [@welpo](https://github.com/welpo)
- Fix dōteki docs link ([c15098a](https://github.com/welpo/tabi/commit/c15098a959242765353c7fab0906d1fc596c64c0)) by [@welpo](https://github.com/welpo)
- Update git-sumi & dōteki projects ([6d44320](https://github.com/welpo/tabi/commit/6d44320f45bc381c65e370f8f03bf3525b59e05a)) by [@welpo](https://github.com/welpo)
### 👥 New contributors
🫶 [@stalkerGH](https://github.com/stalkerGH) made their first contribution in [#486](https://github.com/welpo/tabi/pull/486)
🫶 [@stekershaw](https://github.com/stekershaw) made their first contribution in [#471](https://github.com/welpo/tabi/pull/471)
🫶 [@Nizzlay](https://github.com/Nizzlay) made their first contribution in [#465](https://github.com/welpo/tabi/pull/465)
🫶 [@Olexandr88](https://github.com/Olexandr88) made their first contribution in [#457](https://github.com/welpo/tabi/pull/457)
🫶 [@wischi-chr](https://github.com/wischi-chr) made their first contribution in [#455](https://github.com/welpo/tabi/pull/455)
🫶 [@szabolcsf](https://github.com/szabolcsf) made their first contribution in [#451](https://github.com/welpo/tabi/pull/451)
## [3.1.0](https://github.com/welpo/tabi/compare/v3.0.0..v3.1.0) - 2024-11-14
### ✨ Features
@ -103,8 +263,12 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
### 👥 New contributors
🫶 [@github-actions](https://github.com/github-actions)[bot] made their first contribution in [#405](https://github.com/welpo/tabi/pull/405)
🫶 [@jmbhughes](https://github.com/jmbhughes) made their first contribution in [#404](https://github.com/welpo/tabi/pull/404)
🫶 [@soumendrak](https://github.com/soumendrak) made their first contribution in [#402](https://github.com/welpo/tabi/pull/402)
## [2.16.0](https://github.com/welpo/tabi/compare/v2.15.0..v2.16.0) - 2024-09-22
### ✨ Features
@ -144,7 +308,7 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
### ✨ Features
- *(i18n)* Add Odia language ([#372](https://github.com/welpo/tabi/issues/372)) by [@soumendrak](https://github.com/soumendrak)
- *(i18n)* Add Odia language ([#372](https://github.com/welpo/tabi/issues/372))
- *(i18n)* Add Estonian language ([#365](https://github.com/welpo/tabi/issues/365)) by [@NippleOfAnApe](https://github.com/NippleOfAnApe)
- Add Mermaid diagram support ([#370](https://github.com/welpo/tabi/issues/370)) by [@welpo](https://github.com/welpo)
@ -175,6 +339,8 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
### 👥 New contributors
🫶 @ made their first contribution in [#372](https://github.com/welpo/tabi/pull/372)
🫶 [@DataTriny](https://github.com/DataTriny) made their first contribution in [#367](https://github.com/welpo/tabi/pull/367)
🫶 [@NippleOfAnApe](https://github.com/NippleOfAnApe) made their first contribution in [#365](https://github.com/welpo/tabi/pull/365)
@ -213,6 +379,8 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
🫶 [@sam9032](https://github.com/sam9032) made their first contribution in [#355](https://github.com/welpo/tabi/pull/355)
🫶 [@renovate](https://github.com/renovate)[bot] made their first contribution in [#345](https://github.com/welpo/tabi/pull/345)
## [2.12.0](https://github.com/welpo/tabi/compare/v2.11.0..v2.12.0) - 2024-06-29
### ✨ Features
@ -404,6 +572,10 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
- *(release)* Replace both pull and issue links ([e951e95](https://github.com/welpo/tabi/commit/e951e951102249707a4c899f0d194b781c3466d2)) by [@welpo](https://github.com/welpo)
### 👥 New contributors
🫶 [@be-next](https://github.com/be-next) made their first contribution in [#284](https://github.com/welpo/tabi/pull/284)
## [2.4.0](https://github.com/welpo/tabi/compare/v2.3.0..v2.4.0) - 2024-03-02
### ✨ Features
@ -496,6 +668,10 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
- Update changelog sections ([0e6c5c2](https://github.com/welpo/tabi/commit/0e6c5c269177712ae58649fe24662b407315d3f1)) by [@welpo](https://github.com/welpo)
- Add continuous deployment workflow ([9b8b139](https://github.com/welpo/tabi/commit/9b8b1396cfaeefd61050cdf49bf81f01977e5899)) by [@welpo](https://github.com/welpo)
### 👥 New contributors
🫶 [@TheAwiteb](https://github.com/TheAwiteb) made their first contribution in [#264](https://github.com/welpo/tabi/pull/264)
## [2.1.0](https://github.com/welpo/tabi/compare/v2.0.0..v2.1.0) - 2024-01-29
### ✨ Features
@ -549,6 +725,10 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
- *(home-banner)* [**‼BREAKING‼**] Force proper header.img path ([#254](https://github.com/welpo/tabi/issues/254)) by [@welpo](https://github.com/welpo)
- *(i18n)* [**‼BREAKING‼**] Force config.toml copyright translation ([#255](https://github.com/welpo/tabi/issues/255)) ([9f39b7f](https://github.com/welpo/tabi/commit/9f39b7fe47721eb7aaea04d8b9ee66b557b7eabf)) by [@welpo](https://github.com/welpo)
### 👥 New contributors
🫶 [@arichtman](https://github.com/arichtman) made their first contribution in [#231](https://github.com/welpo/tabi/pull/231)
## 1.0.0 - 2023-12-29
### 💥 BREAKING CHANGES 💥
@ -1089,6 +1269,10 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
### 👥 New contributors
🫶 [@welpo](https://github.com/welpo) made their first contribution
🫶 [@ZzMzaw](https://github.com/ZzMzaw) made their first contribution in [#215](https://github.com/welpo/tabi/pull/215)
🫶 [@joberthrogers18](https://github.com/joberthrogers18) made their first contribution in [#219](https://github.com/welpo/tabi/pull/219)
🫶 [@xvello](https://github.com/xvello) made their first contribution in [#218](https://github.com/welpo/tabi/pull/218)
@ -1103,6 +1287,8 @@ We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.
🫶 [@sandman](https://github.com/sandman) made their first contribution in [#170](https://github.com/welpo/tabi/pull/170)
🫶 [@Smtbook](https://github.com/Smtbook) made their first contribution in [#166](https://github.com/welpo/tabi/pull/166)
🫶 [@SeaDve](https://github.com/SeaDve) made their first contribution in [#165](https://github.com/welpo/tabi/pull/165)
🫶 [@stevenroose](https://github.com/stevenroose) made their first contribution in [#124](https://github.com/welpo/tabi/pull/124)

View file

@ -5,22 +5,29 @@
<img src="https://img.shields.io/github/contributors/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Contributors"></a>
<a href="https://github.com/welpo/tabi/forks">
<img src="https://img.shields.io/github/forks/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Forks"></a>
<a hfref="https://github.com/welpo/tabi/commits/main/">
<a href="https://github.com/welpo/tabi/commits/main/">
<img src="https://img.shields.io/github/last-commit/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Last commit"></a>
<br>
<a href="https://github.com/welpo/tabi/releases">
<img src="https://img.shields.io/github/v/release/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Latest release"></a>
<a href="https://welpo.github.io/tabi/blog/mastering-tabi-settings/">
<img src="https://img.shields.io/website?url=https%3A%2F%2Fwelpo.github.io%2Ftabi&style=flat-square&label=docs&labelColor=202b2d&color=087e96" alt="Documentation"></a>
<img src="https://img.shields.io/website?url=https%3A%2F%2Fwelpo.github.io%2Ftabi&style=flat-square&label=docs&labelColor=202b2d" alt="Documentation"></a>
<a href="https://github.com/welpo/tabi/blob/main/LICENSE">
<img src="https://img.shields.io/github/license/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="License"></a>
<a href="https://github.com/welpo/git-sumi">
<img src="https://img.shields.io/badge/clean_commits-git--sumi-0?style=flat-square&labelColor=202b2d&color=087e96" alt="Clean commits"></a>
<a href="https://isitmaintained.com/project/welpo/tabi">
<img src="https://isitmaintained.com/badge/resolution/welpo/tabi.svg" alt="Average time to resolve an issue"></a>
<a href="https://isitmaintained.com/project/welpo/tabi">
<img src="https://isitmaintained.com/badge/open/welpo/tabi.svg" alt="Percentage of issues still open"></a>
</p>
# tabi
# 🌱 tabi
A fast, lightweight, and modern [Zola](https://www.getzola.org) theme with multi-language support. It aims to be a personal page and home to blog posts.
An accessible [Zola](https://www.getzola.org) theme with [search](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#search), [multi-language support](https://welpo.github.io/tabi/blog/faq-languages/), [optional JavaScript](https://welpo.github.io/tabi/blog/javascript/), a perfect Lighthouse score, and [comprehensive documentation](https://welpo.github.io/tabi). Crafted for personal websites and blogs.
> [!TIP]
> Want to start blogging right away? Use the [tabi-start template](https://github.com/welpo/tabi-start) to get a complete site up and running in minutes.
See a live preview (and the theme's documentation) [here](https://welpo.github.io/tabi).
@ -44,10 +51,12 @@ tabi has a perfect score on Google's Lighthouse audit:
- [X] Perfect Lighthouse score (Performance, Accessibility, Best Practices and SEO).
- [X] [Comprehensive multi-language support](https://welpo.github.io/tabi/blog/faq-languages/#how-does-tabi-handle-multilingual-support). Add as many languages as you wish.
- [X] Support for [comments using giscus, utterances, Hyvor Talk, or Isso](https://welpo.github.io/tabi/blog/comments/).
- [X] [Indieweb](https://indieweb.org/) ready with microformats, [hcard](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#representative-h-card) and [webmentions](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#webmentions) support.
- [X] Code syntax highlighting with colours based on [Catppuccin](https://github.com/catppuccin/catppuccin) Frappé.
- [X] [Mermaid support](https://welpo.github.io/tabi/blog/shortcodes/#mermaid-diagrams) to create diagrams and charts with text.
- [X] [Local search](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#search) with an accessible, multi-lingual interface.
- [X] [Custom Twitter card](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#social-media-cards) and automatic Open Graph tags.
- [X] Anonymous [like buttons](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#iine) powered by [iine](https://iine.to).
- [X] [KaTeX](https://katex.org/) support for mathematical notation.
- [X] [Stylized and human readable Atom feed](https://welpo.github.io/tabi/atom.xml).
- [X] [Stylized and human readable sitemap](https://welpo.github.io/tabi/sitemap.xml).
@ -71,6 +80,11 @@ tabi has a perfect score on Google's Lighthouse audit:
## Installation
> [!NOTE]
> The fastest way to create a new site is to use the [tabi-start template](https://github.com/welpo/tabi-start). This gives you a complete blog setup with all the essential configuration ready to go.
### Manual installation
To add tabi to you existing Zola site:
0. Initialize a Git repository in your project directory (if you haven't already):
@ -148,7 +162,7 @@ highlight_theme = "css"
>
> These settings are mutually exclusive and using both may result in no posts being displayed.
1. If you want an introduction section (see screenshot above), add these lines to `content/_index.md`:
6. If you want an introduction section (see screenshot above), add these lines to `content/_index.md`:
```
[extra]
@ -193,20 +207,26 @@ git pull
| Website | Creator | Description | Site Source |
| - | - | - | - |
| [osc.garden](https://osc.garden) | Óscar Fernández ([welpo](https://github.com/welpo)) | Data science, psychology, and Zola | [Source](https://github.com/welpo/osc.garden) |
| [sandip.live](https://sandip.live) | Sandip G ([sandman](https://github.com/sandman)) | Startups, tech and the good life | [Source](https://github.com/sandman/sandman.github.io) |
| [seadve.github.io](https://seadve.github.io/) | Dave Patrick Caberto ([SeaDve](https://github.com/SeaDve/)) | Personal blog and portfolio with custom CSS | [Source](https://github.com/SeaDve/seadve.github.io) |
| [mikufan.page](https://mikufan.page) | [Nadia](https://github.com/nyadiia) | Personal blog | [Source](https://github.com/nyadiia/mikufan.page) |
| [tim-boettcher.online](https://tim-boettcher.online/) | [Tim Böttcher](https://codeberg.org/Tim-Boettcher/) | Insights and ramblings of a deafblind programmer | [Source](https://codeberg.org/Tim-Boettcher/tim-boettcher-online/) |
| [www.richtman.au](https://www.richtman.au) | [Ariel Richtman](https://github.com/arichtman) | Personal tech blog | [Source](https://github.com/arichtman/www.richtman.au) |
| [Ponderosa Games](https://ponderosagames.com/) | John Burak ([JVimes](https://github.com/jvimes)) | A friendly indie game company | &mdash; |
| [jmbhughes.com](https://jmbhughes.com/) | Marcus Hughes ([jmbhughes](https://github.com/jmbhughes)) | Personal blog | [Source](https://github.com/jmbhughes/jmbhughes.github.io) |
| [szabolcs.me](https://szabolcs.me) | Szabolcs Fazekas ([szabolcsf](https://github.com/szabolcsf)) | Personal blog | [Source](https://github.com/szabolcsf/szabolcs.me) |
| [Nizzlay](https://nizzlay.com) | Niels Gouman ([Nizzlay](https://github.com/Nizzlay)) | Personal blog | [Source](https://github.com/Nizzlay/nizzlay.com) |
| [ZzMzaw's blog](https://zzmzaw.github.io/) | ZzMzaw ([ZzMzaw](https://github.com/ZzMzaw)) | Personal blog | [Source](https://github.com/ZzMzaw/zzmzaw.github.io) |
| [idle-ti.me](https://idle-ti.me/) | Jérôme Ramette ([be-next](https://github.com/be-next)) | Personal blog | [Source](https://github.com/be-next/idle-ti.me) |
| [tzinm.me](https://tzinm.me/) | [Tzinm](https://github.com/tzinm) | Personal blog | [Source](https://codeberg.org/tzinm/blog) |
| [b1n.io](https://b1n.io) | [b1nhack](https://github.com/b1nhack) | Linux kernel vulnerability researcher | [Source](https://github.com/b1nhack/blog) |
| [posixlycorrect.com](https://posixlycorrect.com/) | [Fabian Montero](https://git.posixlycorrect.com/fabian) | Personal homepage | [Source](https://git.posixlycorrect.com/fabian/homepage) |
Using tabi? Feel free to create a PR and add your site to this list.
## Inspiration
This theme was inspired by:
- [shadharon](https://github.com/syedzayyan/shadharon) — tabi started as a fork of [syedzayyan](https://github.com/syedzayyan)'s theme
- [tailwind-nextjs-starter-blog](https://github.com/timlrx/tailwind-nextjs-starter-blog)
- [abridge](https://github.com/Jieiku/abridge)

View file

@ -1,14 +1,14 @@
base_url = "https://welpo.github.io/tabi"
title = "~/tabi"
description = "tabi is a fast, lightweight, and modern Zola theme with multi-language support, optional JavaScript, and a perfect Lighthouse score."
description = "tabi is an accessible Zola theme with search, multi-language support, optional JavaScript, a perfect Lighthouse score, and comprehensive documentation. Crafted for personal websites and blogs."
author = "welpo"
generate_feeds = true
compile_sass = true
minify_html = true
build_search_index = true
# To translate the entire theme, there must be a file with the same ISO 639-1
# (or IETF BCP 47) Code in the `i18n` folder of your site or the tabi theme
# To translate the entire theme, there must be a file with the same language code
# in the `i18n` folder of your site or the tabi theme.
# For example, "i18n/fr.toml" for French or "i18n/zh-Hans.toml" for Simplified Chinese.
# Otherwise the theme will be in English.
# See https://welpo.github.io/tabi/blog/faq-languages/ for more details.
@ -28,7 +28,7 @@ include_content = true
# At which character to truncate the content to. Useful if you have a lot of pages and the index would
# become too big to load on the site. Defaults to not being set.
# truncate_content_length = 100
# Wether to produce the search index as a javascript file or as a JSON file.
# Whether to produce the search index as a javascript file or as a JSON file.
# Accepted value "elasticlunr_javascript" or "elasticlunr_json".
index_format = "elasticlunr_json"
@ -38,6 +38,8 @@ bottom_footnotes = true
# To use a Zola built-in theme, CSP needs to allow unsafe-inline for style-src.
highlight_theme = "css"
smart_punctuation = true
# Set to 'external' to add an indicator next to external links.
external_links_class = "external"
[link_checker]
internal_level = "warn"
@ -50,17 +52,24 @@ skip_anchor_prefixes = [
[languages.es]
title = "~/tabi"
description = "tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse."
description = "tabi es un tema accesible para Zola con búsqueda, soporte multilingüe, JavaScript opcional, una puntuación perfecta en Lighthouse y documentación exhaustiva. Diseñado para sitios web y blogs personales."
generate_feeds = true
taxonomies = [{name = "tags", feed = true}]
build_search_index = true
[languages.ca]
title = "~/tabi"
description = "tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse."
description = "tabi és un tema accessible per a Zola amb cerca, suport multilingüe, JavaScript opcional, una puntuació perfecta a Lighthouse i documentació exhaustiva. Dissenyat per a llocs web i blogs personals."
generate_feeds = true
taxonomies = [{name = "tags", feed = true}]
[languages.ar]
title = "~/تابي"
description = "تابي هو قالب Zola سريع وحديث مع دعم متعدد اللغات و JavaScript اختياري ودرجة Lighthouse مثالية."
generate_feeds = true
taxonomies = [{name = "tags", feed = true}]
build_search_index = false
[extra]
# Check out the documentation (or the comments below) to learn how to customise tabi:
# https://welpo.github.io/tabi/blog/mastering-tabi-settings/
@ -99,6 +108,9 @@ skin = ""
browser_theme_color = "#087e96"
# browser_theme_color = ["#ffffff", "#000000"] # Example of light/dark colours.
# For multilingual sites: show current language code on the language switcher.
show_selected_language_code_in_language_switcher = false
# List additional stylesheets to load site-wide.
# These stylesheets should be located in your site's `static` directory.
# Example: stylesheets = ["extra1.css", "path/extra2.css"]
@ -126,13 +138,13 @@ show_remote_changes = true # Defaults to true.
# Show a link to the repository of the site, right next to the "Powered by Zola & tabi" text.
show_remote_source = true # Defaults to true.
# Add a "copy" button to codeblocks (loads ~700 bytes of JavaScript).
# Add a "copy" button to code blocks (loads ~700 bytes of JavaScript).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
copy_button = true
# Loads the necessary JavaScript (~400 bytes) to use the "Show source or path" shortcode: https://welpo.github.io/tabi/blog/shortcodes/#show-source-or-path
# Make code block names clickable if they are URLs (loads ~400 bytes of JavaScript).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
add_src_to_code_block = false
code_block_name_links = false
# Force left-to-right (LTR) direction for code blocks.
# Set to false to allow code to follow the document's natural direction.
@ -157,6 +169,14 @@ show_date = true
# "both" - Show both the original date and the last updated date.
post_listing_date = "date"
# Enable iine like buttons on all posts: https://iine.to/
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
iine = true
iine_icon = "thumbs_up" # See https://iine.to/#customise
# Unify like counts across all language versions of the same page.
# When enabled, likes on /es/blog/hello/ will count towards /blog/hello/ (default language).
iine_unified_languages = true
# Show "Jump to posts" link next to series' title.
# By default, the link appears automatically when a series description exceeds 2000 characters.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
@ -218,6 +238,17 @@ long_date_format = "%d %B %Y"
# Default is "6th July 2049" in English and "%-d %B %Y" in other languages.
short_date_format = ""
# Date format used for the archive page.
# Default is "06 July" in English and "%d %b" in other languages.
archive_date_format = ""
# Per-language date format overrides.
# Examples: Spanish uses "3 de febrero de 2024", German uses "3. Februar 2024"
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
# Custom separator used in title tag and posts metadata (between date, time to read, and tags).
separator = "•"
@ -231,6 +262,12 @@ compact_tags = false
# Default: "name".
tag_sorting = "name"
# Show clickable tags above cards.html template (e.g. projects/) to filter the displayed items.
# Loads JS to filter. If JS is disabled, the buttons are links to the tag's page.
# Can be set at the section or config.toml level, following the hierarchy: section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
# Default: true
enable_cards_tag_filtering = true
# Invert the order of the site title and page title in the browser tab.
# Example: true => "Blog • ~/tabi", false => "~/tabi • Blog"
invert_title_order = false
@ -246,7 +283,7 @@ favicon_emoji = "🌱"
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
# Learn how to create these images in batch and automatically:
# https://osc.garden/blog/automating-social-media-cards-zola/
social_media_card = "social_cards/index.jpg"
social_media_card = "index.jpg"
menu = [
{ name = "blog", url = "blog", trailing_slash = true },
@ -328,10 +365,14 @@ allowed_domains = [
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
enable_csp = true
# Custom subset of characters for the header.
# If set to true, the `static/custom_subset.css` file will be loaded first.
# This avoids a flashing text issue in Firefox.
# Please see https://welpo.github.io/tabi/blog/custom-font-subset/ to learn how to create this file.
# Font subsetting configuration.
# This feature helps prevent text flashing in Firefox when using custom fonts.
# See: https://welpo.github.io/tabi/blog/custom-font-subset/
# Enable or disable font subsetting completely, both built-in and custom subsets.
enable_subset = true
# Use a custom subset of characters for the header.
# If true, tabi will load the `static/custom_subset.css` file.
# If false, tabi will use the default language-specific subset (English or Spanish).
custom_subset = true
[extra.analytics]
@ -353,6 +394,9 @@ service = "goatcounter"
# Leave this field empty if you're using the service's default hosting.
self_hosted_url = "https://tabi-stats.osc.garden"
# Optional: For Umami, enable this option to respect users' Do Not Track (DNT) settings. The default is true.
do_not_track = true
# giscus support for comments. https://giscus.app
# Setup instructions: https://welpo.github.io/tabi/blog/comments/#setup
[extra.giscus]
@ -408,3 +452,69 @@ avatar = true
voting = true
page_author_hashes = "" # hash (or list of hashes) of the author.
lazy_loading = true # Loads when the comments are in the viewport (using the Intersection Observer API).
[extra.webmentions]
# To disable for a specific section or page, set webmentions = false in that page/section's front matter's [extra] section.
enable = false
# Specify the domain registered with webmention.io.
domain = ""
# The HTML ID for the object to fill in with the webmention data.
# Defaults to "webmentions"
# id = "webmentions"
# data configuration for the webmention.min.js script
# The base URL to use for this page. Defaults to window.location
# page_url =
# Additional URLs to check, separated by |s
# add_urls
# The maximum number of words to render in reply mentions.
# wordcount = 20
# The maximum number of mentions to retrieve. Defaults to 30.
# max_webmentions = 30
# By default, Webmentions render using the mf2 'url' element, which plays
# nicely with webmention bridges (such as brid.gy and telegraph)
# but allows certain spoofing attacks. If you would like to prevent
# spoofing, set this to a non-empty string (e.g. "true").
# prevent_spoofing
# What to order the responses by; defaults to 'published'. See
# https://github.com/aaronpk/webmention.io#api
# sort_by
# The order to sort the responses by; defaults to 'up' (i.e. oldest
# first). See https://github.com/aaronpk/webmention.io#api
# sort_dir
# If set to a non-empty string (e.g. "true"), will display comment-type responses
# (replies/mentions/etc.) as being part of the reactions
# (favorites/bookmarks/etc.) instead of in a separate comment list.
# comments_are_reactions = "true"
# h-card configuration
# Will identify you on the indieweb (see https://microformats.org/wiki/h-card)
[extra.hcard]
# Enable home page h-card.
# enable = true
# Add your email to the card if extra.email is set and not encoded.
# with_mail = true
# Add your social links ('socials' config) to the card.
# with_social_links = true
# Homepage url. Defaults to the value of 'base_url'.
# homepage = "https://myhomepage.net"
# avatar = "img/profile.webp"
# Display name, default to the value of 'author'.
# full_name = "John Doe"
# Small bio, as shown on social media profiles.
# biography = "Fond of the indieweb"
#
# You can add any property from https://microformats.org/wiki/h-card#Properties
# Make sure to replace all '-' characters by '_'
# Examples:
# p_nickname = "nickname"
# p_locality = "Bordeaux"
# p_country_name = "France"

18
content/_index.ar.md Normal file
View file

@ -0,0 +1,18 @@
+++
title = "أخر التدوينات"
sort_by = "date"
template = "section.html"
[extra]
header = {title = "اهلاً انا تابي~", img = "img/main.webp", img_alt = "أوسكار فرنانديز, كاتب السمة" }
section_path = "blog/_index.ar.md"
max_posts = 4
projects_path = "projects/_index.ar.md"
max_projects = 3
show_projects_first = false
social_media_card = "ar.jpg"
+++
تابي هو قالب Zola سريع وعصري. يهدف ليكون صفحة ومدونة شخصية. يتميز بتقييم مثالي في Lighthouse، وتصميم متجاوب، وسمات داكنة وفاتحة، وشِفرات قصيرة مخصصة، والعديد من المميزات الأخرى.
> ملاحظة: هذه الصفحة هي عرض توضيحي لدعم اللغة العربية في تابي. للحصول على التوثيق الكامل، يرجى الرجوع إلى [النسخة الإنجليزية](@/_index.md).

View file

@ -9,7 +9,7 @@ max_posts = 4
projects_path = "projects/_index.ca.md"
max_projects = 3
show_projects_first = false
social_media_card = "social_cards/ca.jpg"
social_media_card = "ca.jpg"
+++
tabi és un tema de [Zola](https://www.getzola.org) ràpid, lleuger i modern. Té com a objectiu ser una pàgina personal i llar d'entrades de blog. Compta amb una puntuació perfecta de Lighthouse, disseny responsive, tema fosc i clar, shortcodes personalitzats i molt més.
tabi és un tema accessible per a Zola amb [cerca](@/blog/mastering-tabi-settings/index.ca.md#cerca), [suport multilingüe](@/blog/faq-languages/index.ca.md), [JavaScript opcional](@/blog/javascript/index.ca.md), una puntuació perfecta a Lighthouse i documentació exhaustiva. Dissenyat per a llocs web i blogs personals.

View file

@ -9,7 +9,7 @@ max_posts = 4
projects_path = "projects/_index.es.md"
max_projects = 3
show_projects_first = false
social_media_card = "social_cards/es.jpg"
social_media_card = "es.jpg"
+++
tabi es un tema de [Zola](https://www.getzola.org) rápido, ligero y moderno. Su objetivo es ser una página personal y hogar para publicaciones de blogs. Cuenta con una puntuación perfecta en Lighthouse, diseño responsive, tema oscuro y claro, shortcodes personalizados y mucho más.
tabi es un tema accesible para [Zola](https://www.getzola.org) con [búsqueda](@/blog/mastering-tabi-settings/index.es.md#busqueda), [soporte multilingüe](@/blog/faq-languages/index.es.md), [JavaScript opcional](@/blog/javascript/index.es.md), una puntuación perfecta en Lighthouse y documentación exhaustiva. Diseñado para sitios web y blogs personales.

View file

@ -9,7 +9,7 @@ max_posts = 4
projects_path = "projects/_index.md"
max_projects = 3
show_projects_first = false
social_media_card = "social_cards/index.jpg"
social_media_card = "index.jpg"
+++
tabi is a fast, lightweight, and modern [Zola](https://www.getzola.org) theme. It aims to be a personal page and home to blog posts. It features a perfect Lighthouse score, responsive design, dark and light themes, custom shortcodes, and much more.
tabi is an accessible [Zola](https://www.getzola.org) theme with [search](@/blog/mastering-tabi-settings/index.md#search), [multi-language support](@/blog/faq-languages/index.md), [optional JavaScript](@/blog/javascript/index.md), a perfect Lighthouse score, and comprehensive documentation. Crafted for personal websites and blogs.

BIN
content/ar.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View file

@ -0,0 +1,4 @@
+++
title = "الأرشيف"
template = "archive.html"
+++

View file

@ -3,5 +3,5 @@ title = "Arxiu"
template = "archive.html"
[extra]
social_media_card = "archive/social_cards/ca_archive.jpg"
social_media_card = "ca_archive.jpg"
+++

View file

@ -3,5 +3,5 @@ title = "Archivo"
template = "archive.html"
[extra]
social_media_card = "archive/social_cards/es_archive.jpg"
social_media_card = "es_archive.jpg"
+++

View file

@ -3,5 +3,5 @@ title = "Archive"
template = "archive.html"
[extra]
social_media_card = "archive/social_cards/archive.jpg"
social_media_card = "archive.jpg"
+++

View file

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Before After
Before After

10
content/blog/_index.ar.md Normal file
View file

@ -0,0 +1,10 @@
+++
paginate_by = 5
title = "التدوينات"
sort_by = "date"
template = "section.html"
insert_anchor_links = "right"
[extra]
show_previous_next_article_links = true
+++

View file

@ -5,6 +5,6 @@ sort_by = "date"
insert_anchor_links = "left"
[extra]
social_media_card = "blog/social_cards/ca_blog.jpg"
social_media_card = "ca_blog.jpg"
show_previous_next_article_links = true
+++

View file

@ -5,6 +5,6 @@ sort_by = "date"
insert_anchor_links = "left"
[extra]
social_media_card = "blog/social_cards/es_blog.jpg"
social_media_card = "es_blog.jpg"
show_previous_next_article_links = true
+++

View file

@ -5,6 +5,6 @@ sort_by = "date"
insert_anchor_links = "left"
[extra]
social_media_card = "blog/social_cards/blog.jpg"
social_media_card = "blog.jpg"
show_previous_next_article_links = true
+++

View file

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Before After
Before After

View file

@ -1,7 +1,7 @@
+++
title = "Optimitza la càrrega amb un subconjunt de font personalitzat"
date = 2023-04-29
updated = 2023-07-08
updated = 2025-01-12
description = "Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris."
[taxonomies]
@ -21,7 +21,11 @@ Per solucionar això, tabi carrega un subconjunt de glifs per a l'encapçalament
Per defecte, tabi inclou fitxers de subconjunts per a caràcters en anglès i espanyol (amb alguns símbols). Aquests fitxers es carreguen quan la pàgina o el lloc web de Zola està en aquest idioma.
Per a una optimització addicional, pots crear un subconjunt de fonts personalitzat que només inclogui els caràcters utilitzats en el teu encapçalament.
{% admonition(type="tip") %}
Si estàs fent servir una font personalitzada, pots crear el teu propi subconjunt (segueix llegint) o desactivar completament els subconjunts predeterminats amb `enable_subset = false` a `config.toml`.
{% end %}
Per a una optimització addicional, a continuació t'expliquem com crear un subconjunt de fonts personalitzat que només inclogui els caràcters utilitzats en el teu encapçalament.
## Requisits

View file

@ -1,7 +1,7 @@
+++
title = "Optimiza la carga con un subconjunto de fuente personalizado"
date = 2023-04-29
updated = 2023-07-08
updated = 2025-01-12
description = "Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios."
[taxonomies]
@ -21,7 +21,11 @@ Para solucionar esto, tabi carga un subconjunto de glifos para el encabezado. Da
Por defecto, tabi incluye archivos de subconjuntos para caracteres en inglés y español (con algunos símbolos). Estos archivos se cargan cuando la página o el sitio de Zola está en ese idioma.
Para una optimización adicional, puedes crear un subconjunto de fuentes personalizado que solo incluya los caracteres utilizados en tu encabezado.
{% admonition(type="tip") %}
Si estás usando una fuente personalizada, puedes crear tu propio subconjunto (ver más abajo) o desactivar completamente los subconjuntos predeterminados con `enable_subset = false` en tu `config.toml`.
{% end %}
Para una optimización adicional, a continuación verás cómo crear un subconjunto de fuentes personalizado que solo incluya los caracteres utilizados en tu encabezado.
## Requisitos

View file

@ -1,7 +1,7 @@
+++
title = "Optimise loading times with a custom font subset"
date = 2023-04-29
updated = 2023-07-08
updated = 2025-01-12
description = "Learn how to create a custom subset that only includes the necessary glyphs."
[taxonomies]
@ -21,7 +21,11 @@ To fix this, tabi loads a subset of glyphs for the header. Since this (slightly)
By default, there are subset files for English and Spanish characters (with a few symbols). These files are loaded when the Zola page/site is set to that language.
For further optimisation, you can create a custom font subset that only includes the characters used in your header.
{% admonition(type="tip") %}
If you're using a custom font, either create your custom subset (see below) or disable the built-in subsets completely with `enable_subset = false` in your `config.toml`.
{% end %}
Here's how you can create a custom font subset that only includes the characters used in your header, for maximum efficiency.
## Requirements

View file

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Before After
Before After

View file

@ -1,7 +1,7 @@
+++
title = "Lost in Translation? Explora les capacitats multilingües de tabi"
date = 2023-09-12
updated = 2024-08-18
updated = 2025-09-14
description = "Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions."
[taxonomies]
@ -30,6 +30,7 @@ tabi admet les següents llengües:
- Coreà
- Espanyol
- Estonià
- Finès
- Francès
- Hindi
- Italià
@ -106,6 +107,19 @@ Per tant, si crees `i18n/ca.toml` al teu directori base, tabi llegirà les caden
Assegura't de copiar tot el fitxer per a aquest idioma primer, o el tema utilitzarà l'anglès per les claus que faltin.
## Com personalitzo els formats de data per a diferents idiomes?
Pots establir formats de data específics per idioma al teu `config.toml` utilitzant la matriu `date_formats`:
```toml
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y", archive = "%d de %b" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
```
Això permet que cada idioma mostri les dates segons les convencions locals. Per exemple, l'espanyol mostrarà «3 de febrero de 2024» mentre que l'alemany mostrarà «3. Februar 2024». Si no es defineix un format específic per a un idioma, tabi utilitzarà la configuració global `long_date_format`, `short_date_format` i `archive_date_format`.
## Què passa si falta una traducció o està incompleta?
Si una cadena no es troba en el fitxer d'idioma, tabi utilitzarà a la cadena predeterminada en anglès.
@ -133,3 +147,7 @@ Si ho vas fer, hauràs d'actualitzar manualment les traduccions. Pots fer-ho cop
## tabi tradueix el meu contingut?
No. tabi només tradueix les cadenes de text del tema. Hauràs de traduir el teu contingut tu mateix.
## Com puc mostrar el codi de l'idioma actual al commutador d'idioma?
Afegeix `show_selected_language_code_in_language_switcher = true` a la secció `[extra]` del teu `config.toml`.

View file

@ -1,7 +1,7 @@
+++
title = "¿Lost in Translation? Explora las capacidades multilingües de tabi"
date = 2023-09-12
updated = 2024-08-18
updated = 2025-09-14
description = "Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones."
[taxonomies]
@ -30,6 +30,7 @@ tabi admite los siguientes idiomas:
- Coreano
- Español
- Estonio
- Finlandés
- Francés
- Hindi
- Inglés
@ -106,6 +107,19 @@ Por lo tanto, si creas `i18n/en.toml` en tu directorio base, tabi leerá las cad
Asegúrate de copiar todo el archivo para ese idioma primero, o el tema usará el inglés para las claves faltantes.
## ¿Cómo personalizo los formatos de fecha para diferentes idiomas?
Puedes establecer formatos de fecha específicos por idioma en tu `config.toml` usando la matriz `date_formats`:
```toml
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y", archive = "%d de %b" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
```
Esto permite que cada idioma muestre las fechas según las convenciones locales. Por ejemplo, el español mostrará «3 de febrero de 2024» mientras que el alemán mostrará «3. Februar 2024». Si no se define un formato específico para un idioma, tabi usará la configuración global `long_date_format`, `short_date_format` y `archive_date_format`.
## ¿Qué pasa si falta una traducción o está incompleta?
Si una cadena no se encuentra en el archivo de idioma, tabi recurrirá a la cadena predeterminada en inglés.
@ -133,3 +147,7 @@ Si lo hiciste, tendrás que actualizar manualmente las traducciones. Puedes hace
## ¿tabi traduce el contenido de mi sitio?
No. tabi sólo traduce el tema. Los posts deberás traducirlos tú mismo.
## ¿Cómo puedo mostrar el código del idioma actual en el conmutador de idioma?
Añade `show_selected_language_code_in_language_switcher = true` en la sección `[extra]` de tu `config.toml`.

View file

@ -1,7 +1,7 @@
+++
title = "Lost in Translation? Not with tabi's Multilingual Capabilities"
date = 2023-09-12
updated = 2024-03-01
updated = 2025-09-14
description = "Master the art of serving a global audience through tabi's built-in multilingual features. Learn how to change the default language, add multilingual support, and contribute your own translations."
[taxonomies]
@ -29,6 +29,7 @@ tabi supports the following languages:
- Chinese (Traditional)
- English
- Estonian
- Finnish
- French
- German
- Hindi
@ -107,6 +108,19 @@ So if you create `i18n/en.toml` in your base directory, tabi will read the stri
Make sure to copy the entire file for that language first, or the theme will fall back to the default English strings.
## How do I customize date formats for different languages?
You can set language-specific date formats in your `config.toml` using the `date_formats` array:
```toml
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y", archive = "%d de %b" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
```
This allows each language to display dates according to local conventions. For example, Spanish will show "3 de febrero de 2024" while German will show "3. Februar 2024". If no language-specific format is defined, tabi will use the global `long_date_format`, `short_date_format` and `archive_date_format` settings.
## What happens if a translation is missing or incomplete?
If a string is not found in the language file, tabi will fall back to the default English string.
@ -134,3 +148,7 @@ If you did, you will need to manually update the translations. You can do this b
## Does tabi translate my content?
No. tabi only translates the theme's text strings. You will need to translate your content yourself.
# How to show current language code on the language switcher?
Add `show_selected_language_code_in_language_switcher = true` in your config extras.

View file

@ -1,7 +1,7 @@
+++
title = "Sense JavaScript obligatori"
date = 2023-01-06
updated = 2024-08-28
updated = 2025-02-21
description = "JavaScript només s'utilitza quan HTML i CSS no són suficients."
[taxonomies]
@ -25,10 +25,11 @@ Aquest tema no requereix JavaScript obligatori. Opcionalment, pot carregar una q
Les següents opcions es poden especificar per a publicacions, seccions i globalment, seguint la jerarquia de `pàgina > secció > config.toml`:
- [**Suport de KaTeX**](@/blog/markdown/index.ca.md#katex). Habilitat configurant `katex = true` (274 KB).
- [**Suport de KaTeX**](@/blog/markdown/index.ca.md#katex). Habilitat configurant `katex = true` (274 KB). Per renderitzar fórmules sense JS, prova [MathML](https://developer.mozilla.org/docs/Web/MathML/).
- [**Diagrames de Mermaid**](@/blog/shortcodes/index.ca.md#diagrames-de-mermaid). Habilitat configurant `mermaid = true` (~2.5 MB).
- [**Còpia de blocs de codi amb un sol clic**](@/blog/markdown/index.ca.md#bloc-de-codi). Habilitada configurant `copy_button = true`. (~700 bytes)
- [**Mostrar ruta/URL a blocs de codi**](@/blog/shortcodes/index.ca.md#mostrar-ruta-o-url). S'activa configurant `add_src_to_code_block = true`. (~400 bytes)
- [**Noms de blocs de codi clicables**](@/blog/shortcodes/index.ca.md#mostrar-ruta-o-url). S'activa configurant `code_block_name_links = true`. (~400 bytes)
- [**Filtratge per etiquetes** per a graelles de targetes](@/blog/mastering-tabi-settings/index.ca.md#filtrar-projectes) (p. ex. [projectes](@/projects/_index.ca.md)) (~2KB). S'habilita configurant `enable_cards_tag_filtering = true`.
Per especificar aquestes opcions:
@ -42,4 +43,6 @@ Per especificar aquestes opcions:
A part d'això, és un tema ràpid amb HTML i CSS que funciona sense JavaScript. Just com hauria de ser (la majoria de) la web :-)
---
[^1]: Per codificar el teu correu en base64 pots utilitzar [eines en línia](https://www.base64encode.org/) o, al terminal, executa: `printf 'mail@example.com' | base64`.

View file

@ -1,7 +1,7 @@
+++
title = "Sin JavaScript obligatorio"
date = 2023-01-06
updated = 2024-08-28
updated = 2025-02-21
description = "JavaScript solo se utiliza cuando HTML y CSS no son suficientes."
[taxonomies]
@ -25,10 +25,11 @@ Este tema no requiere JavaScript de manera obligatoria. Opcionalmente, puede car
Las siguientes opciones pueden especificarse para publicaciones, secciones y a nivel global, siguiendo la jerarquía de `página > sección > config.toml`:
- [**Soporte de KaTeX**](@/blog/markdown/index.es.md#katex). Habilitado al configurar `katex = true` (274 KB).
- [**Soporte de KaTeX**](@/blog/markdown/index.es.md#katex). Habilitado al configurar `katex = true` (274 KB). Para renderizar fórmulas sin JS, prueba [MathML](https://developer.mozilla.org/docs/Web/MathML/).
- [**Diagramas de Mermaid**](@/blog/shortcodes/index.es.md#diagramas-de-mermaid). Habilitado al configurar `mermaid = true` (~2.5 MB).
- [**Copia de bloques de código con un solo clic**](@/blog/markdown/index.es.md#bloque-de-codigo). Habilitado al configurar `copy_button = true` (~700 bytes).
- [**Mostrar ruta/URL en bloques de código**](@/blog/shortcodes/index.es.md#mostrar-ruta-o-url). Se activa configurando `add_src_to_code_block = true`. (~400 bytes)
- [**Nombres de bloques de código clicables**](@/blog/shortcodes/index.es.md#mostrar-ruta-o-url). Se activa configurando `code_block_name_links = true`. (~400 bytes)
- [**Filtraje por etiquetas** para cuadrículas de tarjetas](@/blog/mastering-tabi-settings/index.es.md#filtrar-proyectos) (p. ej. [proyectos](@/projects/_index.es.md)) (~2KB). Habilitado al configurar `enable_cards_tag_filtering = true`.
Para especificar estas opciones:
@ -42,4 +43,6 @@ Para especificar estas opciones:
Aparte de eso, es un tema rápido con HTML y CSS que funciona con JavaScript deshabilitado. Justo como debería ser (la mayoría de) la web :-)
---
[^1]: Para codificar tu correo electrónico en base64 puedes usar [herramientas en línea](https://www.base64encode.org/) o, en tu terminal, ejecutar: `printf 'mail@example.com' | base64`.

View file

@ -1,7 +1,7 @@
+++
title = "No mandatory JavaScript"
date = 2023-01-06
updated = 2024-08-28
updated = 2025-02-21
description = "JavaScript is only used when HTML and CSS aren't enough."
[taxonomies]
@ -25,10 +25,11 @@ This theme has no mandatory JavaScript. Optionally, it can load a minimal amount
The following settings can be specified for posts, sections and globally, following the hierarchy of `page > section > config.toml`:
- [**KaTeX support**](@/blog/markdown/index.md#katex). Enabled by setting `katex = true` (274 KB).
- [**KaTeX support**](@/blog/markdown/index.md#katex). Enabled by setting `katex = true` (274 KB). To render math without JS, check out [MathML](https://developer.mozilla.org/docs/Web/MathML/).
- [**Mermaid diagrams**](@/blog/shortcodes/index.md#mermaid-diagrams). Enabled by setting `mermaid = true` (~2.5 MB).
- [**One-click copy of code blocks**](@/blog/markdown/index.md#code-block). Enabled by setting `copy_button = true`. (~700 bytes)
- [**Showing source (path or URL) in code blocks**](@/blog/shortcodes/index.md#show-source-or-path). Enabled by setting `add_src_to_code_block = true`. (~300 bytes)
- [**Clickable code block names**](@/blog/shortcodes/index.md#show-source-or-path). Enabled by setting `code_block_name_links = true`. (~300 bytes)
- [**Tag filtering** for card grids](@/blog/mastering-tabi-settings/index.md#filtering-projects) (e.g. [projects](@/projects/_index.md)) (~2KB). Enabled by setting `enable_cards_tag_filtering = true`.
To specify these settings:
@ -42,4 +43,6 @@ To specify these settings:
Other than that, it's a fast theme with HTML and CSS which works with JavaScript disabled. Just the way (most of) the web should be :-)
---
[^1]: To encode your email in base64 you can use [online tools](https://www.base64encode.org/) or, on your terminal, run: `printf 'mail@example.com' | base64`.

View file

@ -0,0 +1,93 @@
+++
title = "أمثلة على ماركداون"
date = 2023-01-31
updated = 2023-09-01
description = "تعرض هذه التدوينة بعض الأمثلة على تنسيق ماركداون، بما في ذلك الجداول، والشِفرات البرمجية والوسوم، والاقتباسات، والهوامش."
[taxonomies]
tags = ["ماركداون", "توضيحي"]
[extra]
katex = true
+++
{% admonition(type="note", title="ملاحظة عن الاتجاه", icon="info") %}
يدعم تابي الكتابة من اليمين إلى اليسار (RTL) بشكل كامل، مما يجعله مثالياً للغة العربية.
الشفرات البرمجية والمعادلات الرياضية تبقى من اليسار إلى اليمين كما هو متوقع.
{% end %}
## الرياضيات مع $\KaTeX$
{{ aside(text="تأتي كلمة *ماركداون* من الإنجليزية *Markdown*، وهي لغة ترميز بسيطة صممها جون غروبر وآرون سوارتز في عام 2004.") }}
[$\KaTeX$](https://katex.org/) هي مكتبة سريعة وسهلة الاستخدام تمكن من عرض الرموز الرياضية باستخدام صيغة LaTeX.
يمكنك استخدام $\KaTeX$ **ضمن السطر** عن طريق وضع التعبير بين `$` أو بين `\\(` و `\\)`.
على سبيل المثال، `$ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $` سيظهر هكذا: $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $
لعرض التعبير **في سطر منفصل ومتوسط**، ضعه بين `$$` أو بين `\\[` و `\\]`.
على سبيل المثال، `\\[ r = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2}\sqrt{\sum_{i=1}^{n}(y_i - \bar{y})^2}} \\]` سيظهر هكذا: \\[ r = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2}\sqrt{\sum_{i=1}^{n}(y_i - \bar{y})^2}} \\]
لتفعيل $\KaTeX$ لتدوينة أو قسم كامل، أضف `katex = true` داخل قسم `[extra]` في المقدمة. على سبيل المثال:
```toml,hl_lines=5-6
title = "تجربة KaTeX"
date = 2002-11-30
[extra]
katex = true
```
يمكنك أيضاً تفعيله بشكل عام عن طريق تعيين `katex = true` في قسم `[extra]` في ملف `config.toml` الخاص بك.
لتحسين الأداء والأمان، يتم استضافة ملفات جافا سكريبت و CSS والخطوط الخاصة بـ $\KaTeX$ محلياً.
**ملاحظة**: بعد تفعيل $\KaTeX$، إذا أردت استخدام \$ بدون عرض تعبير رياضي، استخدم شرطة مائلة للخلف قبلها: `\$`.
## جدول
هذا مثال على جدول[^1]. تتغير ألوانه حسب سمة التدوينة.
| الرمز | العنصر | العدد الذري |
|--------|----------|--------------|
| H | هيدروجين| 1 |
| C | كربون | 6 |
| Fe | حديد | 26 |
| Au | ذهب | 79 |
## الشِفرات البرمجية
```rust
fn main() {
println!("مرحباً يا عالم") -> ();
}
```
### من اليمين إلى اليسار
{% force_text_direction(direction="rtl") %}
```
نص قل_مرحباً(نص الاسم) {
أرجع تنسيق("مرحباً {الاسم}")؛
}
```
{% end %}
## سطر برمجي
في Rust، تعلن عن متغير متغير باستخدام `let mut x = 5`، بينما في Python، تستخدم ببساطة `x = 5`. وبالمثل، لطباعة قيمة في Rust، تستخدم `println!("القيمة: {}", x)`، ولكن في Python، الأمر بسيط مثل `print(f"القيمة: {x}")`
وفي لغة البرمجة العربية هو `مهنة = "صائد فئران"`
## اقتباس
> وابِطُكَ قابِضِ الأَرواحِ يَرمي ... بِسَهمِ المَوتِ مِن تَحتِ الثِيابِ
>
> شَرابُكَ في السَرابِ إِذا عَطِشنا ... وَخُبزُكَ عِندَ مُنقَطِعِ التُرابِ
>
> — أبو الشمقمق، العصر العباسي
[^1]: وهذا مثال على الهامش!

View file

@ -1,7 +1,7 @@
+++
title = "Exemples de Markdown"
date = 2023-01-31
updated = 2023-09-01
updated = 2025-02-21
description = "Aquesta publicació mostra alguns exemples de format en Markdown, incloent-hi una taula, blocs de codi i etiquetes, citacions, taules i notes a peu de pàgina."
[taxonomies]
@ -59,6 +59,42 @@ fn main() {
}
```
### Amb numeració de línies
```rust,linenos
use std::collections::HashMap;
#[derive(Debug)]
struct TwinPeaksCharacter {
name: String,
coffee_rating: f32,
pie_preference: String,
}
fn main() {
let mut black_lodge = HashMap::new();
black_lodge.insert("agent", TwinPeaksCharacter {
name: String::from("Dale Cooper"),
coffee_rating: 9999.99,
pie_preference: String::from("Damn Fine Cherry"),
});
black_lodge.insert("giant", TwinPeaksCharacter {
name: String::from("The Fireman"),
coffee_rating: 42.424242,
pie_preference: String::from("Garmonbozia"),
});
// Calculate total appreciation of damn fine coffee
let total_coffee: f32 = black_lodge.values()
.map(|character| character.coffee_rating)
.sum();
println!("☕ Total coffee appreciation: {:.2} cups", total_coffee);
}
```
## Etiquetes de codi
A Rust, declares una variable mutable amb `let mut x = 5;`, mentre que a Python, simplement fas `x = 5`. De manera similar, per imprimir un valor a Rust, utilitzaries `println!("Valor: {}", x);`, però a Python, és tan senzill com `print(f"Valor: {x}")`.
@ -69,4 +105,6 @@ A Rust, declares una variable mutable amb `let mut x = 5;`, mentre que a Python,
>
> — Mercè Rodoreda, La plaça del Diamant
---
[^1]: I aquí tens un exemple de nota a peu de pàgina!

View file

@ -1,7 +1,7 @@
+++
title = "Ejemplos de Markdown"
date = 2023-01-31
updated = 2023-09-01
updated = 2025-02-21
description = "Esta publicación muestra algunos ejemplos de formato Markdown, incluyendo una tabla, bloques de código y etiquetas, citas, tablas y notas al pie de página."
[taxonomies]
@ -59,6 +59,42 @@ fn main() {
}
```
### Con números de línea
```rust,linenos
use std::collections::HashMap;
#[derive(Debug)]
struct TwinPeaksCharacter {
name: String,
coffee_rating: f32,
pie_preference: String,
}
fn main() {
let mut black_lodge = HashMap::new();
black_lodge.insert("agent", TwinPeaksCharacter {
name: String::from("Dale Cooper"),
coffee_rating: 9999.99,
pie_preference: String::from("Damn Fine Cherry"),
});
black_lodge.insert("giant", TwinPeaksCharacter {
name: String::from("The Fireman"),
coffee_rating: 42.424242,
pie_preference: String::from("Garmonbozia"),
});
// Calculate total appreciation of damn fine coffee
let total_coffee: f32 = black_lodge.values()
.map(|character| character.coffee_rating)
.sum();
println!("☕ Total coffee appreciation: {:.2} cups", total_coffee);
}
```
## Etiquetas de código
En Rust, declaras una variable mutable con `let mut x = 5;`, mientras que en Python, simplemente usas `x = 5`. De manera similar, para imprimir un valor en Rust, utilizarías `println!("Valor: {}", x);`, pero en Python, es tan sencillo como `print(f"Valor: {x}")`.
@ -69,4 +105,6 @@ En Rust, declaras una variable mutable con `let mut x = 5;`, mientras que en Pyt
>
> — Miguel de Unamuno, Niebla
---
[^1]: ¡Y aquí tienes un ejemplo de una nota al pie de página!

View file

@ -1,7 +1,7 @@
+++
title = "Markdown examples"
date = 2023-01-31
updated = 2023-09-01
updated = 2025-02-21
description = "This post showcases some examples of Markdown formatting, including a table, code blocks and tags, quotes, tables, and footnotes."
[taxonomies]
@ -59,6 +59,42 @@ fn main() {
}
```
### With line numbers
```rust,linenos
use std::collections::HashMap;
#[derive(Debug)]
struct TwinPeaksCharacter {
name: String,
coffee_rating: f32,
pie_preference: String,
}
fn main() {
let mut black_lodge = HashMap::new();
black_lodge.insert("agent", TwinPeaksCharacter {
name: String::from("Dale Cooper"),
coffee_rating: 9999.99,
pie_preference: String::from("Damn Fine Cherry"),
});
black_lodge.insert("giant", TwinPeaksCharacter {
name: String::from("The Fireman"),
coffee_rating: 42.424242,
pie_preference: String::from("Garmonbozia"),
});
// Calculate total appreciation of damn fine coffee
let total_coffee: f32 = black_lodge.values()
.map(|character| character.coffee_rating)
.sum();
println!("☕ Total coffee appreciation: {:.2} cups", total_coffee);
}
```
## Code tags
In Rust, you declare a mutable variable with `let mut x = 5;`, whereas in Python, you simply use `x = 5`. Similarly, to print a value in Rust, you would use `println!("Value: {}", x);`, but in Python, it's as straightforward as `print(f"Value: {x}")`.
@ -69,4 +105,6 @@ In Rust, you declare a mutable variable with `let mut x = 5;`, whereas in Python
>
> — Charlie Kaufman, Synecdoche, New York
---
[^1]: And here's an example of a footnote!

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,7 +1,7 @@
+++
title = "Domina la configuració de tabi: guia completa"
date = 2023-09-18
updated = 2024-11-14
updated = 2025-08-07
description = "Descobreix les múltiples maneres en què pots personalitzar tabi."
[taxonomies]
@ -172,13 +172,16 @@ pinned = true
{{ admonition(type="warning", text='Quan s'utilitza la paginació (`paginate_by`), les entrades fixades poden aparèixer dues vegades: una vegada a la part superior de la primera pàgina, i una altra en la seva posició cronològica normal en pàgines posteriors.') }}
##### Mostrar la data dels articles al llistat
Per defecte, quan es llisten els articles, es mostra la data de creació. Pots configurar quina(es) data(es) mostrar utilitzant l'opció `post_listing_date`. Configuracions disponibles:
- `date`: Mostra només la data de publicació original de l'article (opció per defecte).
- `updated`: Mostra només la data de l'última actualització de l'article. Si no hi ha data d'actualització, es mostra la data de publicació original.
- `both`: Mostra tant la data de publicació original com la data de l'última actualització.
{% admonition(type="tip") %}
Aquesta configuració segueix la jerarquia: pots establir un valor global a `config.toml` o canviar-lo per a seccions específiques al seu arxiu `_index.md`. En ambdós casos, afegeix-lo a la secció `[extra]`.
{% end %}
#### Llistat de Projectes
Pots mostrar una selecció de projectes a la teva pàgina principal. Per fer això, primer necessitaràs configurar el directori `projects`.
@ -220,7 +223,7 @@ Les skins («pells») de tabi canvien el color principal del lloc web. Pots conf
{{ image_toggler(default_src="blog/customise-tabi/skins/lavender_light.webp", toggled_src="blog/customise-tabi/skins/lavender_dark.webp", default_alt="pell lavender en mode clar", toggled_alt="pell lavender en mode fosc", full_width=true) }}
Explora les skins disponibles i aprèn com crear la teva pròpia consultant [la documentació](/ca/blog/customise-tabi/#skins).
Explora les skins disponibles i aprèn com crear la teva pròpia consultant [la documentació](@/blog/customise-tabi/index.ca.md#skins).
### Font sans serif (pal sec)
@ -234,6 +237,25 @@ Fes clic a la imatge a continuació per comparar les fonts:
{{ image_toggler(default_src="blog/mastering-tabi-settings/img/serif.webp", toggled_src="blog/mastering-tabi-settings/img/sans-serif.webp", default_alt="Font serif", toggled_alt="Font sans-serif", full_width=true) }}
### Indicador d'enllaços externs
| Pàgina | Secció | `config.toml` | Segueix Jerarquia | Requereix JavaScript |
|:------:|:------:|:-------------:|:-----------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
{{ admonition(type="info", text="Requereix Zola 0.20.0 o posterior.") }}
Si vols afegir una icona als enllaços externs, configura la secció `[markdown]` (no `[extra]`) al teu `config.toml`:
```toml
[markdown]
external_links_class = "external"
```
Això afegirà una petita icona al costat dels enllaços externs:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/external_link_light.webp", dark_src="blog/mastering-tabi-settings/img/external_link_dark.webp", alt="Icona d'enllaç extern", full_width=true) }}
### Estils CSS personalitzats
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
@ -285,11 +307,11 @@ Si configures `tag_sorting = "frequency"`, s'ordenaran segons el nombre de publi
---
### Sèries
## Sèries
Per a una explicació detallada, consulta la [documentació de sèries](@/blog/series/index.ca.md).
#### Enllaç per saltar a les publicacions
### Enllaç per saltar a les publicacions
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
|:------:|:-------:|:-------------:|:------------------:|:-------------------:|
@ -301,7 +323,7 @@ Per defecte, apareix automàticament un enllaç "Salta a les publicacions" al co
Estableix `show_jump_to_posts = true` per forçar l'activació de la funció i `show_jump_to_posts = false` per desactivar-la.
#### Indexació de pàgines de sèries
### Indexació de pàgines de sèries
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
|:------:|:-------:|:-------------:|:------------------:|:-------------------:|
@ -371,7 +393,7 @@ quick_navigation_buttons = true
- `show_reading_time = false` amaga el temps estimat de lectura.
- `quick_navigation_buttons = true` mostra els botons de navegació ràpida.
Al costat del fitxer `_index.md`, pots crear un fitxer per a cada projecte. Per exemple, aquest és el bloc de metadades per a la pàgina del projecte [tabi](/ca/projects/tabi/):
Al costat del fitxer `_index.md`, pots crear un fitxer per a cada projecte. Per exemple, aquest és el bloc de metadades per a la pàgina del projecte [tabi](@/projects/tabi/index.ca.md):
```toml
title = "tabi"
@ -391,6 +413,33 @@ Quan un usuari faci clic a la imatge o al títol d'un projecte, serà portat a l
La pàgina del projecte individual es renderitza amb la plantilla predeterminada, tret que estableixis una altra, per exemple, `template = "info-page.html"`.
#### Filtrar projectes
Si afegeixes etiquetes als teus projectes, veuràs un filtre d'etiquetes:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/projects_tag_filter_light.webp", dark_src="blog/mastering-tabi-settings/img/projects_tag_filter_dark.webp", alt="Pàgina de projectes amb filtre d'etiquetes", full_width=true) }}
El sistema de filtratge d'etiquetes utilitza millora progressiva:
- Sense JavaScript: Les etiquetes enllacen directament a pàgines d'etiquetes dedicades (per exemple, `/tags/nom-de-l-etiqueta`).
- Amb JavaScript: Filtratge instantani, sincronització d'URL (#nom-etiqueta) i navegació amb el teclat.
Per desactivar aquesta funció, estableix `enable_cards_tag_filtering = false` a la secció `[extra]` del fitxer `projects/_index.md` o a `config.toml`.
{% admonition(type="tip") %}
Per filtrar projectes per etiquetes, necessites establir etiquetes a la front matter de cada projecte. Per exemple:
```toml
title = "nom del projecte"
weight = 40
[taxonomies]
tags = ["etiqueta", "etiqueta 2", "tercera etiqueta"]
```
{% end %}
### Arxiu
Afegir una pàgina d'arxiu és similar a afegir una pàgina de projectes. Pots crear un directori a `content/archive/`. Allà, pots crear un fitxer `_index.md` amb el següent encapçalament:
@ -411,10 +460,14 @@ Per defecte, l'arxiu llistarà les publicacions situades a `blog/`. Per personal
section_path = ["blog/", "notes/", "camí-tres/"]
```
**Nota**:
L'arxiu mostra les publicacions en ordre cronològic invers (les més recents primer). Pots invertir aquest ordre establint `archive_reverse = true` a la secció `[extra]`:
- La pàgina d'arxiu només llistarà publicacions amb data.
- L'ordre de les publicacions ve determinada per la variable `sort_by` de les seccions arxivades. Aquesta demo utilitza `sort_by = "date"` en `blog/_index.md`.
```toml
[extra]
archive_reverse = true # mostra les publicacions més antigues primer
```
{{ admonition(type="note", title="nota" text="La pàgina d'arxiu només llistarà publicacions que tinguin data al seu encapçalament.") }}
### Etiquetes
@ -463,6 +516,17 @@ path = "about"
Fixa't com s'estableix `path = "about"`. Zola situarà la pàgina a `$base_url/about/`. Si vols que la pàgina estigui disponible a `/contacte/`, hauries d'establir `path = "contacte"`.
La plantilla `info-page.html` també es pot utilitzar per crear landing pages a la ruta arrel (`"/"`). Per fer-ho, l'arxiu `content/_index.md` hauria de ser així:
```markdown
+++
title = "Títol de la pàgina"
template = "info-page.html"
+++
Contingut amb Markdown.
```
---
## SEO
@ -549,7 +613,9 @@ fediverse_creator = { handle = "username", domain = "example.com" }
|:------:|:------:|:-------------:|:---------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
La barra de navegació és la franja a la part superior de la pàgina que conté el títol del lloc i el menú de navegació. Pots personalitzar els elements que apareixen configurant `menu` en `config.toml`. Per exemple:
La barra de navegació és la franja a la part superior de la pàgina que conté el títol del lloc i el menú de navegació. Pots personalitzar els elements que apareixen configurant `menu` en `config.toml`.
Soporta links relatius per a pàgines internes i links absoluts per a enllaços externs. Per exemple:
```toml
menu = [
@ -558,6 +624,7 @@ menu = [
{ name = "etiquetes", url = "tags", trailing_slash = true },
{ name = "projectes", url = "projects", trailing_slash = true },
{ name = "sobre nosaltres", url = "about", trailing_slash = true },
{ name = "github", url = "https://github.com/welpo/tabi", trailing_slash = false },
]
```
@ -630,13 +697,13 @@ Establir `copy_button = true` afegirà un petit botó de copiar a la part superi
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/copy_button_on_code_blocks_light.webp", dark_src="blog/mastering-tabi-settings/img/copy_button_on_code_blocks_dark.webp", alt="Botó de copiar en blocs de codi", full_width=true) }}
### Mostrar ruta/URL en blocs de codi
### Nom del bloc de codi clicable
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
|:------:|:-------:|:-------------:|:---------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ✅ |
Estableix `add_src_to_code_block = true` per habilitar l'ús del [shortcode `add_src_to_code_block`](@/blog/shortcodes/index.ca.md#mostrar-ruta-o-url).
En establir `code_block_name_links = true` s'habiliten els enllaços clicables als noms dels blocs de codi. Consulta la [documentació](@/blog/shortcodes/index.ca.md#mostrar-ruta-o-url) per veure exemples i ús.
### Forçar blocs de codi d'esquerra a dreta
@ -672,10 +739,12 @@ Consulta la [documentació de Mermaid](@/blog/shortcodes/index.ca.md#diagrames-d
|:------:|:------:|:-------------:|:------------------:|:--------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
Les tipus de lletra personalitzades causen parpalleig del text en Firefox. Per resoldre això, tabi carrega un subconjunt de glifs per a la capçalera. Donat que això (lleugerament) augmenta el temps de càrrega inicial, és una bona idea intentar minimitzar la mida d'aquest subconjunt.
Les tipus de lletra personalitzades causen parpalleig del text en Firefox. Per resoldre això, tabi carrega un subconjunt de glifs per a la capçalera. Donat que això (lleugerament) augmenta el temps de càrrega inicial, és una bona idea intentar minimitzar la mida d'aquest subconjunt, o desactivar-lo completament si no estàs fent servir un tipus de lletra personalitzat al teu tema.
Pots crear un subconjunt personalitzat adaptat al teu lloc, guardar-lo com a `static/custom_subset.css`, i fer que es carregui amb `custom_subset = true`.
Per desactivar el subconjunt, utilitza `enable_subset = false`.
Per obtenir més informació, incloent instruccions sobre com crear un subconjunt personalitzat, consulta la [documentació](@/blog/custom-font-subset/index.ca.md).
### Contingut complet al feed
@ -692,7 +761,10 @@ Per defecte, el feed Atom només conté el resum o descripció de les teves publ
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ❌ |
Pots amagar pàgines específiques o seccions senceres del feed amb `hide_from_feed = true`.
Pots controlar com apareix el contingut als feeds utilitzant dues configuracions:
- `hide_from_feed = true`: Amaga el contingut de tots els feeds (feed principal, feeds de secció i feeds d'etiquetes)
- `hide_from_main_feed = true`: Amaga el contingut només del feed principal mentre el manté visible als feeds de secció i d'etiquetes
### Comentaris {#afegir-comentaris}
@ -708,6 +780,35 @@ Si has activat un sistema de forma global i vols desactivar-lo per a una pàgina
Llegeix la [documentació](@/blog/comments/index.ca.md) per a més informació sobre els sistemes disponibles i la seva configuració.
### Botons d'iine {#iine}
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
|:------:|:------:|:-------------:|:--------------------:|:--------------------:|
| ✅ | ✅ | ✅ | ✅ | ❌ |
tabi permet botons d'[iine](https://iine.to/) per mostrar apreciació anònima pel teu contingut. Aquests botons centrats en la privadesa funcionen sense JavaScript i no rastegen usuaris.
Per activar els botons iine globalment:
```toml
[extra]
iine = true
```
Pots personalitzar la icona usada als botons (segueix la jerarquia):
```toml
[extra]
iine_icon = "thumbs_up" # Opcions: "heart", "thumbs_up", "upvote", o qualsevol emoji
```
Per a llocs multilingües, pots unificar els recomptes de likes entre versions en diferents idiomes del mateix contingut (configuració només de config; valor per defecte és `true`):
```toml
[extra]
iine_unified_languages = true # Els likes a /ca/blog/hello/ compten cap a /blog/hello/
```
### Anàlisi web
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
@ -730,6 +831,8 @@ Pots configurar-los en la secció `[extra.analytics]` del teu arxiu `config.toml
- Per a Umami: `"https://umami.example.com"`
- Per a Plausible: `"https://plausible.example.com"`
- `do_not_track`: (només per a Umami) opcional. Quan s'estableix com a `true`, es desactiva el seguiment per als usuaris els navegadors dels quals envien una capçalera "Do Not Track".
Un exemple de configuració per a GoatCounter no auto-allotjada seria:
```toml
@ -865,12 +968,25 @@ Per defecte, la data es mostra sota el títol de la publicació. Pots amagar-la
|:------:|:-------:|:-------------:|:---------------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
tabi té dos formats de data: `long_date_format` i `short_date_format`. El format curt s'utilitza a les metadades d'una publicació, mentre que el format llarg s'utilitza al llistar les publicacions (és a dir, a la [secció de blog](/ca/blog/) o a la [pàgina principal](/ca/)).
tabi té tres formats de data: `long_date_format`, `short_date_format` i `archive_data_format`. El format curt s'utilitza a les metadades d'una publicació, mentre que el format llarg s'utilitza al llistar les publicacions (és a dir, a la [secció de blog](/ca/blog/) o a la [pàgina principal](/ca/)). El format d'arxiu s'utilitza per mostrar el dia i el mes a la pàgina d'arxiu.
Per defecte és "6th July 2049" per a ambdós formats en anglès. Per a altres idiomes, el predeterminat és `"%d %B %Y"` per al format llarg i `"%-d %b %Y"` per al format curt.
Per defecte és "6th July 2049" per als formats curt i llarg en anglès. Per a altres idiomes, el predeterminat és `"%d %B %Y"` per al format llarg i `"%-d %b %Y"` per al format curt. El format d'arxiu predeterminat universal és `"%d %b"`.
A Zola, la sintaxi per al format de temps està inspirada en strftime. Una referència completa està disponible a la [documentació de chrono](https://docs.rs/chrono/0.4.31/chrono/format/strftime/index.html).
#### Formats de data per idioma
Pots personalitzar els formats de data per idiomes específics utilitzant la matriu `date_formats` a `config.toml`:
```toml
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y", archive = "%d de %b" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
```
Això permet que diferents idiomes utilitzin formats de data culturalment apropiats (per exemple, "6. Juli 2049" per a alemany VS "6 de julio de 2049" per a espanyol).
### Separador personalitzat
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
@ -933,6 +1049,68 @@ Aquesta opció està habilitada per defecte. Per desactivar-la per una pàgina,
Per a més informació, consulta la [pàgina de documentació de CSP](@/blog/security/index.ca.md).
---
## Indieweb
### Webmentions
| Pàgina | Secció | `config.toml` | Segueix jerarquia | Requereix JavaScript |
|:------:|:------:|:-------------:|:-----------------:|:--------------------:|
| ❓ | ❓ | ✅ | ❓ | ✅ |
Com es descriu en l'estàndard W3C recomanat, [Webmention](https://www.w3.org/TR/webmention/#abstract-p-1) és una manera senzilla de notificar qualsevol URL quan la menciones al teu lloc web. Des de la perspectiva del receptor, és una manera de sol·licitar notificacions quan altres llocs web la mencionen.
Per a llocs web estàtics, [webmention.io](https://webmention.io/) allotja un punt final de webmention que es pot utilitzar per rebre webmentions. Aquesta funcionalitat recupera les webmentions emmagatzemades a webmention.io i les mostra per a una pàgina. Hauràs de configurar un compte per al teu lloc web a webmention.io. Quan habilitis la funcionalitat de webmention, anunciarà el teu punt final de webmention.io i mostrarà les webmentions per a qualsevol pàgina.
Habilita les webmentions per al teu lloc web afegint el següent al teu fitxer `config.toml`.
```toml
[extra.webmentions]
enable = true
# Especifica el domini registrat amb webmention.io.
domain = "www.example.com"
```
❓: Per desactivar les webmentions per a una secció o pàgina específica, estableix `webmentions = false` a la secció `[extra]` del front matter d'aquesta secció o pàgina.
La secció de webmentions es veu així:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/webmention_light.webp", dark_src="blog/mastering-tabi-settings/img/webmention_dark.webp" alt="Captura de pantalla de webmentions mostrant republications, m'agrada, marcadors i comentaris", full_width=true) }}
### h-card representativa
| Pàgina | Secció | `config.toml` | Segueix la jerarquia | Requereix JavaScript |
| :--: | :-----: | :-----------: | :---------------: | :-----------------: |
| ❌ | ❌ | ✅ | ❌ | ❌ |
Per defecte, tabi afegeix una h-card representativa [h-card](https://microformats.org/wiki/h-card) **oculta** a la pàgina d'inici. Tot i que és invisible per als visitants, està disponible per als analitzadors de microformats. Pots comprovar la validesa de la targeta amb l'eina [Indiewebify.me](https://indiewebify.me/validate-h-card/).
Per desactivar l'h-card, estableix `enable = false` a la secció `[extra.hcard]` de `config.toml`.
L'h-card predeterminada inclou el teu nom, l'URL del lloc web i els enllaços a les xarxes socials.
Pots establir una imatge de perfil i una petita biografia amb els paràmetres `avatar` i `biography`.
Totes les altres [propietats h-card](https://microformats.org/wiki/h-card#Properties) es poden afegir llistant-les a la secció `[extra.hcard]` del fitxer de configuració. Simplement substitueix tots els caràcters `-` per `_`.
---
## Estenent elements HTML a tabi
Alguns elements HTML a tabi es poden estendre per admetre casos d'ús addicionals, com ara afegir JavaScript personalitzat per a comportaments a tot el lloc al final de l'etiqueta `<body>` o incloure contingut addicional al final de l'element `<head>` que no estigui suportat per altres configuracions de tabi.
Consulta la taula a continuació per veure els elements que es poden estendre:
| Element | Plantilla |
| :------: | :-------------------------------: |
| `<head>` | `templates/tabi/extend_head.html` |
| `<body>` | `templates/tabi/extend_body.html` |
No hi ha configuracions explícites que hagis d'establir per al teu lloc o pàgines. Simplement crea el fitxer de plantilla corresponent per al teu lloc, i tabi l'inclourà automàticament.
---
[^1]: Si estàs utilitzant un repositori Git remot, potser voldràs automatitzar el procés d'actualització del camp `updated`. Aquí tens una guia per a això: [Zola Git Hook: actualitzant les dates de les publicacions](https://osc.garden/ca/blog/zola-date-git-hook/).
[^2]: Per a codificar el teu correu electrònic en base64 pots utilitzar [eines en línia](https://www.base64encode.org/) o, al teu terminal, executar: `printf 'mail@example.com' | base64`

View file

@ -1,7 +1,7 @@
+++
title = "Domina la configuración de tabi: guía completa"
date = 2023-09-18
updated = 2024-11-14
updated = 2025-08-07
description = "Descubre las múltiples maneras en que puedes personalizar tabi."
[taxonomies]
@ -179,6 +179,10 @@ Por defecto, cuando se listan los artículos, se muestra la fecha de creación.
- `updated`: Muestra solo la fecha de la última actualización del artículo. Si no hay fecha de actualización, muestra la fecha de publicación original.
- `both`: Muestra tanto la fecha de publicación original como la fecha de la última actualización.
{% admonition(type="tip") %}
Esta configuración sigue la jerarquía: puedes establecer un valor global en `config.toml` o configurarlo para secciones específicas en su archivo `_index.md`. En ambos casos, añádelo a la sección `[extra]`.
{% end %}
#### Listado de proyectos
Puedes mostrar una selección de proyectos en tu página principal. Para hacer esto, primero necesitarás configurar el directorio `projects`.
@ -220,7 +224,7 @@ Las pieles de tabi cambian el color principal del sitio. Puedes configurar la pi
{{ image_toggler(default_src="blog/customise-tabi/skins/lavender_light.webp", toggled_src="blog/customise-tabi/skins/lavender_dark.webp", default_alt="piel lavender en modo claro", toggled_alt="piel lavender en modo oscuro", full_width=true) }}
Explora las pieles disponibles y aprende cómo crear la tuya propia consultando [la documentación](/es/blog/customise-tabi/#skins).
Explora las pieles disponibles y aprende cómo crear la tuya propia consultando [la documentación](@/blog/customise-tabi/index.es.md#skins).
### Fuente sans serif (paloseco)
@ -234,6 +238,25 @@ Haz clic en la imagen para comparar las fuentes:
{{ image_toggler(default_src="blog/mastering-tabi-settings/img/serif.webp", toggled_src="blog/mastering-tabi-settings/img/sans-serif.webp", default_alt="Fuente serif", toggled_alt="Fuente sans-serif", full_width=true) }}
### Indicador de enlaces externos
| Página | Sección | `config.toml` | Sigue Jerarquía | Requiere JavaScript |
|:------:|:-------:|:-------------:|:----------------:|:------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
{{ admonition(type="info", text="Requiere Zola 0.20.0 o posterior.") }}
Si deseas añadir un icono a los enlaces externos, configura la sección `[markdown]` (no `[extra]`) en tu `config.toml`:
```toml
[markdown]
external_links_class = "external"
```
Esto añadirá un pequeño icono junto a los enlaces externos:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/external_link_light.webp", dark_src="blog/mastering-tabi-settings/img/external_link_dark.webp", alt="Icono de enlace externo", full_width=true) }}
### Estilos CSS personalizados
| Página | Sección | `config.toml` | Sigue la jerarquía | Requiere JavaScript |
@ -285,11 +308,11 @@ Si configuras `tag_sorting = "frequency"`, se ordenarán según el número de pu
---
### Series
## Series
Para una explicación detallada, consulta la [documentación de series](@/blog/series/index.es.md).
#### Enlace para saltar a las publicaciones
### Enlace para saltar a las publicaciones
| Página | Sección | `config.toml` | Sigue jerarquía | Requiere JavaScript |
|:------:|:-------:|:-------------:|:------------------:|:-------------------:|
@ -301,7 +324,7 @@ Por defecto, aparece automáticamente un enlace "Saltar a publicaciones" junto a
Establece `show_jump_to_posts = true` para forzar la activación de la función y `show_jump_to_posts = false` para desactivarla.
#### Indexación de páginas de series
### Indexación de páginas de series
| Página | Sección | `config.toml` | Sigue la jerarquía | Requiere JavaScript |
|:------:|:-------:|:-------------:|:------------------:|:-------------------:|
@ -371,7 +394,7 @@ quick_navigation_buttons = true
- `show_reading_time = false` oculta el tiempo estimado de lectura.
- `quick_navigation_buttons = true` muestra los botones de navegación rápida.
Junto al archivo `_index.md`, puedes crear un archivo para cada proyecto. Por ejemplo, este es el bloque de metadatos para la página del proyecto [tabi](/es/projects/tabi/):
Junto al archivo `_index.md`, puedes crear un archivo para cada proyecto. Por ejemplo, este es el bloque de metadatos para la página del proyecto [tabi](@/projects/tabi/index.es.md):
```toml
title = "tabi"
@ -391,6 +414,33 @@ Cuando un usuario haga clic en la imagen o el título de un proyecto, será llev
La página del proyecto individual se renderiza con la plantilla predeterminada, a menos que establezcas otra, por ejemplo, `template = "info-page.html"`.
#### Filtrar proyectos
Si agregas etiquetas a tus proyectos, verás un filtro de etiquetas:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/projects_tag_filter_light.webp", dark_src="blog/mastering-tabi-settings/img/projects_tag_filter_dark.webp", alt="Página de proyectos con filtro de etiquetas", full_width=true) }}
El sistema de filtrado de etiquetas utiliza mejora progresiva:
- Sin JavaScript: Las etiquetas enlazan directamente a páginas de etiquetas dedicadas (por ejemplo, `/tags/nombre-etiqueta`).
- Con JavaScript: Filtrado instantáneo, sincronización de URL (#nombre-etiqueta) y navegación por teclado.
Para desactivar esta función, establece `enable_cards_tag_filtering = false` en la sección `[extra]` del archivo `projects/_index.md` o en `config.toml`.
{% admonition(type="tip") %}
Para filtrar proyectos por etiquetas, necesitas establecer etiquetas en el front matter de cada proyecto. Por ejemplo:
```toml
title = "nombre del proyecto"
weight = 40
[taxonomies]
tags = ["etiqueta uno", "etiqueta 2", "tercera etiqueta"]
```
{% end %}
### Archivo
Agregar una página de archivo es similar a agregar una página de proyectos. Puedes crear un directorio en `content/archive/`. Allí, puedes crear un archivo `_index.md` con el siguiente encabezado:
@ -411,10 +461,14 @@ Por defecto, el archivo mostrará las publicaciones ubicadas en `blog/`. Para pe
section_path = ["blog/", "notas/", "ruta-tres/"]
```
**Nota**:
El archivo muestra las publicaciones en orden cronológico inverso (las más recientes primero). Puedes invertir este orden estableciendo `archive_reverse = true` en la sección `[extra]`:
- La página de Archivo sólo listará publicaciones con fecha.
- El orden las publicaciones viene determinada por la variable `sort_by` de las secciones archivadas. Esta demo utiliza `sort_by = "date"` en `blog/_index.md`.
```toml
[extra]
archive_reverse = true # muestra las publicaciones más antiguas primero
```
{{ admonition(type="note", title="nota" text="La página de Archivo sólo listará publicaciones que tengan fecha en su encabezado.") }}
### Etiquetas
@ -463,6 +517,17 @@ path = "about"
Fíjate cómo se establece `path = "about"`. Zola colocará la página en `$base_url/about/`. Si deseas que la página esté disponible en `/contacto/`, tendrías que establecer `path = "contacto"`.
La plantilla `info-page.html` también se puede utilizar para crear lading pages en la ruta raíz (`"/"`). Para hacerlo, el archivo `content/_index.md` debería verse así:
```markdown
+++
title = "Título de la página"
template = "info-page.html"
+++
Contenido con Markdown.
```
---
## SEO
@ -549,7 +614,9 @@ fediverse_creator = { handle = "username", domain = "example.com" }
|:------:|:-------:|:-------------:|:---------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
La barra de navegación es la barra en la parte superior de la página que contiene el título del sitio y el menú de navegación. Puedes personalizar los elementos que aparecen configurando `menu` en `config.toml`. Por ejemplo:
La barra de navegación es la barra en la parte superior de la página que contiene el título del sitio y el menú de navegación. Puedes personalizar los elementos que aparecen configurando `menu` en `config.toml`.
Soporta links relativos para páginas internas y links absolutos para enlaces externos. Por ejemplo:
```toml
menu = [
@ -558,6 +625,7 @@ menu = [
{ name = "etiquetas", url = "tags", trailing_slash = true },
{ name = "proyectos", url = "projects", trailing_slash = true },
{ name = "acerca de", url = "about", trailing_slash = true },
{ name = "github", url = "https://github.com/welpo/tabi", trailing_slash = false },
]
```
@ -630,13 +698,13 @@ Establecer `copy_button = true` añadirá un pequeño botón de copiar en la par
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/copy_button_on_code_blocks_light.webp", dark_src="blog/mastering-tabi-settings/img/copy_button_on_code_blocks_dark.webp", alt="Botón de copiar en bloques de código", full_width=true) }}
### Mostrar ruta/URL en bloques de código
### Nombres de bloques de código clicables
| Página | Sección | `config.toml` | Sigue la jerarquía | Requiere JavaScript |
|:------:|:-------:|:-------------:|:---------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ✅ |
Establece `add_src_to_code_block = true` para habilitar el uso del [shortcode `add_src_to_code_block`](@/blog/shortcodes/index.es.md#mostrar-ruta-o-url).
Establece `code_block_name_links = true` para habilitan los enlaces clickables en los nombres de bloques de código. Consulta la [documentación](@/blog/shortcodes/index.es.md#mostrar-ruta-o-url) para ver ejemplos y uso.
### Forzar bloques de código de izquierda a derecha
@ -672,10 +740,12 @@ Consulta la [documentación de Mermaid](@/blog/shortcodes/index.es.md#diagramas-
|:------:|:-------:|:-------------:|:---------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
Las fuentes personalizadas causan parpadeo del texto en Firefox. Para solucionar esto, tabi carga un subconjunto de glifos para el encabezado. Dado que esto (ligeramente) aumenta el tiempo de carga inicial, es una buena idea intentar minimizar el tamaño de este subconjunto.
Las fuentes personalizadas causan parpadeo del texto en Firefox. Para solucionar esto, tabi carga un subconjunto de glifos para el encabezado. Dado que esto (ligeramente) aumenta el tiempo de carga inicial, es una buena idea intentar minimizar el tamaño de este subconjunto, o desactivarlo por completo si no estás usando una fuente personalizada en tu tema.
Puedes crear un subconjunto personalizado adaptado a tu sitio, guardarlo como `static/custom_subset.css`, y hacer que se cargue con `custom_subset = true`.
Para desactivar el subconjunto, puedes usar `enable_subset = false`.
Para obtener más información, incluyendo instrucciones sobre cómo crear un subconjunto personalizado, consulta la [documentación](@/blog/custom-font-subset/index.es.md).
### Contenido completo en el feed
@ -692,7 +762,10 @@ Por defecto, el feed Atom solo contiene el resumen/descripción de tus publicaci
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ❌ |
Puedes ocultar páginas específicas o secciones enteras del feed con `hide_from_feed = true`.
Puedes controlar cómo aparece el contenido en los feeds usando dos configuraciones:
- `hide_from_feed = true`: Oculta el contenido de todos los feeds (feed principal, feeds de sección y feeds de etiquetas)
- `hide_from_main_feed = true`: Oculta el contenido solo del feed principal mientras lo mantiene visible en los feeds de sección y de etiquetas
### Comentarios {#añadir-comentarios}
@ -708,6 +781,37 @@ Si has activado un sistema globalmente, pero quieres desactivarlo en una página
Lee la [documentación](@/blog/comments/index.es.md) para obtener más información sobre los sistemas disponibles y su configuración.
### Botones de iine {#iine}
| Página | Sección | `config.toml` | Sigue la jerarquía | Requiere JavaScript |
|:------:|:-------:|:-------------:|:-------------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ❌ |
tabi soporta botones de [iine](https://iine.to/) para mostrar apreciación anónima por tu contenido. Estos botones centrados en la privacidad funcionan sin JavaScript y no rastrean usuarios.
Para activar los botones iine globalmente:
```toml
[extra]
iine = true
```
Puedes personalizar el icono usado en los botones (esta configuración sigue la jerarquía):
```toml
[extra]
iine_icon = "thumbs_up" # Opciones: "heart", "thumbs_up", "upvote", o cualquier emoji
```
Para sitios multilingües, puedes unificar los conteos de likes entre versiones en diferentes idiomas del mismo contenido (configuración solo de config; valor predeterminado: `true`):
```toml
[extra]
iine_unified_languages = true # Los likes en /es/blog/hello/ cuentan hacia /blog/hello/
```
También puedes activar los botones iine en páginas o secciones individuales estableciendo `iine = true` en su front matter, o personalizar el icono con `iine_icon = "🚀"`.
### Análisis web
| Página | Sección | `config.toml` | Sigue Jerarquía | Requiere JavaScript |
@ -730,6 +834,8 @@ Puedes configurarlos en la sección `[extra.analytics]` de tu archivo `config.to
- Para Umami: `"https://umami.example.com"`
- Para Plausible: `"https://plausible.example.com"`
- `do_not_track`: (sólo para Umami) opcional. Cuando se establece en `true`, se desactiva el seguimiento para los usuarios cuyos navegadores envían un encabezado "Do Not Track".
Un ejemplo de configuración para GoatCounter no auto-alojada sería:
```toml
@ -867,12 +973,25 @@ Por defecto, la fecha se muestra debajo del título de la publicación. Puedes o
|:------:|:-------:|:-------------:|:------------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
tabi tiene dos formatos de fecha: `long_date_format` y `short_date_format`. El formato corto se utiliza en los metadatos de una publicación, mientras que el formato largo se utiliza al listar las publicaciones (es decir, en la [sección de blog](/es/blog/) o en la [página principal](/es/)).
tabi tiene tres formatos de fecha: `long_date_format`, `short_date_format` y `archive_date_format`. El formato corto se utiliza en los metadatos de una publicación, mientras que el formato largo se utiliza al listar las publicaciones (es decir, en la [sección de blog](/es/blog/) o en la [página principal](/es/)). El formato de archivo se usa para mostrar el día y el mes en la página de archivo.
Por defecto es "6th July 2049" para ambos formatos en inglés. Para otros idiomas, el predeterminado es `"%d %B %Y"` para el formato largo y `"%-d %b %Y"` para el formato corto.
Por defecto es "6th July 2049" para los formatos corto y largo en inglés. Para otros idiomas, el predeterminado es `"%d %B %Y"` para el formato largo y `"%-d %b %Y"` para el formato corto. El formato de archivo predeterminado universal es `"%d %b"`.
En Zola, la sintaxis para el formateo de tiempo está inspirada en strftime. Una referencia completa está disponible en la [documentación de chrono](https://docs.rs/chrono/0.4.31/chrono/format/strftime/index.html).
#### Formatos de fecha por idioma
Puedes personalizar los formatos de fecha para idiomas específicos usando la matriz `date_formats` en `config.toml`:
```toml
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y", archive = "%d de %b" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
```
Esto permite que diferentes idiomas usen formatos de fecha culturalmente apropiados (por ejemplo, "6 de julio de 2049" en español o "6. Juli 2049" en alemán).
### Separador personalizado
| Página | Sección | `config.toml` | Sigue la jerarquía | Requiere JavaScript |
@ -933,6 +1052,68 @@ Esta función está habilitada por defecto. Para deshabilitarla (y permitir todo
Para obtener más información, consulta la [página de documentación de CSP](@/blog/security/index.es.md).
---
## Indieweb
### Webmentions
| Página | Sección | `config.toml` | Sigue la jerarquía | Requiere JavaScript |
|:------:|:-------:|:-------------:|:---------------:|:-------------------:|
| ❓ | ❓ | ✅ | ❓ | ✅ |
Como se describe en el estándar W3C recomendado, [Webmention](https://www.w3.org/TR/webmention/#abstract-p-1) es una manera sencilla de notificar cualquier URL cuando la mencionas en tu sitio web. Desde la perspectiva del receptor, es una forma de solicitar notificaciones cuando otros sitios web la mencionan.
Para sitios web estáticos, [webmention.io](https://webmention.io/) aloja un punto final de webmention que se puede utilizar para recibir webmentions. Esta función recupera las webmentions almacenadas en webmention.io y las muestra para una página. Necesitarás configurar una cuenta para tu sitio web en webmention.io. Cuando habilites la función, anunciará tu punto final de webmention.io y mostrará las webmentions para cualquier página.
Habilita las webmentions para tu sitio web agregando lo siguiente a tu archivo `config.toml`.
```toml
[extra.webmentions]
enable = true
# Especifica el dominio registrado con webmention.io.
domain = "www.example.com"
```
❓: Para desactivar las webmentions para una sección o página específica, establece `webmentions = false` en la sección `[extra]` del front matter de esa sección o página.
La sección de webmentions se ve así:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/webmention_light.webp", dark_src="blog/mastering-tabi-settings/img/webmention_dark.webp" alt="Captura de pantalla de webmentions mostrando reposts, me gusta, marcadores y comentarios", full_width=true) }}
### h-card representativa
| Página | Sección | `config.toml` | Sigue Jerarquía | Requiere JavaScript |
| :--: | :-----: | :-----------: | :---------------: | :-----------------: |
| ❌ | ❌ | ✅ | ❌ | ❌ |
Por defecto, tabi añade una [h-card](https://microformats.org/wiki/h-card) representativa **oculta** a la página de inicio. Aunque es invisible para los visitantes, está disponible para los analizadores de microformatos. Puedes comprobar la validez de la tarjeta con la herramienta [Indiewebify.me](https://indiewebify.me/validate-h-card/).
Para desactivar la h-card, establece `enable = false` en la sección `[extra.hcard]` de `config.toml`.
La h-card predeterminada incluye tu nombre, la URL del sitio web y los enlaces a redes sociales.
Puedes establecer una imagen de perfil y una pequeña biografía con los ajustes `avatar` y `biography`.
Todas las demás [propiedades de h-card](https://microformats.org/wiki/h-card#Properties) se pueden añadir listándolas en la sección `[extra.hcard]` del archivo de configuración. Simplemente reemplaza todos los caracteres `-` por `_`.
---
## Extendiendo elementos HTML en tabi
Algunos elementos HTML en tabi pueden extenderse para admitir casos de uso adicionales, como agregar JavaScript personalizado para comportamientos en todo el sitio al final de la etiqueta `<body>` o incluir contenido adicional al final del elemento `<head>` que no esté soportado por otras configuraciones de tabi.
Consulta la tabla a continuación para ver los elementos que pueden extenderse:
| Elemento | Plantilla |
| :------: | :-------------------------------: |
| `<head>` | `templates/tabi/extend_head.html` |
| `<body>` | `templates/tabi/extend_body.html` |
No hay configuraciones explícitas que debas establecer para tu sitio o páginas. Simplemente crea el archivo de plantilla correspondiente para tu sitio, y tabi lo incluirá automáticamente.
---
[^1]: Si estás utilizando un repositorio Git remoto, es posible que quieras automatizar el proceso de actualización del campo `updated`. Aquí tienes una guía para eso: [Zola Git Hook: actualizando las fechas de las publicaciones](https://osc.garden/es/blog/zola-date-git-hook/).
[^2]: Para codificar tu correo electrónico en base64 puedes utilizar [herramientas en línea](https://www.base64encode.org/) o, en tu terminal, ejecutar: `printf 'mail@example.com' | base64`

View file

@ -1,7 +1,7 @@
+++
title = "Mastering tabi Settings: A Comprehensive Guide"
date = 2023-09-18
updated = 2024-11-14
updated = 2025-08-07
description = "Discover the many ways you can customise your tabi site."
[taxonomies]
@ -113,7 +113,7 @@ The description is regular Markdown content, set outside the front matter.
#### Listing Recent Posts
To show posts on your main page, you first need to decide where these posts will be served from: the root path (`/`) or a subdirectory (e.g., `/blog`).
To show posts on your main page, you first need to decide where these posts will be served from: the root path (`/`) or a subdirectory (e.g., `/blog`).
**Option A: Serve posts from the root path (`/`)**
@ -183,6 +183,10 @@ By default, when listing posts, the date of post creation is shown. You can conf
post_listing_date = "date"
```
{% admonition(type="tip") %}
This setting follows the hierarchy: you can set a global value in `config.toml` or override it for specific sections in their `_index.md` file. In both cases, add it to the `[extra]` section.
{% end %}
#### Listing Projects
You can showcase a selection of projects on your main page. To do this, you'll need to set up the `projects` directory first.
@ -224,7 +228,7 @@ tabi's skins change the main colour of the site. You can set the skin in `config
{{ image_toggler(default_src="blog/customise-tabi/skins/lavender_light.webp", toggled_src="blog/customise-tabi/skins/lavender_dark.webp", default_alt="lavender skin in light mode", toggled_alt="lavender skin in dark mode", full_width=true) }}
Explore the available skins and learn how to create your own reading [the documentation](/blog/customise-tabi/#skins).
Explore the available skins and learn how to create your own reading [the documentation](@/blog/customise-tabi/index.md#skins).
### Sans-serif Font
@ -238,6 +242,25 @@ Click on the image below to compare the two looks:
{{ image_toggler(default_src="blog/mastering-tabi-settings/img/serif.webp", toggled_src="blog/mastering-tabi-settings/img/sans-serif.webp", default_alt="Serif font", toggled_alt="Sans-serif font", full_width=true) }}
### External Link Indicator
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
{{ admonition(type="info", text="Requires Zola 0.20.0 or later.") }}
If you'd like to add an icon to external links, configure the `[markdown]` (not `[extra]`) section in your `config.toml`:
```toml
[markdown]
external_links_class = "external"
```
This will add a small icon next to external links:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/external_link_light.webp", dark_src="blog/mastering-tabi-settings/img/external_link_dark.webp", alt="External link icon", full_width=true) }}
### Custom CSS
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
@ -290,11 +313,11 @@ Setting `tag_sorting = "frequency"` will sort them by number-of-posts (descendin
---
### Series
## Series
For a detailed explanation of the series feature, see the [series documentation](@/blog/series/index.md).
#### Jump to posts link
### Jump to posts link
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
@ -306,7 +329,7 @@ By default, a "Jump to posts" link automatically appears next to the series titl
Set `show_jump_to_posts = true` to force the feature on and `show_jump_to_posts = false` to force it off.
#### Series pages indexation
### Series pages indexation
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
@ -356,7 +379,7 @@ Clicking on this link will take you to the commit history of the post, where you
### Projects
tabi has a built-in projects template. To enable it, you can create a directory in `content/projects/`. There, you can create a `_index.md` file with the following front matter:
tabi has a built-in projects (cards) template. To enable it, you can create a directory in `content/projects/`. There, you can create a `_index.md` file with the following front matter:
```toml
title = "Projects"
@ -376,11 +399,11 @@ quick_navigation_buttons = true
- `show_reading_time = false` hides the [reading time](#reading-time).
- `quick_navigation_buttons = true` shows the [quick navigation buttons](#quick-navigation-buttons) are shown.
Alongside the `_index.md` file, you can create a file for each project. For example, this is the front matter for the [tabi project page](/projects/tabi/):
Alongside the `_index.md` file, you can create a file for each project. For example, this is the front matter for the [tabi project page](@/projects/tabi/index.md):
```toml
title = "tabi"
description = "A fast, lightweight, and modern Zola theme with multi-language support."
description = "A feature-rich modern Zola theme with first-class multi-language support."
weight = 1
[extra]
@ -396,6 +419,33 @@ When a user clicks on the image or title of a project, they will be taken to the
The individual project's page is rendered with the default template, unless you set another one, e.g. `template = "info-page.html"`.
#### Filtering Projects
If you add tags to your projects, you will see a tag filter:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/projects_tag_filter_light.webp", dark_src="blog/mastering-tabi-settings/img/projects_tag_filter_dark.webp", alt="Projects page with tag filter", full_width=true) }}
The tag filtering system uses progressive enhancement:
- Without JavaScript: Tags link directly to dedicated tag pages (e.g. `/tags/tag-name`)
- With JavaScript: Instant filtering, URL syncing (#tag-name), and keyboard navigation
To disable this feature, set `enable_cards_tag_filtering = false` in the `[extra]` section of the `projects/_index.md` file or in `config.toml`.
{% admonition(type="tip") %}
To filter projects by tags, you need to set tags in the front matter of each project. For example:
```toml
title = "project name"
weight = 40
[taxonomies]
tags = ["tag one", "tag 2", "third tag"]
```
{% end %}
### Archive
Adding an archive page is similar to adding a projects page. You can create a directory in `content/archive/`. There, you can create a `_index.md` file with the following front matter:
@ -416,10 +466,14 @@ By default, the archive will list posts located in `blog/`. To customise this, y
section_path = ["blog/", "notes/", "path-three/"]
```
**Notes**:
The archive displays posts in reverse chronological order (newest first). You can reverse this order by setting `archive_reverse = true` in the `[extra]` section:
- the Archive page will only list posts that have a date in their front matter.
- Post sorting is determined by the `sort_by` variable of the sections you are archiving. This demo uses `sort_by = "date"` set in the `blog/_index.md`.
```toml
[extra]
archive_reverse = true # displays oldest posts first.
```
{{ admonition(type="note", text="The Archive page will only list posts that have a date in their front matter.") }}
### Tags
@ -468,6 +522,17 @@ path = "about"
Notice how the `path` is set to `about`. Zola will place the page at `$base_url/about/`. If you'd like to have the page available at `/contact/`, you'd set `path = "contact"`.
The `info-page.html` template can also be used to create landing pages at the path root (`"/"`). To do that, the `content/_index.md` file should look like this:
```markdown
+++
title = "Landing Page Title"
template = "info-page.html"
+++
Place your landing page Markdown content here.
```
---
## SEO
@ -556,7 +621,9 @@ This adds metadata to your HTML, allowing Mastodon to display the author's fediv
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
The navigation bar is the bar at the top of the page that contains the site title and the navigation menu. You can customise which items appear by setting `menu` in `config.toml`. For example:
The navigation bar is the bar at the top of the page that contains the site title and the navigation menu. You can customise which items appear by setting `menu` in `config.toml`.
The menu supports both relative URLs for internal pages and absolute URLs for external links. For example:
```toml
menu = [
@ -565,6 +632,7 @@ menu = [
{ name = "tags", url = "tags", trailing_slash = true },
{ name = "projects", url = "projects", trailing_slash = true },
{ name = "about", url = "about", trailing_slash = true },
{ name = "github", url = "https://github.com/welpo/tabi", trailing_slash = false },
]
```
@ -640,13 +708,13 @@ Setting `copy_button = true` will add a small copy button to the top right of co
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/copy_button_on_code_blocks_light.webp", dark_src="blog/mastering-tabi-settings/img/copy_button_on_code_blocks_dark.webp" alt="Copy button on code blocks", full_width=true) }}
### Source/Path on Code Blocks
### Clickable Code Block Names
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ✅ |
Setting `add_src_to_code_block = true` enables the use of the [`add_src_to_code_block` shortcode](@/blog/shortcodes/index.md#show-source-or-path).
Setting `code_block_name_links = true` enables URLs in code block names to become clickable links. Check out the [documentation](@/blog/shortcodes/index.md#show-source-or-path) for examples and usage.
### Force Code Blocks LTR
@ -682,9 +750,9 @@ See the [Mermaid documentation](@/blog/shortcodes/index.md#mermaid-diagrams) for
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
Custom fonts cause flashing text in Firefox. To amend this, tabi loads a subset of glyphs for the header. Since this (slightly) increases the initial load time, it's a good idea to try and minimise the size of this subset.
Custom fonts cause flashing text in Firefox. To amend this, tabi loads a subset of glyphs for the header. Since this (slightly) increases the initial load time, it's a good idea to try and minimise the size of this subset, or disable it completely if you're not using a custom font in your skin.
You can create a custom subset tailored to your site, save it as `static/custom_subset.css`, and have it load with `custom_subset = true`.
You can create a custom subset tailored to your site, save it as `static/custom_subset.css`, and have it load with `custom_subset = true`. Disabling the subset can be done with `enable_subset = false`.
For more information, including instructions on how to create a custom subset, see the [docs](@/blog/custom-font-subset/index.md).
@ -702,7 +770,10 @@ By default, the Atom feed only contains the summary/description of your posts. Y
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ❌ |
You can hide specific pages or entire sections from your feed by setting `hide_from_feed = true`.
You can control how content appears in your feeds using two settings:
1. `hide_from_feed = true`: Hides content from all feeds (main, section, and tag feeds)
2. `hide_from_main_feed = true`: Hides content only from the main feed while keeping it visible in section and tag feeds
### Comments {#adding-comments}
@ -718,6 +789,37 @@ If you have enabled a system globally, but want to disable it on a specific page
Read [the docs](@/blog/comments/index.md) for more information on the available systems and their setup.
### iine Like Buttons {#iine}
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ✅ | ✅ | ✅ | ✅ | ❌ |
tabi supports [iine](https://iine.to/) like buttons for anonymous appreciation of your content. These privacy-focused buttons work without JavaScript and don't track users.
To enable iine buttons globally:
```toml
[extra]
iine = true
```
You can customise the icon used for the buttons (follows the hierarchy):
```toml
[extra]
iine_icon = "thumbs_up" # Options: "heart", "thumbs_up", "upvote", or any emoji
```
For multilingual sites, you can unify like counts across language versions of the same content (config-only setting; true by default):
```toml
[extra]
iine_unified_languages = true # Likes on /es/blog/hello/ count towards /blog/hello/
```
You can also enable iine buttons on individual pages or sections by setting `iine = true` in their front matter, or override the icon with `iine_icon = "🚀"`.
### Analytics
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
@ -740,6 +842,8 @@ You can set them up in the `[extra.analytics]` section of your `config.toml`.
- For Umami: `"https://umami.example.com"`
- For Plausible: `"https://plausible.example.com"`
- `do_not_track`: (Umami only) Optional. When set to `true`, the generated tracking script will include the `data-do-not-track="true"` attribute, which disables tracking for users whose browsers send a "Do Not Track" header.
An example configuration for non-self-hosted GoatCounter would look like this:
```toml
@ -879,12 +983,25 @@ By default, the date is shown below the post title. You can hide it with `show_d
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ❌ | ❌ | ✅ | ❌ | ❌ |
tabi has two date formats: `long_date_format` and `short_date_format`. The short format is used in a post's metadata, while the long format is used when listing posts (i.e. on the [blog section](@/blog/_index.md) or the [main page](@/_index.md)).
tabi has three date formats: `long_date_format`, `short_date_format` and `archive_date_format`. The short format is used in a post's metadata, while the long format is used when listing posts (i.e. on the [blog section](@/blog/_index.md) or the [main page](@/_index.md)). The archive format is used to display day and month on the archive page.
The default is "6th July 2049" for both formats in English. For other languages, the defaut is `"%d %B %Y"` for the long format and `"%-d %b %Y"` for the short format.
The default is "6th July 2049" for `long_date_format` and `short_date_format` in English. For other languages, the defaut is `"%d %B %Y"` for the long format and `"%-d %b %Y"` for the short format. The universal default for the archive format is `"%d %b"`.
In Zola, time formatting syntax is inspired fom strftime. A full reference is available in the [chrono docs](https://docs.rs/chrono/0.4.31/chrono/format/strftime/index.html).
#### Per-language date formats
You can customise date formats for specific languages using the `date_formats` array in `config.toml`:
```toml
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y", archive = "%d de %b" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
```
This allows different languages to use culturally appropriate date formatting (e.g. Spanish "3 de febrero de 2024" vs German "3. Februar 2024").
### Custom Separator
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
@ -945,6 +1062,68 @@ This feature is enabled by default. To disable it (and allow all connections), s
See the [CSP documentation page](@/blog/security/index.md) for more information.
---
## Indieweb
### Webmentions
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
|:----:|:-------:|:-------------:|:-----------------:|:-------------------:|
| ❓ | ❓ | ✅ | ❓ | ✅ |
As described by the recommended W3C standard [Webmention](https://www.w3.org/TR/webmention/#abstract-p-1) is a simple way to notify any URL when you mention it on your site. From the receiver's perspective, it's a way to request notifications when other sites mention it.
For static sites [webmention.io](https://webmention.io/) hosts a webmention endpoint that can be used to receive webmentions. This feature fetches the webmentions stored at webmention.io and displays them for a page. You will need to have setup an account for your website at webmention.io. When you enable the webmention feature it will advertise your webmention.io endpoint and display the webmentions for all posts.
Enable webmentions for your site by adding the following to your `config.toml` file.
```toml
[extra.webmentions]
enable = true
# Specify the domain registered with webmention.io.
domain = "www.example.com"
```
❓: To disable webmentions for a specific section or page, set `webmentions = false` in the `[extra]` section of that section or page's front matter.
The webmentions section looks like this:
{{ dual_theme_image(light_src="blog/mastering-tabi-settings/img/webmention_light.webp", dark_src="blog/mastering-tabi-settings/img/webmention_dark.webp" alt="Webmentions screenshot showing reposts, likes, bookmarks, and comments", full_width=true) }}
### Representative h-card
| Page | Section | `config.toml` | Follows Hierarchy | Requires JavaScript |
| :--: | :-----: | :-----------: | :---------------: | :-----------------: |
| ❌ | ❌ | ✅ | ❌ | ❌ |
By default, tabi adds a **hidden** representative [h-card](https://microformats.org/wiki/h-card) to the homepage. While invisible to visitors, it's available to microformat parsers. You can check the validity of the card with the [Indiewebify.me](https://indiewebify.me/validate-h-card/) tool.
To disable the h-card, set `enable = false` in the `[extra.hcard]` section of `config.toml`.
The default h-card includes your name, website url and social media links.
You can set a profile picture and a small bio with the `avatar` and `biography` settings.
All other [h-card properties](https://microformats.org/wiki/h-card#Properties) can be added by listing them under the `[extra.hcard]`section of the config file. Simply replace all `-` characters by `_`.
---
## Extending HTML Elements in tabi
Some HTML elements in tabi can be extended to support additional use cases such as adding custom JavaScript for site-wide behavior at the end of the `<body>` tag or including additional content at the end of the `<head>` element that is not otherwise supported by other tabi settings.
See the table below for elements that can be extended:
| Element | Template |
| :------: | :-------------------------------: |
| `<head>` | `templates/tabi/extend_head.html` |
| `<body>` | `templates/tabi/extend_body.html` |
There are no explicit settings to configure for your site or pages. Simply create the relevant template file for your site, and tabi will automatically include it.
---
[^1]: If you're using a remote Git repository, you might want to automate the process of updating the `updated` field. Here's a guide for that: [Zola Git Pre-Commit Hook: Updating Post Dates](https://osc.garden/blog/zola-date-git-hook/).
[^2]: To encode your email in base64 you can use [online tools](https://www.base64encode.org/) or, on your terminal, run: `printf 'mail@example.com' | base64`.

View file

@ -1,7 +1,7 @@
+++
title = "Seguretat per defecte"
date = 2023-02-22
updated = 2024-08-28
updated = 2025-02-21
description = "tabi té una Política de Seguretat de Contingut (CSP) fàcilment personalitzable amb valors segurs per defecte. Obtingues tranquil·litat i un A+ en l'Observatori de Mozilla."
[taxonomies]
@ -41,4 +41,6 @@ Pots desactivar les capçaleres (permitint-ho tot) en una pàgina, secció, o gl
{ directive = "style-src", domains = ["'self'", "'unsafe-inline'"] },
```
---
[^1]: Requereix una configuració adequada del servidor web (p. ex., redirigir el trànsit HTTP a HTTPS).

View file

@ -1,7 +1,7 @@
+++
title = "Seguro por defecto"
date = 2023-02-22
updated = 2024-08-28
updated = 2025-02-21
description = "tabi tiene una Política de Seguridad de Contenido (CSP) fácilmente personalizable con configuraciones seguras. Obtén tranquilidad y una calificación de A+ en Mozilla Observatory."
[taxonomies]
@ -41,4 +41,6 @@ Puedes desactivar las cabeceras (permitiendo todo) en una página, sección, o g
{ directive = "style-src", domains = ["'self'", "'unsafe-inline'"] },
```
---
[^1]: Requiere una configuración adecuada del servidor web (por ejemplo, redirigir el tráfico HTTP a HTTPS).

View file

@ -1,7 +1,7 @@
+++
title = "Secure by default"
date = 2023-02-22
updated = 2024-08-28
updated = 2025-02-21
description = "tabi has an easily customizable Content Security Policy (CSP) with safe defaults. Get peace of mind and an A+ on Mozilla Observatory."
[taxonomies]
@ -41,4 +41,6 @@ You can disable the CSP (allowing all connections) on a page, section, or global
{ directive = "style-src", domains = ["'self'", "'unsafe-inline'"] },
```
---
[^1]: Requires proper webserver configuration (e.g. redirecting HTTP traffic to HTTPS).

View file

@ -1,6 +1,7 @@
+++
title = "Guia completa sobre sèries"
date = 2024-11-08
updated = 2025-02-21
description = "Aprèn a organitzar les teves publicacions en sèries seqüencials, perfectes per a tutorials, cursos i històries de diverses parts."
[taxonomies]
@ -48,9 +49,7 @@ flowchart
2. Crea `_index.md` al directori de la sèrie
3. Configura el front matter de `_index.md`:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
title = "Aprenent Rust"
template = "series.html"
sort_by = "slug"
@ -154,9 +153,7 @@ Aquesta configuració segueix [la jerarquia](@/blog/mastering-tabi-settings/inde
Els articles d'una sèrie poden tenir seccions automàtiques d'introducció i conclusió. Aquestes es configuren al `_index.md` de la teva sèrie. Un exemple bàsic:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
default = "Aquest article és part de la sèrie $SERIES_HTML_LINK."
@ -177,9 +174,7 @@ El sistema de sèries utilitza diferents plantilles segons la posició de l'arti
El sistema determina automàticament quina plantilla utilitzar segons la posició de l'article. Les plantilles es defineixen a la configuració de la sèrie (`_index.md`), com `extra.series_intro_templates` i `extra.series_outro_templates`:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
next_only = "Benvingut a la part 1! Següent: $NEXT_HTML_LINK"
middle = "Anterior: $PREV_HTML_LINK | Següent: $NEXT_HTML_LINK"
@ -253,6 +248,8 @@ Hi ha tres tipus de variables:
{% end %}
{{ admonition(type="tip", title="CONSELL: Text personalitzat amb permalinks", text='Els enllaços markdown com `[text]($SERIES_PERMALINK)` seran marcats (i [estilitzats](@/blog/mastering-tabi-settings/index.ca.md#indicador-d-enllacos-externs)) com externs. Si necessites text personalitzat i vols evitar l\'estil extern, utilitza HTML: `<a href=\"$SERIES_PERMALINK\">el teu text</a>`.') }}
### Variables de navegació
{% wide_container() %}
@ -285,9 +282,7 @@ Hi ha tres tipus de variables:
{{ admonition(type="tip", title="Variables HTML vs text", text="Utilitza variables HTML (que acaben en `_HTML_LINK`) quan vulguis enllaços preparats per usar. Utilitza variables de text (que acaben en `_TITLE` o `_PERMALINK`) quan vulguis més control sobre el format.") }}
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
# Introducció
[extra.series_intro_templates]
next_only = """
@ -351,9 +346,7 @@ Les plantilles de sèries admeten variables personalitzades per incloure informa
1. Primer, defineix els teus **marcadors** a la configuració de la teva sèrie (`_index.md`):
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra]
series = true
series_template_placeholders = ["$POSITION", "$TOPIC", "$DIFFICULTY"]
@ -361,9 +354,7 @@ series_template_placeholders = ["$POSITION", "$TOPIC", "$DIFFICULTY"]
2. Després, a cada article de la sèrie, proporciona els valors per a aquests marcadors a `series_template_variables`:
{{ add_src_to_code_block(src="series/article.md") }}
```toml
```toml,name=series/article.md
[extra.series_template_variables]
position = "primer"
topic = "Variables i tipus"
@ -374,9 +365,7 @@ difficulty = "Principiant"
Pots usar les teves variables personalitzades a qualsevol plantilla, juntament amb les variables integrades:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
default = """
Aquest és l'article $POSITION a $SERIES_HTML_LINK.
@ -389,9 +378,7 @@ Nivell de dificultat: $DIFFICULTY
### Exemple amb variables personalitzades
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
# A la configuració de la sèrie.
[extra]
series = true
@ -404,9 +391,7 @@ series_intro_templates.default = """
"""
```
{{ add_src_to_code_block(src="series/02-learning-rust/index.md") }}
```toml
```toml,name=series/02-learning-rust/index.md
# En un article de la sèrie.
[extra.series_template_variables]
learning_time = "30 minuts"

View file

@ -1,6 +1,7 @@
+++
title = "Guía completa sobre series"
date = 2024-11-08
updated = 2025-02-21
description = "Aprende a organizar tus publicaciones en series secuenciales, perfectas para tutoriales, cursos e historias de varias partes."
[taxonomies]
@ -48,9 +49,7 @@ flowchart
2. Crea `_index.md` en el directorio de la serie
3. Configura el front matter de `_index.md`:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
title = "Aprendiendo Rust"
template = "series.html"
sort_by = "slug"
@ -154,9 +153,7 @@ Esta configuración sigue [la jerarquía](@/blog/mastering-tabi-settings/index.e
Los artículos de una serie pueden tener secciones automáticas de introducción y conclusión. Estas se configuran en el `_index.md` de tu serie. Un ejemplo básico:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
default = "Este artículo es parte de la serie $SERIES_HTML_LINK."
@ -177,9 +174,7 @@ El sistema de series usa diferentes plantillas según la posición del artículo
El sistema determina automáticamente qué plantilla usar según la posición del artículo. Las plantillas se definen en la configuración de la serie (`_index.md`), como `extra.series_intro_templates` y `extra.series_outro_templates`:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
next_only = "¡Bienvenido a la parte 1! Siguiente: $NEXT_HTML_LINK"
middle = "Anterior: $PREV_HTML_LINK | Siguiente: $NEXT_HTML_LINK"
@ -253,6 +248,8 @@ Hay tres tipos de variables:
{% end %}
{{ admonition(type="tip", title="CONSEJO: Texto personalizado con permalinks", text='Los enlaces markdown como `[texto]($SERIES_PERMALINK)` serán marcados (y [estilizados](@/blog/mastering-tabi-settings/index.es.md#indicador-enlaces-externos)) como externos. Si necesitas texto personalizado y quieres evitar el estilo externo, usa HTML: `<a href=\"$SERIES_PERMALINK\">tu texto</a>`.') }}
### Variables de navegación
{% wide_container() %}
@ -285,9 +282,7 @@ Hay tres tipos de variables:
{{ admonition(type="tip", title="Variables HTML vs texto", text="Usa variables HTML (que terminan en `_HTML_LINK`) cuando quieras enlaces listos para usar. Usa variables de texto (que terminan en `_TITLE` o `_PERMALINK`) cuando quieras más control sobre el formato.") }}
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
# Introducción.
[extra.series_intro_templates]
next_only = """
@ -351,9 +346,7 @@ Las plantillas de series admiten variables personalizadas para incluir informaci
1. Primero, define tus **marcadores** en la configuración de tu serie (`_index.md`):
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra]
series = true
series_template_placeholders = ["$POSITION", "$TOPIC", "$DIFFICULTY"]
@ -361,9 +354,7 @@ series_template_placeholders = ["$POSITION", "$TOPIC", "$DIFFICULTY"]
2. Luego, en cada artículo de la serie, proporciona los valores para estos marcadores en `series_template_variables`:
{{ add_src_to_code_block(src="series/article.md") }}
```toml
```toml,name=series/article.md
[extra.series_template_variables]
position = "primero"
topic = "Variables y tipos"
@ -374,9 +365,7 @@ difficulty = "Principiante"
Puedes usar tus variables personalizadas en cualquier plantilla, junto con las variables integradas:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
default = """
Este es el artículo $POSITION en $SERIES_HTML_LINK.
@ -389,9 +378,7 @@ Nivel de dificultad: $DIFFICULTY
### Ejemplo con variables personalizadas
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
# En la configuración de la serie.
[extra]
series = true
@ -404,9 +391,7 @@ series_intro_templates.default = """
"""
```
{{ add_src_to_code_block(src="series/02-learning-rust/index.md") }}
```toml
```toml,name=series/02-learning-rust/index.md
# En un artículo de la serie.
[extra.series_template_variables]
learning_time = "30 minutos"

View file

@ -1,6 +1,7 @@
+++
title = "A Complete Guide to Series"
date = 2024-11-08
updated = 2025-02-21
description = "Learn how to organize your posts into sequential series, perfect for tutorials, courses, and multi-part stories."
[taxonomies]
@ -48,9 +49,7 @@ flowchart
2. Create `_index.md` in the series directory.
3. Set up the `_index.md` front matter:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
title = "Learning Rust"
template = "series.html"
sort_by = "slug"
@ -154,9 +153,7 @@ This setting follows [the hierarchy](@/blog/mastering-tabi-settings/index.md#set
Series articles can have automatic introduction and conclusion sections. These are configured in your series' `_index.md`. A basic example:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
default = "This article is part of the $SERIES_HTML_LINK series."
@ -177,9 +174,7 @@ The series system uses different templates based on an article's position in the
The system automatically determines which template to use based on the article's position. The templates are defined in the series configuration (`_index.md`), as `extra.series_intro_templates` and `extra.series_outro_templates`.:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
next_only = "Welcome to part 1! Next up: $NEXT_HTML_LINK"
middle = "Previous: $PREV_HTML_LINK | Next: $NEXT_HTML_LINK"
@ -253,6 +248,8 @@ There are three types of variables:
{% end %}
{{ admonition(type="tip", title="TIP: Custom text with permalinks", text='Markdown links like `[text]($SERIES_PERMALINK)` will be marked (and [styled](@/blog/mastering-tabi-settings/index.md#external-link-indicator)) as external. If you need custom text and want to avoid external styling, use HTML: `<a href=\"$SERIES_PERMALINK\">your text</a>`.') }}
### Navigation Variables
{% wide_container() %}
@ -285,9 +282,7 @@ There are three types of variables:
{{ admonition(type="tip", title="HTML vs text variables", text="Use HTML variables (ending in `_HTML_LINK`) when you want ready-made links. Use text variables (ending in `_TITLE` or `_PERMALINK`) when you want more control over the formatting.") }}
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
# Introduction.
[extra.series_intro_templates]
next_only = """
@ -351,9 +346,7 @@ Series templates support custom variables for additional information you want to
1. First, define your **placeholders** in your series configuration (`_index.md`):
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra]
series = true
series_template_placeholders = ["$POSITION", "$TOPIC", "$DIFFICULTY"]
@ -361,9 +354,7 @@ series_template_placeholders = ["$POSITION", "$TOPIC", "$DIFFICULTY"]
2. Then, in each series article, provide the values for these placeholders in `series_template_variables`:
{{ add_src_to_code_block(src="series/article.md") }}
```toml
```toml,name=series/article.md
[extra.series_template_variables]
position = "first"
topic = "Variables and Types"
@ -374,9 +365,7 @@ difficulty = "Beginner"
You can use your custom variables in any template, alongside the built-in variables:
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
[extra.series_intro_templates]
default = """
This is the $POSITION article in $SERIES_HTML_LINK.
@ -389,9 +378,7 @@ Difficulty level: $DIFFICULTY
### Example with Custom Variables
{{ add_src_to_code_block(src="series/_index.md") }}
```toml
```toml,name=series/_index.md
# In the series configuration.
[extra]
series = true
@ -404,9 +391,7 @@ series_intro_templates.default = """
"""
```
{{ add_src_to_code_block(src="series/02-learning-rust/index.md") }}
```toml
```toml,name=series/02-learning-rust/index.md
# In an article of the series.
[extra.series_template_variables]
learning_time = "30 minutes"

View file

@ -1,7 +1,7 @@
+++
title = "Shortcodes personalitzats"
date = 2023-02-19
updated = 2024-11-07
updated = 2025-08-01
description = "Aquest tema inclou alguns shortcodes personalitzats útils que pots utilitzar per millorar les teves publicacions. Ja sigui per mostrar imatges que s'adapten als temes clar i fosc, o per donar format a una secció de referències amb un aspecte professional, aquests shortcodes personalitzats t'ajudaran."
[taxonomies]
@ -11,7 +11,7 @@ tags = ["funcionalitat", "shortcodes"]
toc = true
toc_levels = 2
quick_navigation_buttons = true
add_src_to_code_block = true
code_block_name_links = true
mermaid = true
social_media_card = "social_cards/ca_blog_shortcodes.jpg"
+++
@ -107,8 +107,9 @@ El teu codi Mermaid va aquí.
Tots els shortcodes d'imatge admeten rutes absolutes, rutes relatives, i fonts remotes en el paràmetre `src`.
Tots els shortcodes d'imatge tenen tres paràmetres opcionals:
Tots els shortcodes d'imatge tenen els següents paràmetres opcionals:
- `raw_path`. Per defecte és `false`. Si es configura a `true`, el paràmetre `src` s'utilitzarà tal qual. Útil per a actius ubicats a la mateixa carpeta que tenen un slug personalitzat (vegeu [Zola issue #2598](https://github.com/getzola/zola/issues/2598)).
- `inline`. Valor predeterminat: `false`. Si s'estableix a `true`, la imatge es mostrarà en línia amb el text.
- `full_width`. Valor predeterminat: `false` (vegeu [a sota](#imatge-d-amplada-completa)).
- `lazy_loading`. Valor predeterminat: `true`.
@ -186,27 +187,81 @@ Tots els altres shortcodes d'imatges poden utilizar l'amplada completa assignant
{{/* full_width_image(src="img/amsterdam_by_oskerwyld.webp", alt="Fotografia d'un canal a Àmsterdam") */}}
```
## Shortcodes socials
### iine
{{ aside(text="Per afegir-lo a totes les publicacions, estableix `iine = true` a la secció `[extra]` del teu `config.toml`.") }}
Aquest shortcode et permet afegir botons addicionals d'[iine.to](https://iine.to) a les teves publicacions, com aquest:
{{ iine(slug="/blog/shortcodes/demo-button") }}
#### Ús
```
{{/* iine(icon="heart", slug="/post/el-meu-slug-de-post/like", label="M'agrada aquesta publicació") */}}
```
El shortcode accepta els següents paràmetres opcionals:
- `icon`: La icona a mostrar. Pot ser `heart`, `thumbs_up`, `upvote`, o qualsevol emoji.
- `slug`: Un identificador únic. Per defecte és la ruta de la pàgina actual. Útil si vols més d'un botó a la mateixa pàgina.
- `label`: L'etiqueta d'accessibilitat per al botó. Per defecte és "M'agrada aquesta publicació".
## Shortcodes de codi
### Mostrar ruta o URL
Mostra una ruta o URL al següent bloc de codi trobat. Si comença amb "http", es convertirà en un enllaç. Particularment útil quan s'utilitza en conjunció amb el [shortcode de text remot](#text-remot).
Pots mostrar una ruta o URL per a un bloc de codi utilitzant la sintaxi nativa de Zola:
{{ admonition(type="warning", title="IMPORTANT", text="Aquesta funcionalitat requereix JavaScript. Per activar-la, configura `add_src_to_code_block = true` a la secció `[extra]` de la teva pàgina, secció, o `config.toml`.") }}
{{ aside(text="Requereix Zola 0.20.0 o superior.") }}
{{ add_src_to_code_block(src="https://github.com/welpo/doteki/blob/main/.gitignore") }}
````
```rust,name=src/main.rs
fn main() {
println!("Hola, món!");
}
```
````
```.gitignore
{{ remote_text(src="https://raw.githubusercontent.com/welpo/doteki/main/.gitignore") }}
Això renderitza:
```rust,name=src/main.rs
fn main() {
println!("Hola, món!");
}
```
Si estableixes el `name` com una URL (és a dir, comença amb `http` o `https`), pots convertir-lo en un enllaç clicable. Això és particularment útil quan s'utilitza juntament amb el [shortcode de text remot](#text-remot).
{{ admonition(type="warning", title="JavaScript necessari", text="La funció d'URLs clicables requereix JavaScript. Per habilitar-la, configura `code_block_name_links = true` a la secció `[extra]` de la teva pàgina, secció, o `config.toml`.") }}
```.gitignore,name=https://github.com/welpo/doteki/blob/main/.gitignore
__pycache__/
*coverage*
.vscode/
dist/
```
### Suport de shortcode heretat
El shortcode `add_src_to_code_block` segueix funcionant per retrocompatibilitat però serà descontinuat en una versió futura. Si us plau, utilitza la sintaxi nativa de Zola:
```
# Forma antiga (descontinuada):
{{/* add_src_to_code_block(src="ruta/al/fitxer.rs") */}}
# Forma nova (recomanada):
```rust,name=ruta/al/fitxer.rs
```
#### Ús
````
{{/* add_src_to_code_block(src="https://github.com/welpo/doteki/blob/main/.gitignore") */}}
```.gitignore
__pycache__/
**pycache**/
*coverage*
.vscode/
dist/
@ -215,6 +270,38 @@ dist/
## Shortcodes de text
### Aside (nota al marge)
Afegeix contingut complementari als marges en pantalles amples, o com a blocs distintius en mòbil.
{{ aside(text="*Nota al marge* ve de *nota* (del llatí, 'marca' o 'senyal') i *marge* (del llatí *margo*, 'vora' o 'límit').") }}
El shortcode accepta dos paràmetres:
- `position`: Establir com a `"right"` per col·locar al marge dret (per defecte, esquerre)
- El contingut es pot proporcionar mitjançant el paràmetre `text` o entre les etiquetes del shortcode
#### Ús
{{ admonition(type="warning", text="Separa la definició de la nota del shortcode amb dues línies en blanc per evitar errors de renderització.") }}
Fent servir el paràmetre `text`:
```
{{/* aside(text="*Nota al marge* ve de *nota* (del llatí, 'marca' o 'senyal') i *marge* (del llatí *margo*, 'vora' o 'límit').") */}}
```
Fent servir el cos del contingut i indicant la posició a la dreta:
```
{%/* aside(position="right") */%}
Una nota més llarga que
pot ocupar diverses línies.
S'admet *Markdown*.
{%/* end */%}
```
### Text remot
Afegeix text des d'una URL remota o un arxiu local.

View file

@ -1,7 +1,7 @@
+++
title = "Shortcodes personalizados"
date = 2023-02-19
updated = 2024-11-07
updated = 2025-08-01
description = "Este tema incluye algunos shortcodes personalizados útiles que puedes utilizar para mejorar tus publicaciones. Puedes mostrar imágenes que se adapten a los temas claro y oscuro, dar formato a una sección de referencias con un aspecto profesional, y más."
[taxonomies]
@ -11,7 +11,7 @@ tags = ["funcionalidad", "shortcodes"]
toc = true
toc_levels = 2
quick_navigation_buttons = true
add_src_to_code_block = true
code_block_name_links = true
mermaid = true
social_media_card = "social_cards/es_blog_shortcodes.jpg"
+++
@ -105,8 +105,9 @@ Tu diagrama Mermaid va aquí. Puedes omitir los parámetros para usar los valore
Todos los shortcodes de imagen admiten rutas absolutas, rutas relativas, y fuentes remotas en el parámetro `src`.
Todos los shortcodes de imagen tienen tres parámetros opcionales:
Todos los shortcodes de imagen tienen los siguientes parámetros opcionales:
- `raw_path`. Por defecto es `false`. Si se establece en `true`, el parámetro `src` se usará tal cual. Útil para activos ubicados en la misma carpeta que tienen un slug personalizado (ver [Zola issue #2598](https://github.com/getzola/zola/issues/2598)).
- `inline`. Valor predeterminado: `false`. Si se establece `true`, la imagen se mostrará en línea con el texto.
- `full_width`. Valor predeterminado: `false` (ver [más abajo](#imagen-a-ancho-completo)).
- `lazy_loading`. Valor predeterminado: `true`.
@ -185,35 +186,109 @@ Todos los otros shortcodes de imágenes pueden usar el ancho completo asignando
{{/* full_width_image(src="img/amsterdam_by_oskerwyld.webp", alt="Fotografía de un canal en Ámsterdam") */}}
```
## Shortcodes sociales
### iine
{{ aside(text="Para añadirlo a todas las publicaciones, establece `iine = true` en la sección `[extra]` de tu `config.toml`.") }}
Este shortcode te permite añadir botones adicionales de [iine.to](https://iine.to) a tus publicaciones, como este:
{{ iine(slug="/blog/shortcodes/demo-button") }}
#### Uso
```
{{/* iine(icon="heart", slug="/post/mi-slug-de-post/like", label="Me gusta esta publicación") */}}
```
El shortcode acepta los siguientes parámetros opcionales:
- `icon`: El icono a mostrar. Puede ser `heart`, `thumbs_up`, `upvote`, o cualquier emoji.
- `slug`: Un identificador único. Por defecto es la ruta de la página actual. Útil si quieres más de un botón en la misma página.
- `label`: La etiqueta de accesibilidad para el botón. Por defecto es "Me gusta esta publicación".
## Shortcodes de código
### Mostrar ruta o URL
Muestra una ruta o URL en el siguiente bloque de código encontrado. Si comienza con "http", se convertirá en un enlace. Particularmente útil cuando se usa junto con el [shortcode de texto remot](#texto-remoto).
Puedes mostrar una ruta o URL para un bloque de código usando la sintaxis nativa de Zola:
{{ add_src_to_code_block(src="https://github.com/welpo/doteki/blob/main/.gitignore") }}
```.gitignore
{{ remote_text(src="https://raw.githubusercontent.com/welpo/doteki/main/.gitignore") }}
```
{{ admonition(type="warning", title="IMPORTANT", text="Esta característica requiere JavaScript. Para habilitarla, configura `add_src_to_code_block = true` en la sección `[extra]` de tu página, sección, o `config.toml`.") }}
#### Uso
{{ aside(text="Requiere Zola 0.20.0 o superior.") }}
````
{{/* add_src_to_code_block(src="https://github.com/welpo/doteki/blob/main/.gitignore") */}}
```rust,name=src/main.rs
fn main() {
println!("¡Hola, mundo!");
}
```
````
```.gitignore
Esto renderiza:
```rust,name=src/main.rs
fn main() {
println!("¡Hola, mundo!");
}
```
Si estableces el `name` como una URL (es decir, comienza con `http` o `https`), puedes convertirlo en un enlace clickable. Esto es particularmente útil cuando se usa junto con el [shortcode de texto remoto](#texto-remoto).
{{ admonition(type="warning", title="JavaScript requerido", text="La función de URLs clickables requiere JavaScript. Para habilitarla, configura `code_block_name_links = true` en la sección `[extra]` de tu página, sección, o `config.toml`.") }}
```.gitignore,name=https://github.com/welpo/doteki/blob/main/.gitignore
__pycache__/
*coverage*
.vscode/
dist/
```
````
### Soporte de shortcode heredado
El shortcode `add_src_to_code_block` sigue funcionando por retrocompatibilidad, pero será descontinuado en una versión futura. Por favor, usa la sintaxis nativa de Zola:
```
# Forma antigua (descontinuada):
{{/* add_src_to_code_block(src="ruta/al/archivo.rs") */}}
# Forma nueva (recomendada):
```rust,name=ruta/al/archivo.rs
```
## Shortcodes de texto
### Aside (nota al margen)
Añade contenido complementario en los márgenes en pantallas anchas, o como bloques distintivos en móvil.
{{ aside(text="*Nota al margen* viene de *nota* (del latín, 'marca' o 'señal') y *margen* (del latín *margo*, 'borde' o 'límite').") }}
El shortcode acepta dos parámetros:
- `position`: Establecer como `"right"` para colocar en el margen derecho (por defecto, izquierdo)
- El contenido puede proporcionarse mediante el parámetro `text` o entre las etiquetas del shortcode
#### Uso
{{ admonition(type="warning", text="Separa la llamada al shortcode con saltos de línea para evitar errores de renderizado.") }}
Usando el parámetro `text`:
```
{{/* aside(text="*Nota al margen* viene de *nota* (del latín, 'marca' o 'señal') y *margen* (del latín *margo*, 'borde' o 'límite').") */}}
```
Usando el cuerpo del contenido e indicando la posición:
```
{%/* aside(position="right") */%}
Una nota más larga que
puede ocupar varias líneas.
Se admite *Markdown*.
{%/* end */%}
```
### Texto remoto
Añade texto desde una URL remota o un archivo local.

View file

@ -1,7 +1,7 @@
+++
title = "Custom shortcodes"
date = 2023-02-19
updated = 2024-11-07
updated = 2025-07-26
description = "This theme includes some useful custom shortcodes that you can use to enhance your posts. Whether you want to display images that adapt to light and dark themes, or format a professional-looking reference section, these custom shortcodes have got you covered."
[taxonomies]
@ -11,7 +11,7 @@ tags = ["showcase", "shortcodes"]
toc = true
toc_levels = 2
quick_navigation_buttons = true
add_src_to_code_block = true
code_block_name_links = true
mermaid = true
social_media_card = "social_cards/blog_shortcodes.jpg"
+++
@ -107,8 +107,9 @@ Your diagram goes here.
All image shortcodes support absolute paths, relative paths, and remote sources in the `src` parameter.
All image shortcodes have three optional parameters:
All image shortcodes have these optional parameters:
- `raw_path`. Defaults to `false`. If set to `true`, the `src` parameter will be used as is. Useful for colocated assets with a custom slug (see [Zola issue #2598](https://github.com/getzola/zola/issues/2598)).
- `inline`. Defaults to `false`. If set to `true`, the image will be displayed inline with the text.
- `full_width`. Defaults to `false` (see [below](#full-width-image))
- `lazy_loading`. Defaults to `true`.
@ -120,6 +121,7 @@ Useful if you want to use a different image for the light and dark themes:
{{ dual_theme_image(light_src="img/paris_day.webp", dark_src="img/paris_night.webp" alt="The Eiffel tower") }}
#### Usage
```
{{/* dual_theme_image(light_src="img/paris_day.webp", dark_src="img/paris_night.webp" alt="The Eiffel tower") */}}
```
@ -150,7 +152,7 @@ Images with too much brightness or contrast can be jarring against a dark backgr
### Swap image on hover
Povides an interaction where the image displayed changes as the user hovers over it. Useful for before-after comparisons, for example.
Provides an interaction where the image displayed changes as the user hovers over it. Useful for before-after comparisons, for example.
{{ image_hover(default_src="img/edited.webp", hovered_src="img/raw.webp", default_alt="Edited picture", hovered_alt="Original shot") }}
@ -186,35 +188,109 @@ All other image shortcodes can be made into full-width by setting the optional p
{{/* full_width_image(src="img/amsterdam_by_oskerwyld.webp", alt="Photograph of a canal in Amsterdam") */}}
```
## Engagement shortcodes
### iine
{{ aside(text="To add it to all posts, set `iine = true` in the `[extra]` section of your `config.toml`.") }}
This shortcode allows you to add extra [iine.to](https://iine.to) buttons to your posts, like this:
{{ iine(slug="/blog/shortcodes/demo-button") }}
#### Usage
```
{{/* iine(icon="heart", slug="/post/my-post-slug/like", label="Like this post") */}}
```
The shortcode takes the following optional parameters:
- `icon`: The icon to display. Can be `heart`, `thumbs_up`, `upvote`, or any emoji.
- `slug`: A unique identifier. Defaults to the current page's path. Useful if you want more than one button on the same page.
- `label`: The accessibility label for the button. Defaults to "Like this post".
## Code shortcodes
### Show source or path
Display a path or URL on the next code block found. If it starts with "http", it will become a link. Particularly useful when used in conjunction with the [remote text shortcode](#remote-text).
You can display a path or URL for a code block using Zola's native syntax:
{{ add_src_to_code_block(src="https://github.com/welpo/doteki/blob/main/.gitignore") }}
```.gitignore
{{ remote_text(src="https://raw.githubusercontent.com/welpo/doteki/main/.gitignore") }}
```
{{ admonition(type="warning", title="IMPORTANT", text="This feature requires JavaScript. To enable it, set `add_src_to_code_block = true` on the `[extra]` section of your page, section, or `config.toml`.") }}
#### Usage
{{ aside(text="Requires Zola 0.20.0 or later.") }}
````
{{/* add_src_to_code_block(src="https://github.com/welpo/doteki/blob/main/.gitignore") */}}
```rust,name=src/main.rs
fn main() {
println!("Hello, world!");
}
```
````
```.gitignore
This renders:
```rust,name=src/main.rs
fn main() {
println!("Hello, world!");
}
```
If you set the `name` to a URL (i.e. it starts with `http` or `https`), you can turn it into a clickable link. This is particularly useful when used in conjunction with the [remote text shortcode](#remote-text).
{{ admonition(type="warning", title="JavaScript required", text="The clickable URL feature requires JavaScript. To enable it, set `code_block_name_links = true` on the `[extra]` section of your page, section, or `config.toml`.") }}
```.gitignore,name=https://github.com/welpo/doteki/blob/main/.gitignore
__pycache__/
*coverage*
.vscode/
dist/
```
````
### Legacy shortcode support
The `add_src_to_code_block` shortcode is still supported for backward compatibility but will be deprecated in a future release. Please use Zola's native syntax shown above instead:
```
# Old way (deprecated):
{{/* add_src_to_code_block(src="path/to/file.rs") */}}
# New way (preferred):
```rust,name=path/to/file.rs
```
## Text shortcodes
### Aside (side/margin note)
Add supplementary content in the margins on wide screens, or as distinct blocks on mobile.
{{ aside(text="*Sidenote* comes from Latin *nota* ('mark') + Old English *síde* ('side').") }}
The shortcode accepts two parameters:
- `position`: Set to `"right"` to place in right margin (defaults to left)
- Content can be provided via `text` parameter or between shortcode tags
#### Usage
{{ admonition(type="warning", text="Place the aside shortcode on its own line to prevent formatting issues.") }}
Using the `text` parameter:
```
{{/* aside(text="*Sidenote* comes from Latin *nota* ('mark') + Old English *síde* ('side').") */}}
```
Using the content body and setting the position to right:
```
{%/* aside(position="right") */%}
A longer note that
can span multiple lines.
_Markdown_ is supported.
{%/* end */%}
```
### Remote text
Embed text from a remote URL or a local file. To display the path or URL on the code block, see the [show source or path shortcode](#show-source-or-path).
@ -299,12 +375,12 @@ Both methods support the same parameters (`type`, `icon`, and `title`), with the
This shortcode allows you to display both the translated and original text for a quote. The quotation marks will be added automatically:
{{ multilingual_quote(original="Qué sosiego, ir por la vida en silencio, saludando sólo a los amigos.", translated="What tranquility, to go through life in silence, greeting only friends.", author="Francisco Umbral") }}
{{ multilingual_quote(original="Qué sosiego, ir por la vida en silencio, saludando sólo a los amigos.", translated="What tranquillity, to go through life in silence, greeting only friends.", author="Francisco Umbral") }}
#### Usage
```
{{/* multilingual_quote(original="Qué sosiego, ir por la vida en silencio, saludando sólo a los amigos.", translated="What tranquility, to go through life in silence, greeting only friends.", author="Francisco Umbral") */}}
{{/* multilingual_quote(original="Qué sosiego, ir por la vida en silencio, saludando sólo a los amigos.", translated="What tranquillity, to go through life in silence, greeting only friends.", author="Francisco Umbral") */}}
```
### References with hanging indent
@ -386,10 +462,12 @@ Force the text direction of a content block. Overrides both the global `force_co
Accepts the parameter `direction`: the desired text direction. This can be either "ltr" (left-to-right) or "rtl" (right-to-left). Defaults to "ltr".
{% force_text_direction(direction="rtl") %}
```python
def مرحباالعالم():
print("مرحبا بالعالم!")
```
{% end %}
#### Usage

View file

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Before After
Before After

View file

@ -0,0 +1,7 @@
+++
render = false
insert_anchor_links = "right"
[extra]
hide_from_feed = true
+++

View file

@ -0,0 +1,40 @@
+++
title = "عني"
template = "info-page.html"
path = "/ar/about"
[extra]
quick_navigation_buttons = true
social_media_card = "social_cards/about.ar.jpg"
+++
مرحبًا بكم في العرض التقديمي ل[**تابي**]، وهو قالب لـ[Zola]، مولد المواقع الثابتة السريع.
**تابي** هو من ابتكار أوسكار فرنانديز ([welpo] على GitHub)، وقد صُمم في البداية لموقعه الشخصي [osc.garden]. هو قالب بشكل حديث غني بالميزات يوفر إعدادات افتراضية منطقية وآمنة.
يمكنك العثور على وثائق تشرح طريقة إستخدام **تابي** في [المدونة] و[الأرشيف]، سوف تجد بهم مقالات تشرح القالب وتقدم لك نظرة عامة حوله.
## الميزات
يركز **تابي** على الاداء ويدعم [تعدد اللغات] أي انه يمكن لمدونتك دعم أكثر من لغة، ويمكنك [تخصيص مظهرها]، ويمكنك [تفعيل التعليقات بها] أي السماح للأخرين بالتعليق على منشوراتك. و **تابي** لا يجبر مدونتك على إستخدام جافاسكربت، حيث انها [إختيارية] ولكنك سوف تفقد المميزات التي تحتاج إليها.
## المساهمة
نحن نقدر المساهمات! نرحب بالتبليغ على الأخطاء، وتحسينات الترجمة أو الوثائق (بغض النظر عن حجمها)، واقتراحات الميزات... تحقق من [إرشادات المساهمة] لمعرفة كيفية المساعدة. شكرًا لك!
## الترخيص
الكود متاح بموجب [رخصة MIT].
[**تابي**]: https://github.com/welpo/tabi
[Zola]: https://www.getzola.org
[welpo]: https://github.com/welpo
[osc.garden]: https://osc.garden
[المدونة]: https://welpo.github.io/tabi/blog
[الأرشيف]: https://welpo.github.io/tabi/archive
[تعدد اللغات]: https://welpo.github.io/tabi/blog/faq-languages
[تخصيص مظهرها]: https://welpo.github.io/tabi/blog/customise-tabi
[تفعيل التعليقات بها]: https://welpo.github.io/tabi/blog/comments
[إختيارية]: https://welpo.github.io/tabi/blog/javascript
[إرشادات المساهمة]: https://github.com/welpo/tabi/blob/main/CONTRIBUTING.md
[رخصة MIT]: https://choosealicense.com/licenses/mit

View file

@ -5,7 +5,6 @@ path = "/ca/about"
[extra]
quick_navigation_buttons = true
social_media_card = "social_cards/about.ca.jpg"
+++
Benvingut a la demo de [**tabi**](https://github.com/welpo/tabi), un tema per a [Zola](https://www.getzola.org/), un generador de llocs web estàtics rapidíssim.

View file

@ -5,7 +5,6 @@ path = "/es/about"
[extra]
quick_navigation_buttons = true
social_media_card = "social_cards/about.es.jpg"
+++
Bienvenido a la demo de [**tabi**](https://github.com/welpo/tabi), un tema para [Zola](https://www.getzola.org/), un rapidísimo generador de sitios estáticos.

View file

@ -5,7 +5,6 @@ path = "about"
[extra]
quick_navigation_buttons = true
social_media_card = "social_cards/about.jpg"
+++
Welcome to the demo of [**tabi**](https://github.com/welpo/tabi), a theme for [Zola](https://www.getzola.org/), a fast static site generator.

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

View file

@ -0,0 +1,95 @@
+++
title = "سياسة الخصوصية"
path = "/ar/privacy"
date = 2023-10-31
updated = 2024-05-12
+++
هذه السياسة توضح كيف نقوم بجمع ومعالجة بياناتك على هذا الموقع.
{{ toc() }}
## ما البيانات التي نجمعها؟
### التصفح العام {#what-general}
أثناء تصفح الموقع، لا يتم جمع أي معلومات شخصية.
### التعليقات {#what-comments}
نحن لا نجمع أي بيانات عند إرسال تعليق على تدوينة، لكن GitHub يجمع البيانات لتوفير الخدمة، حيث انه يتم توفيرها من خلاله.
### التحليلات {#what-analytics}
لتحسين الموقع، يتم جمع البيانات غير الشخصية التالية:
- **المرجع**: المصدر الذي قادك إلى هذا الموقع.
- **الرابط المطلوب**: الصفحة المحددة التي قمت بزيارتها.
- **وكيل المستخدم**: يحدد المتصفح ونظام التشغيل الذي تستخدمه (مثل "Safari 17.0، Mac OS X").
- **اسم البلد**: البلد الذي زرت الموقع منه، يتم تحديده بواسطة عنوان IP الخاص بك.
- **حجم الشاشة**: أبعاد شاشة جهازك.
- **الوقت**: الوقت الذي وصلت فيه إلى الموقع.
- **جلسة التصفح**: رمز تعريف مؤقت يتم إنشاؤه من عنوان IP الخاص بك، ومعلومات المتصفح، ورقم عشوائي. يُستخدم هذا للتعرف على جلسة التصفح لمدة 8 ساعات. بعد ذلك، يتم حذف الرمز من الذاكرة ولا يُخزن في أي مكان.
نحن لا نتتبع الزوار عبر الجلسات، ولا نتتبع مدة بقائك في الموقع أو أين تذهب بعد مغادرتك.
## كيف نجمع هذه البيانات؟
### التعليقات {#how-comments}
يتم جمع البيانات المرتبطة بالتعليقات باستخدام [Giscus](https://giscus.app/)، وهي منصة تمكن من إضافة التعليقات، المبنية على GitHub.
### التحليلات {#how-analytics}
يتم جمع البيانات غير الشخصية باستخدام نسخة مستضافة ذاتيًا من [GoatCounter](https://www.goatcounter.com/)، وهي منصة مفتوحة المصدر لتحليلات الويب تركز على الخصوصية.
## كيف سنستخدم البيانات؟
تُستخدم البيانات المرسلة إلى GitHub لعرض تعليقك على الموقع.
تُستخدم البيانات غير الشخصية لإنشاء إحصائيات حول الموقع، مثل عدد الزوار يوميًا، أو الصفحات والمراجع الأكثر شعبية. تُستخدم هذه البيانات لتحسين هذا الموقع التجريبي وقالب تابي. يمكنك رؤية الإحصائيات الناتجة عن هذه البيانات على [صفحة الإحصائيات العامة](https://tabi-stats.osc.garden/).
جميع البيانات المجمعة متاحة للجمهور، سواء في شكل تعليقات أو إحصائيات.
نحن لا نستخدم البيانات لأي غرض آخر.
## كيف نقوم بتخزين البيانات؟
بيانات التعليقات لا تُخزن بواسطة Giscus، كما هو موضح في [سياسة الخصوصية الخاصة بهم](https://github.com/giscus/giscus/blob/main/PRIVACY-POLICY.md#what-data-do-we-collect). يتم تخزين البيانات على خوادم GitHub. راجع [سياسة الخصوصية الخاصة بGitHub](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement).
يتم تخزين بيانات التحليلات على خادم مستضاف بواسطة [Vultr](https://www.vultr.com/). يقع الخادم في باريس، فرنسا.
## كم من الوقت سنقوم بتخزين البيانات؟
تُخزن التعليقات إلى أجل غير مسمى، أو حتى تطلب حذفها.
تُخزن باقي البيانات إلى أجل غير مسمى.
## ما هي حقوقك في حماية البيانات؟
اعتمادًا على المعالجة والأساس القانوني، هناك عدد من الخيارات المتاحة لك للحفاظ على السيطرة على بياناتك الشخصية:
- حق الوصول إلى بياناتك
- حق تعديل بياناتك
- حق الاعتراض على معالجة بياناتك الشخصية
- حق تقييد معالجة بياناتك
- حق حذف بياناتك
- حق سحب موافقتك
إذا قدمت طلبًا، لدينا شهر واحد للرد عليك. إذا كنت ترغب في ممارسة أي من هذه الحقوق، يرجى الاتصال بنا باستخدام أيقونة البريد الإلكتروني في تذييل الموقع.
## الكوكيز
الموقع لا يستخدم الكوكيز.
## سياسات الخصوصية لمواقع أخرى
يحتوي هذا الموقع على روابط لمواقع أخرى. تنطبق سياسة الخصوصية هذه فقط على هذا الموقع، لذا إذا قمت بالنقر على رابط لموقع آخر، يجب عليك قراءة سياسة الخصوصية الخاصة بهم.
## التغييرات على سياسة الخصوصية
نحن نراجع هذه السياسة بانتظام ونضع أي تحديثات على هذه الصفحة. يمكنك التحقق من تاريخ تحديث هذه السياسة، بالإضافة إلى سجل التغييرات تحت عنوان الصفحة.
## كيف تتواصل معنا
إذا كانت لديك أي أسئلة حول سياسة الخصوصية هذه، أو البيانات التي نحتفظ بها عنك، أو إذا كنت ترغب في ممارسة أحد حقوق حماية البيانات الخاصة بك، فلا تتردد في الاتصال بنا باستخدام أيقونة البريد الإلكتروني في تذييل الموقع.

View file

@ -0,0 +1,10 @@
+++
title = "مشاريعي"
sort_by = "weight"
template = "cards.html"
insert_anchor_links = "right"
[extra]
show_reading_time = false
quick_navigation_buttons = true
+++

View file

@ -5,7 +5,7 @@ template = "cards.html"
insert_anchor_links = "left"
[extra]
social_media_card = "projects/social_cards/ca_projects.jpg"
social_media_card = "projects/ca_projects.jpg"
show_reading_time = false
quick_navigation_buttons = true
+++

View file

@ -5,7 +5,7 @@ template = "cards.html"
insert_anchor_links = "left"
[extra]
social_media_card = "projects/social_cards/es_projects.jpg"
social_media_card = "projects/es_projects.jpg"
show_reading_time = false
quick_navigation_buttons = true
+++

View file

@ -5,7 +5,8 @@ template = "cards.html"
insert_anchor_links = "left"
[extra]
social_media_card = "projects/social_cards/projects.jpg"
social_media_card = "projects/projects.jpg"
show_reading_time = false
quick_navigation_buttons = true
iine_icon = 'heart'
+++

View file

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

@ -3,33 +3,58 @@ title = "dōteki"
description = "Afegeix contingut dinàmic al teu perfil de GitHub amb un sistema intuïtiu de plugins."
weight = 30
[taxonomies]
tags = ["GitHub Actions", "automatització", "Python"]
[extra]
local_image = "projects/doteki/doteki_logo.webp"
social_media_card = "social_cards/projects_doteki.jpg"
canonical_url = "https://osc.garden/ca/projects/doteki/"
+++
[**dōteki**](https://doteki.org/) és una eina dissenyada per donar vida als perfils de GitHub afegint contingut dinàmic de manera senzilla. Amb un arxiu de configuració TOML intuïtiu i un sistema de plugins versàtil, **dōteki** permet als usuaris mostrar contingut recent i automatitzat directament als seus perfils de GitHub.
**dōteki** actualitza el teu perfil de GitHub automàticament. Afegeix les teves últimes publicacions del blog, la música que escoltes o qualsevol altre contingut dinàmic mitjançant plugins.
![logo de dōteki: un riu passant per un bosc de bambú](https://cdn.jsdelivr.net/gh/welpo/doteki@main/website/static/img/logo.png)
#### [GitHub](https://github.com/welpo/doteki) • [Lloc web](https://doteki.org/) • [Documentació](https://doteki.org/docs/) {.centered-text}
## Per què dōteki?
## Com funciona
**dōteki** destaca per la seva simplicitat i potència. És altament personalitzable i extensible, i està dissenyat per ser fàcil de configurar i utilitzar.
1. Afegeix marcadors al teu README:
## Característiques clau
```md,name=README.md
<!-- blog start -->
<!-- blog end -->
```
- **Plug-and-Play**: Afegeix marcadors al teu README i utilitza un arxiu TOML per incorporar seccions de contingut dinàmic al teu perfil de GitHub.
- **Sistema de plugins extensible**: Des de mostrar les últimes publicacions del teu blog fins a compartir la música que has estat escoltant, el sistema de plugins permet infinites possibilitats. No trobes un plugin que s'ajusti a les teves necessitats? [Crea el teu propi](https://doteki.org/docs/developer-guide/plugin-standard)!
- [**Documentació exhaustiva**](https://doteki.org/docs/) amb informació detallada sobre com configurar i utilitzar **dōteki** i els seus plugins. Inclou [instruccions clares per als desenvolupadors](https://doteki.org/docs/developer-guide/) que vulguin contribuir al projecte.
- **Preparat per a l'automatització**: Utilitza l'[Acció de GitHub](https://github.com/welpo/doteki-action) per mantenir el teu perfil sempre actualitzat.
2. Configura què hi va:
## Refresca el teu perfil de GitHub
```toml,name=doteki.toml
[sections.blog]
plugin = "feed"
url = "https://osc.garden/atom.xml" # Substitueix amb el teu feed.
Aprofita les capacitats dinàmiques de **dōteki** i transforma el teu perfil de GitHub en un aparador del teu treball més recent, pensaments i interessos.
[sections.last_updated]
plugin = "current_date"
inline = true
```
[Configura **dōteki** en menys de 5 minuts](https://doteki.org/) i dóna vida al teu perfil de GitHub.
3. Configura l'[Acció de GitHub](https://github.com/welpo/doteki-action).
[![targeta de xarxes socials de dōteki](social_cards/projects_doteki.jpg)](https://doteki.org/)
Això és tot! El teu README s'actualitzarà automàticament.
## Característiques
- **Sistema de plugins**: Mostra [entrades del blog](https://doteki.org/docs/plugins/feed), [música](https://doteki.org/docs/plugins/lastfm), o [crea el teu propi plugin](https://doteki.org/docs/developer-guide/plugin-standard)
- **Configuració simple**: Un arxiu TOML, una Acció de GitHub
- **Flexible**: Cada plugin té les seves pròpies opcions (ordre, entrades màximes, format…)
- **[Documentació detallada](https://doteki.org/docs/)**: Informació detallada sobre com configurar i utilitzar **dōteki** i els seus plugins. Inclou [instruccions clares per als desenvolupadors](https://doteki.org/docs/developer-guide/) que vulguin contribuir.
## Documentació
Consulta la [documentació](https://doteki.org/docs/) per a:
- [Guia d'inici](https://doteki.org/docs/)
- [Plugins disponibles](https://doteki.org/docs/category/plugins)
- [Desenvolupament de plugins](https://doteki.org/docs/developer-guide/)
- [Opcions de configuració](https://doteki.org/docs/configuration/)

View file

@ -3,33 +3,58 @@ title = "dōteki"
description = "Añade contenido dinámico a tu perfil de GitHub con un sistema intuitivo de plugins."
weight = 30
[taxonomies]
tags = ["GitHub Actions", "automatización", "Python"]
[extra]
local_image = "projects/doteki/doteki_logo.webp"
social_media_card = "social_cards/projects_doteki.jpg"
canonical_url = "https://osc.garden/es/projects/doteki/"
+++
[**dōteki**](https://doteki.org/) es una herramienta diseñada para dar vida a los perfiles de GitHub añadiendo contenido dinámico de manera sencilla. Con un archivo de configuración TOML intuitivo y un versátil sistema de plugins, **dōteki** permite a los usuarios mostrar contenido reciente y automatizado directamente en sus perfiles de GitHub.
**dōteki** actualiza tu perfil de GitHub automáticamente. Añade tus últimas publicaciones del blog, la música que escuchas o cualquier otro contenido dinámico mediante plugins.
![logo de dōteki: un río pasando por un bosque de bambú](https://cdn.jsdelivr.net/gh/welpo/doteki@main/website/static/img/logo.png)
#### [GitHub](https://github.com/welpo/doteki) • [Sitio web](https://doteki.org/) • [Documentación](https://doteki.org/docs/) {.centered-text}
## ¿Por qué dōteki?
## Cómo funciona
**dōteki** destaca por su simplicidad y potencia. Permite mostrar tu trabajo, intereses y personalidad en tu perfil de GitHub, siempre al día. Es altamente personalizable y extensible, y está diseñado para ser fácil de configurar y usar.
1. Añade marcadores a tu README:
## Características clave
```md,name=README.md
<!-- blog start -->
<!-- blog end -->
```
- **Plug-and-Play**: Añade marcadores a tu README y utiliza un archivo TOML para incorporar secciones de contenido dinámico en tu perfil de GitHub.
- **Sistema de plugins extensible**: Desde mostrar las últimas publicaciones de tu blog hasta compartir la música que has estado escuchando, el sistema de plugins permite infinitas posibilidades. ¿No encuentras un plugin que se ajuste a tus necesidades? ¡[Crea tu propio plugin](https://doteki.org/docs/developer-guide/plugin-standard)!
- [**Documentación exhaustiva**](https://doteki.org/docs/) con información detallada sobre cómo configurar y usar **dōteki** y sus plugins. Incluye [instrucciones claras para los desarrolladores](https://doteki.org/docs/developer-guide/) que quieran contribuir al proyecto
- **Listo para la automatización**: Utiliza la [Acción de GitHub](https://github.com/welpo/doteki-action) para mantener tu perfil siempre actualizado.
2. Configura qué va ahí:
## Refresca tu perfil de GitHub
```toml,name=doteki.toml
[sections.blog]
plugin = "feed"
url = "https://osc.garden/atom.xml" # Reemplaza con tu feed.
Aprovecha las capacidades dinámicas de **dōteki** y transforma tu perfil de GitHub en un escaparate de tu trabajo más reciente, pensamientos e intereses.
[sections.last_updated]
plugin = "current_date"
inline = true
```
[Configura **dōteki** en menos de 5 minutos](https://doteki.org/) y da vida a tu perfil de GitHub.
3. Configura la [Acción de GitHub](https://github.com/welpo/doteki-action).
[![tarjeta de redes sociales de dōteki](social_cards/projects_doteki.jpg)](https://doteki.org/)
¡Eso es todo! Tu README se actualizará automáticamente.
## Características
- **Sistema de plugins**: Muestra [entradas del blog](https://doteki.org/docs/plugins/feed), [música](https://doteki.org/docs/plugins/lastfm), o [crea tu propio plugin](https://doteki.org/docs/developer-guide/plugin-standard)
- **Configuración simple**: Un archivo TOML, una Acción de GitHub
- **Flexible**: Cada plugin tiene sus propias opciones (orden, entradas máximas, formato…)
- **[Documentación detallada](https://doteki.org/docs/)**: Información detallada sobre cómo configurar y usar **dōteki** y sus plugins. Incluye [instrucciones claras para los desarrolladores](https://doteki.org/docs/developer-guide/) que quieran contribuir.
## Documentación
Consulta la [documentación](https://doteki.org/docs/) para:
- [Guía de inicio rápido](https://doteki.org/docs/)
- [Plugins disponibles](https://doteki.org/docs/category/plugins)
- [Desarrollo de plugins](https://doteki.org/docs/developer-guide/)
- [Opciones de configuración](https://doteki.org/docs/configuration/)

View file

@ -3,33 +3,58 @@ title = "dōteki"
description = "Add dynamic content to your GitHub profile through an intuitive plugin system."
weight = 30
[taxonomies]
tags = ["GitHub Actions", "automation", "Python"]
[extra]
local_image = "projects/doteki/doteki_logo.webp"
social_media_card = "social_cards/projects_doteki.jpg"
canonical_url = "https://osc.garden/projects/doteki/"
+++
[**dōteki**](https://doteki.org/) is a tool designed to breathe life into GitHub profiles by adding dynamic content effortlessly. By leveraging an intuitive TOML configuration file along with a versatile plugin system, **dōteki** empowers users to showcase fresh, automated content directly on their GitHub profiles.
**dōteki** updates your GitHub profile README automatically. Add your latest blog posts, music you're listening to, or any other dynamic content using plugins.
![doteki logo: a river passing through a bamboo forest](https://cdn.jsdelivr.net/gh/welpo/doteki@main/website/static/img/logo.png)
#### [GitHub](https://github.com/welpo/doteki) • [Website](https://doteki.org/) • [Documentation](https://doteki.org/docs/) {.centered-text}
## Why dōteki?
## How it works
**dōteki** stands out for its simplicity and power, enabling you to dynamically showcase your work, interests and personality on your GitHub profile. It's designed to be easy to set up and use, while also being highly customizable and extensible.
1. Add markers to your README:
## Key Features
```md,name=README.md
<!-- blog start -->
<!-- blog end -->
```
- **Plug-and-Play**: Add markers to your README and use a TOML file for straightforward setup and easy management of dynamic content sections on your GitHub profile README.
- **Extensible plugin system**: From showcasing your latest blog posts to displaying your favourite music, the plugin system allows for endless possibilities. Can't find a plugin that suits your needs? [Create your own](https://doteki.org/docs/developer-guide/plugin-standard)!
- **Extensive documentation**: The [comprehensive documentation](https://doteki.org/docs/) provides detailed information on how to set up and use **dōteki** and its plugins. It includes [clear instructions for developers](https://doteki.org/docs/developer-guide/) looking to contribute.
- **Automation Ready**: Use the [GitHub Action](https://github.com/welpo/doteki-action) to keep your profile always up to date.
2. Configure what goes there:
## Enhance Your GitHub Profile Today
```toml,name=doteki.toml
[sections.blog]
plugin = "feed"
url = "https://osc.garden/atom.xml" # Replace with your feed.
Embrace the dynamic capabilities of **dōteki** and transform your GitHub profile into a vibrant showcase of your latest work, thoughts, and interests.
[sections.last_updated]
plugin = "current_date"
inline = true
```
[Set up **dōteki** in less than 5 minutes](https://doteki.org/) and bring your GitHub profile to life.
3. Set up the [GitHub Action](https://github.com/welpo/doteki-action).
[![dōteki social media card](social_cards/projects_doteki.jpg)](https://doteki.org/)
That's it! Your README will stay updated automatically.
## Features
- **Plugin system**: Show [blog posts](https://doteki.org/docs/plugins/feed), [music](https://doteki.org/docs/plugins/lastfm), or [build your own plugin](https://doteki.org/docs/developer-guide/plugin-standard)
- **Simple setup**: One TOML file, one GitHub Action
- **Flexible**: Each plugin has its own options (sort order, max entries, format…)
- **[Extensive documentation](https://doteki.org/docs/)**: Detailed information on how to set up and use **dōteki** and its plugins. It includes [clear instructions for developers](https://doteki.org/docs/developer-guide/) looking to contribute.
## Documentation
Check the [docs](https://doteki.org/docs/) for:
- [Getting started guide](https://doteki.org/docs/)
- [Available plugins](https://doteki.org/docs/category/plugins)
- [Plugin development](https://doteki.org/docs/developer-guide/)
- [Configuration options](https://doteki.org/docs/configuration/)

View file

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

View file

@ -3,13 +3,16 @@ title = "git-sumi"
description = "El linter de missatges de commit no opinat basat en Rust."
weight = 10
[taxonomies]
tags = ["Git", "Rust", "Continuous Integration", "GitHub Actions", "CLI", "automatització"]
[extra]
local_image = "projects/git-sumi/git-sumi_logo.webp"
social_media_card = "social_cards/projects_git-sumi.jpg"
canonical_url = "https://osc.garden/ca/projects/git-sumi/"
+++
**git-sumi** és un linter de missatges de commit no opinat escrit en Rust. És una eina flexible per complir els teus estàndards de missatges de commit, facilitant missatges consistents i fàcilment automatitzables.
**git-sumi** és el linter de missatges de commit no opinat escrit en Rust.
{% wide_container() %}
<video controls src="https://cdn.jsdelivr.net/gh/welpo/git-sumi@main/assets/git-sumi_demo.mp4" title="demo de git-sumi"></video>
@ -19,21 +22,12 @@ canonical_url = "https://osc.garden/ca/projects/git-sumi/"
## Característiques principals
- **Regles personalitzables**: Configura git-**sumi** per satisfer els requisits específics de cada projecte. Configura regles per a Conventional Commits, límits de longitud, ús de Gitmoji i més a través d'un senzill arxiu de configuració TOML.
- **Informe d'errors clar**: Proporciona un informe d'errors detallat, fent que la correcció sigui senzilla i educativa.
- **Integració sense fissures**: Sent un únic binari, git-**sumi** s'integra fàcilment en el teu flux de treball. Fins i tot pots utilitzar l'[Acció de GitHub](https://github.com/welpo/git-sumi-action) per validar els teus commits (o títols de PR) sense necessitat d'instal·lar res localment.
- **Regles personalitzables**: Configura regles per a Conventional Commits, límits de longitud, ús de [Gitmoji](https://gitmoji.dev/) i [més](https://sumi.rs/docs/rules).
- **Informe d'errors clar**: Proporciona errors detallats, fent que la correcció sigui senzilla i educativa.
- **Integració senzilla**: Com a binari únic, git-sumi s'integra fàcilment al teu flux de treball. També pots fer servir l'[Acció de GitHub](https://github.com/welpo/git-sumi-action) per validar commits (o títols de PR) sense instal·lar res.
## Bones pràctiques de desenvolupament
- **Ampla cobertura del codi**: Més del 95% de cobertura de línies i una cobertura de característiques exhaustiva garanteixen la robustesa de git-**sumi**.
- **Integració [contínua](https://github.com/welpo/git-sumi/blob/main/.github/workflows/ci.yml) i [publicació](https://github.com/welpo/git-sumi/blob/main/.github/workflows/release.yml)**: Fluxos de treball automatitzats per provar, integrar i publicar asseguren que cada versió de git-**sumi** estigui completament provada i llesta per al seu ús.
- **Contribucions de la comunitat**: Fomenta les contribucions de la comunitat de tot tipus, amb un enfocament acollidor tant per als nouvinguts com per als desenvolupadors experimentats.
- [**Documentació exhaustiva**](https://sumi.rs/docs/) per començar amb git-**sumi** i comprendre les seves característiques i capacitats.
## Comença a millorar les teves pràctiques de commit avui
Fes el primer pas cap a la transformació de les teves pràctiques de commit. La combinació de flexibilitat, retroalimentació detallada i fàcil integració de git-**sumi** el converteix en l'opció perfecta per a equips i individus que busquen millorar els seus missatges de commit.
[Descobreix **git-sumi**](https://sumi.rs/) i fes-lo part del teu kit d'eines de desenvolupament.
[![targeta de xarxes socials de git-sumi](social_cards/projects_git-sumi.jpg)](https://sumi.rs/)
- **Cobertura de codi**: 98% de cobertura en tests; un linter ha de ser fiable.
- **[Integració](https://github.com/welpo/git-sumi/blob/main/.github/workflows/ci.yml) i [publicació](https://github.com/welpo/git-sumi/blob/main/.github/workflows/release.yml) contínua**: Fluxos automatitzats per a testing i publicació de binaris multiplataforma a crates.io, PyPI i GitHub releases.
- **Documentació**: [Documentació completa](https://sumi.rs/docs/) amb [guia ràpida](https://sumi.rs/docs/), [exemples](https://sumi.rs/docs/examples), [regles](https://sumi.rs/docs/rules), [integració](https://sumi.rs/docs/integration), [FAQ](https://sumi.rs/docs/faq)...

View file

@ -3,13 +3,16 @@ title = "git-sumi"
description = "El linter de mensajes de commit no opinado basado en Rust."
weight = 10
[taxonomies]
tags = ["Git", "Rust", "Continuous Integration", "GitHub Actions", "CLI", "automatización"]
[extra]
local_image = "projects/git-sumi/git-sumi_logo.webp"
social_media_card = "social_cards/projects_git-sumi.jpg"
canonical_url = "https://osc.garden/es/projects/git-sumi/"
+++
**git-sumi** es un linter de mensajes de commit no opinado escrito en Rust. Es una herramienta flexible para cumplir tus estándares de mensajes de commit, facilitando mensajes consistentes y fácilmente automatizables.
**git-sumi** es el linter de mensajes de commit no opinado escrito en Rust.
{% wide_container() %}
<video controls src="https://cdn.jsdelivr.net/gh/welpo/git-sumi@main/assets/git-sumi_demo.mp4" title="git-sumi demo"></video>
@ -19,21 +22,12 @@ canonical_url = "https://osc.garden/es/projects/git-sumi/"
## Características principales
- **Reglas personalizables**: Configura git-**sumi** para satisfacer los requisitos específicos de cada proyecto. Configura reglas para Conventional Commits, límites de longitud, uso de Gitmoji y más a través de un archivo de un sencillo archivo de configuración TOML.
- **Reporte de errores claro**: Proporciona un reporte de errores detallado, haciendo que la corrección sea sencilla y educativa.
- **Integración sin fisuras**: Al ser único binario, git-**sumi** se integra fácilmente en tu flujo de trabajo. Incluso puedes usar la [Acción de GitHub](https://github.com/welpo/git-sumi-action) para validar tus commits (o títulos de PR) sin necesidad de instalar nada localmente.
- **Reglas personalizables**: Configura reglas para [Conventional Commits](https://www.conventionalcommits.org/), límites de longitud, uso de [Gitmoji](https://gitmoji.dev/) y [más](https://sumi.rs/docs/rules).
- **Reporte de errores claro**: Proporciona errores detallados, haciendo que la corrección sea sencilla y educativa.
- **Integración sencilla**: Al ser único binario, git-sumi se integra fácilmente en tu flujo de trabajo. Puedes usar la [Acción de GitHub](https://github.com/welpo/git-sumi-action) para validar commits (o títulos de PR) sin instalar nada.
## Buenas prácticas de desarrollo
- **Amplia cobertura del código**: Más del 95% de cobertura de líneas y una cobertura de características exhaustiva garantizan la robustez de git-**sumi**.
- **Integración [continua](https://github.com/welpo/git-sumi/blob/main/.github/workflows/ci.yml) y [publicación](https://github.com/welpo/git-sumi/blob/main/.github/workflows/release.yml)**: Flujos de trabajo automatizados para probar, integrar y publicar aseguran que cada versión de git-**sumi** esté completamente probada y lista para su uso.
- **Contribuciones de la comunidad**: Fomenta las contribuciones de la comunidad de todo tipo, con un enfoque acogedor tanto para los recién llegados como para los desarrolladores experimentados.
- [**Documentación exhaustiva**](https://sumi.rs/docs/) para empezar con git-**sumi** y comprender sus características y capacidades.
## Empieza a mejorar tus prácticas de commit hoy
Da el primer paso hacia la transformación de tus prácticas de commit. La combinación de flexibilidad, retroalimentación detallada y fácil integración de git-**sumi** lo convierte en la opción perfecta para equipos e individuos que buscan mejorar sus mensajes de commit.
[Descubre **git-sumi**](https://sumi.rs/) y hazlo parte de tu kit de herramientas de desarrollo.
[![tarjeta de redes sociales de git-sumi](social_cards/projects_git-sumi.jpg)](https://sumi.rs/)
- **Cobertura de código**: 98% de cobertura de código; un linter debe ser robusto.
- **[Integración](https://github.com/welpo/git-sumi/blob/main/.github/workflows/ci.yml) y [publicación](https://github.com/welpo/git-sumi/blob/main/.github/workflows/release.yml) continua**: Flujos automatizados para testing y publicación de binarios multiplataforma en crates.io, PyPI y GitHub releases.
- **Documentación**: [Documentación completa](https://sumi.rs/docs/) con [guía rápida](https://sumi.rs/docs/), [ejemplos](https://sumi.rs/docs/examples), [reglas](https://sumi.rs/docs/rules), [integración](https://sumi.rs/docs/integration), [FAQ](https://sumi.rs/docs/faq)...

View file

@ -3,13 +3,16 @@ title = "git-sumi"
description = "The non-opinionated Rust-based commit message linter."
weight = 10
[taxonomies]
tags = ["Git", "Rust", "Continuous Integration", "GitHub Actions", "CLI", "automation"]
[extra]
local_image = "projects/git-sumi/git-sumi_logo.webp"
social_media_card = "social_cards/projects_git-sumi.jpg"
canonical_url = "https://osc.garden/projects/git-sumi/"
+++
**git-sumi** is a non-opinionated commit message linter written in Rust. It's a flexible tool to enforce commit message standards, ensuring consistent and automation-friendly commit messages.
**git-sumi** is the non-opinionated commit message linter written in Rust.
{% wide_container() %}
<video controls src="https://cdn.jsdelivr.net/gh/welpo/git-sumi@main/assets/git-sumi_demo.mp4" title="git-sumi demo"></video>
@ -17,23 +20,14 @@ canonical_url = "https://osc.garden/projects/git-sumi/"
#### [GitHub](https://github.com/welpo/git-sumi) • [Website](https://sumi.rs/) • [Documentation](https://sumi.rs/docs/) {.centered-text}
## Main Features
## Main features
- **Customizable rules**: Tailor git-sumi to meet the specific requirements of each project. Configure rules to enforce Conventional Commits, length limits, Gitmoji usage, and more through a simple TOML configuration file.
- **Customizable rules**: Configure rules to enforce [Conventional Commits](https://www.conventionalcommits.org/), length limits, [Gitmoji](https://gitmoji.dev/) usage, and [more](https://sumi.rs/docs/rules).
- **Clear error reporting**: Provides detailed error reporting, making fixing commit messages straightforward and educational.
- **Seamless integration**: As a single binary, git-sumi integrates easily into your existing workflow with minimal setup. You can even use the [GitHub Action](https://github.com/welpo/git-sumi-action) to lint your commits (or PR titles) without installing anything locally.
- **Seamless integration**: As a single binary, git-sumi easily integrates into your existing workflow with minimal setup. You can even use the [GitHub Action](https://github.com/welpo/git-sumi-action) to lint your commits (or PR titles) without installing anything.
## Development Best Practices
## Development best practices
- **Comprehensive code coverage**: Over 95% line coverage and thorough feature coverage ensures that git-sumi is reliable, robust, and ready for use.
- **Continuous [integration](https://github.com/welpo/git-sumi/blob/main/.github/workflows/ci.yml) and [deployment](https://github.com/welpo/git-sumi/blob/main/.github/workflows/release.yml)**: Automated workflows for testing, releasing, and deploying, ensuring that each version of git-sumi is thoroughly tested and ready for use.
- **Community contributions**: Encourages contributions from the community, including feature requests, bug reports, and enhancements, with a welcoming approach to both newcomers and seasoned developers.
- **Documentation**: [Comprehensive documentation](https://sumi.rs/docs/) to help users get started with git-sumi and understand its features and capabilities.
## Start Enhancing Your Commit Practices Today
Take the first step towards transforming your commit practices. git-sumi's blend of flexibility, detailed feedback, and ease of integration makes it the perfect choice for teams and individuals looking to improve their Git commit messages.
[Discover **git-sumi**](https://sumi.rs/) and make it a part of your development toolkit.
[![git-sumi social media card](social_cards/projects_git-sumi.jpg)](https://sumi.rs/)
- **Comprehensive code coverage**: 98% test coverage; linting needs to be reliable.
- **Continuous [integration](https://github.com/welpo/git-sumi/blob/main/.github/workflows/ci.yml) and [deployment](https://github.com/welpo/git-sumi/blob/main/.github/workflows/release.yml)**: Automated workflows for testing and releasing cross-compiled binaries to crates.io, PyPI and GitHub releases.
- **Documentation**: [Comprehensive documentation](https://sumi.rs/docs/) with a [quick start guide](https://sumi.rs/docs/), [examples](https://sumi.rs/docs/examples), [rules](https://sumi.rs/docs/rules), [integration](https://sumi.rs/docs/integration), [FAQ](https://sumi.rs/docs/faq)…

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View file

@ -0,0 +1,52 @@
+++
title = "iine"
description = "Botons d'apreciació centrats en la privadesa i accessibles per a la web petita/independent."
weight = 15
[taxonomies]
tags = ["web", "JavaScript", "privadesa", "backend"]
[extra]
local_image = "projects/iine/iine_logo.webp"
social_media_card = "social_cards/projects_iine.jpg"
canonical_url = "https://osc.garden/projects/iine/"
+++
Botons d'apreciació per al teu blog, jardí digital, portafoli… No cal compte. Sense seguiment.
#### [GitHub](https://github.com/welpo/iine) • [Web](https://iine.to) {.centered-text}
## Característiques
- Sense marques de temps, sense IPs, sense seguiment
- ~3KB de JavaScript vanilla
- Funciona sense JavaScript
- Diverses icones: cor, polze amunt, vot positiu, o qualsevol emoji
- Construït per a la web petita/independent
- Gratuït per sempre
- Accessible per disseny
- Auto-hostejable
## Inici ràpid
Afegeix botons d'apreciació al teu lloc amb dues línies. Carrega l'script:
```html
<script defer src="https://cdn.jsdelivr.net/gh/welpo/iine@main/iine.mini.js"></script>
```
Afegeix el botó:
```html
<button class="iine-button" aria-hidden="true"></button>
```
Fet. Els teus visitants ja poden mostrar apreciació anònima pel teu contingut.
## Per què iine?
Volia afegir botons de m'agrada/felicitacions/alegria/apreciació al [meu blog](https://osc.garden) sense registrar-me a res, i assegurant-me que els meus visitants no fossin rastrejats.
Esperant que altres ho trobin útil, vaig fer el servei públic (codi obert) i gratuït per sempre (almenys fins que doni suport a més de 100k llocs web).
Construït per a blogs, portafolis, jardins digitals, i qualsevol que cregui que la web hauria de ser més humana.

View file

@ -0,0 +1,52 @@
+++
title = "iine"
description = "Botones de apreciación centrados en la privacidad y accesibles para la web pequeña."
weight = 15
[taxonomies]
tags = ["web", "JavaScript", "privacidad", "backend"]
[extra]
local_image = "projects/iine/iine_logo.webp"
social_media_card = "social_cards/projects_iine.jpg"
canonical_url = "https://osc.garden/projects/iine/"
+++
Botones de apreciación para tu blog, jardín digital, portafolio… Sin cuenta requerida. Sin seguimiento.
#### [GitHub](https://github.com/welpo/iine) • [Sitio web](https://iine.to) {.centered-text}
## Características
- Sin marcas de tiempo, sin IPs, sin seguimiento
- ~3KB de JavaScript vanilla
- Funciona sin JavaScript
- Varios iconos: corazón, pulgar arriba, voto positivo, o cualquier emoji
- Construido para la web pequeña/independiente
- Gratis para siempre
- Accesible por diseño
- Auto-hosteable
## Inicio rápido
Añade botones de apreciación a tu sitio con dos líneas. Carga el script:
```html
<script defer src="https://cdn.jsdelivr.net/gh/welpo/iine@main/iine.mini.js"></script>
```
Añade el botón:
```html
<button class="iine-button" aria-hidden="true"></button>
```
Listo. Tus visitantes ya pueden mostrar apreciación anónima por tu contenido.
## ¿Por qué iine?
Quería añadir botones de me gusta/felicitaciones/alegría/apreciación a [mi blog](https://osc.garden) sin registrarme en nada, y asegurándome de que mis visitantes no fueran rastreados.
Esperando que otros lo encuentren útil, hice el servicio público (código abierto) y gratis para siempre (al menos hasta que soporte más de 100k sitios web).
Construido para blogs, portafolios, jardines digitales, y cualquiera que crea que la web debería ser más humana.

View file

@ -0,0 +1,52 @@
+++
title = "iine"
description = "Privacy-focused & accessible like buttons for the small web."
weight = 15
[taxonomies]
tags = ["web", "JavaScript", "privacy", "backend"]
[extra]
local_image = "projects/iine/iine_logo.webp"
social_media_card = "social_cards/projects_iine.jpg"
canonical_url = "https://osc.garden/projects/iine/"
+++
Appreciation buttons for your blog, digital garden, portfolio… No account required. No tracking.
#### [GitHub](https://github.com/welpo/iine) • [Website](https://iine.to) {.centered-text}
## Features
- No timestamps, no IPs, no tracking
- ~3KB of vanilla JavaScript
- Works without JavaScript
- Various icons: heart, thumbs up, upvote, or any emoji
- Built for the small/indie web
- Free forever
- Accessible by design
- Self-hostable
## Quick start
Add appreciation buttons to your site with two lines. Load the script:
```html
<script defer src="https://cdn.jsdelivr.net/gh/welpo/iine@main/iine.mini.js"></script>
```
Add the button:
```html
<button class="iine-button" aria-hidden="true"></button>
```
Done. Your visitors can now show anonymous appreciation for your content.
## Why iine?
I wanted to add like/kudos/cheers/appreciation buttons to [my blog](https://osc.garden) without signing up for anything, and making sure my visitors weren't tracked.
Hoping others find it useful, I made the service public (open source) and free forever (at least until it supports over 100k websites).
Built for blogs, portfolios, digital gardens, and anyone who believes the web should be more human.

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View file

@ -3,6 +3,9 @@ title = "nani"
description = "Script Bash per crear URLs públiques a partir d'arxius o text en servidors remots."
weight = 50
[taxonomies]
tags = ["bash", "CLI"]
[extra]
local_image = "projects/nani/nani_logo.webp"
canonical_url = "https://osc.garden/ca/projects/tabi/"

View file

@ -3,6 +3,9 @@ title = "nani"
description = "Script Bash para crear URLs públicas a partir de archivos o texto en servidores remotos."
weight = 50
[taxonomies]
tags = ["bash", "CLI"]
[extra]
local_image = "projects/nani/nani_logo.webp"
canonical_url = "https://osc.garden/es/projects/tabi/"

View file

@ -3,6 +3,9 @@ title = "nani"
description = "Bash script to create public URLs from files or text on remote servers."
weight = 50
[taxonomies]
tags = ["bash", "CLI"]
[extra]
local_image = "projects/nani/nani_logo.webp"
canonical_url = "https://osc.garden/projects/tabi/"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Before After
Before After

View file

@ -0,0 +1,35 @@
+++
title = "nemui"
description = "Ajusta gradualment el teu horari de son amb suport per horari d'estiu."
weight = 22
[taxonomies]
tags = ["son", "interactiu", "web app", "web", "JavaScript"]
[extra]
local_image = "projects/nemui/nemui_logo.webp"
canonical_url = "https://osc.garden/ca/projects/tabi/"
social_media_card = "social_cards/projects_nemui.jpg"
+++
nemui és una aplicació web que t'ajuda a fer una transició suau a un nou horari de son. El seu nom ve de les paraules japoneses per dormir (<ruby><rt>nemu</rt></ruby>) i transició (<ruby><rt>i</rt></ruby>), que es llegeix com <ruby>眠い<rt>nemui</rt></ruby> (somnolent).
#### [Prova-la ara](https://nemui.osc.garden) • [GitHub](https://github.com/welpo/nemui) • [Blog](https://osc.garden/ca/blog/nemui-sleep-schedule-planner/) {.centered-text}
## Característiques
- Interfície interactiva de rellotge inspirada en Apple
- Ajust gradual de l'horari de son basat en la ciència del son
- Suport complet per a l'horari d'estiu (DST)
- Exportació a calendari (.ics) amb recordatoris per anar a dormir
- Emmagatzematge local per seguir el teu progrés
- Accessible: compatible amb navegació per teclat i lectors de pantalla
## Per què nemui?
A diferència dels canvis bruscos que poden alterar el teu ritme circadià, nemui t'ajuda a ajustar el teu horari de son de manera gradual. És especialment útil per a:
- Adaptar-te a nous horaris de feina/estudi
- Preparar-te per a canvis de zona horària
- Fer una transició suau durant els canvis d'hora
- Corregir un horari de son desajustat

View file

@ -0,0 +1,35 @@
+++
title = "nemui"
description = "Ajusta gradualmente tu horario de sueño con soporte para horario de verano."
weight = 32
[taxonomies]
tags = ["sueño", "interactivo", "web app", "web", "JavaScript"]
[extra]
local_image = "projects/nemui/nemui_logo.webp"
canonical_url = "https://osc.garden/es/projects/tabi/"
social_media_card = "social_cards/projects_nemui.jpg"
+++
nemui es una aplicación web que te ayuda a hacer una transición suave a un nuevo horario de sueño. Su nombre viene de las palabras japonesas para dormir (<ruby><rt>nemu</rt></ruby>) y transición (<ruby><rt>i</rt></ruby>), que se lee como <ruby>眠い<rt>nemui</rt></ruby> (somnoliento).
#### [Pruébala ahora](https://nemui.osc.garden) • [GitHub](https://github.com/welpo/nemui) • [Blog](https://osc.garden/es/blog/nemui-sleep-schedule-planner/) {.centered-text}
## Características
- Interfaz interactiva de reloj inspirada en Apple
- Ajuste gradual del horario de sueño basado en la ciencia del sueño
- Soporte completo para el horario de verano (DST)
- Exportación a calendario (.ics) con recordatorios para dormir
- Almacenamiento local para seguir tu progreso
- Accesible: compatible con navegación por teclado y lectores de pantalla
## ¿Por qué nemui?
A diferencia de los cambios bruscos que pueden alterar tu ritmo circadiano, nemui te ayuda a ajustar tu horario de sueño de forma gradual. Es especialmente útil para:
- Adaptarte a nuevos horarios de trabajo/estudio
- Prepararte para cambios de zona horaria
- Hacer una transición suave durante los cambios de hora
- Corregir un horario de sueño desajustado

View file

@ -0,0 +1,35 @@
+++
title = "nemui"
description = "Gradually adjust your sleep schedule with support for DST transitions."
weight = 32
[taxonomies]
tags = ["sleep", "interactive", "web app", "web", "JavaScript"]
[extra]
local_image = "projects/nemui/nemui_logo.webp"
canonical_url = "https://osc.garden/projects/tabi/"
social_media_card = "social_cards/projects_nemui.jpg"
+++
nemui is a web app that helps you smoothly transition to a new sleep schedule. Named after the Japanese words for sleep (<ruby><rt>nemu</rt></ruby>) and transition (<ruby><rt>i</rt></ruby>), reading as <ruby>眠い<rt>nemui</rt></ruby> (sleepy).
#### [Try it now](https://nemui.osc.garden) • [GitHub](https://github.com/welpo/nemui) • [Blog post](https://osc.garden/blog/nemui-sleep-schedule-planner/) {.centered-text}
## Features
- Interactive clock interface inspired by Apple
- Gradual sleep schedule adjustment based on sleep science
- Full Daylight Saving Time (DST) support
- Calendar (.ics) export with bedtime reminders
- Local storage for progress tracking
- Accessible: supports keyboard navigation and screen readers
## Why nemui?
Unlike abrupt changes that can disrupt your circadian rhythm, nemui helps you adjust your sleep schedule gradually. It's particularly useful for:
- Adapting to new work/study schedules
- Preparing for timezone changes
- Smoothly transitioning through DST changes
- Fixing a misaligned sleep schedule

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