From a6884822ce61b1133643db379e99452d512239be Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 31 Aug 2023 01:35:56 +0000 Subject: [PATCH] Deploy welpo/tabi to welpo/tabi:gh-pages --- 404.html | 1 + archive/index.html | 1 + atom.xml | 112 ++++++ blog/comments/index.html | 56 +++ blog/custom-font-subset/index.html | 117 ++++++ blog/customise-tabi/index.html | 13 + blog/index.html | 1 + blog/javascript/index.html | 1 + blog/markdown/index.html | 11 + blog/page/1/index.html | 1 + blog/page/2/index.html | 1 + blog/security/index.html | 9 + blog/shortcodes/index.html | 23 ++ blog/toc/index.html | 25 ++ ca/archive/index.html | 1 + ca/atom.xml | 112 ++++++ ca/blog/comments/index.html | 56 +++ ca/blog/custom-font-subset/index.html | 114 ++++++ ca/blog/customise-tabi/index.html | 13 + ca/blog/index.html | 1 + ca/blog/javascript/index.html | 1 + ca/blog/markdown/index.html | 11 + ca/blog/page/1/index.html | 1 + ca/blog/page/2/index.html | 1 + ca/blog/security/index.html | 9 + ca/blog/shortcodes/index.html | 23 ++ ca/blog/toc/index.html | 25 ++ ca/index.html | 1 + ca/projects/chu/index.html | 1 + ca/projects/index.html | 1 + ca/projects/nani/index.html | 1 + ca/projects/spectro/index.html | 1 + ca/projects/tabi/index.html | 1 + ca/tags/funcionalitat/atom.xml | 112 ++++++ ca/tags/funcionalitat/index.html | 2 + ca/tags/index.html | 3 + ca/tags/markdown/atom.xml | 46 +++ ca/tags/markdown/index.html | 2 + ca/tags/seguretat/atom.xml | 35 ++ ca/tags/seguretat/index.html | 2 + ca/tags/shortcodes/atom.xml | 35 ++ ca/tags/shortcodes/index.html | 2 + ca/tags/tutorial/atom.xml | 79 +++++ ca/tags/tutorial/index.html | 2 + custom_subset.css | 1 + es/archive/index.html | 1 + es/atom.xml | 112 ++++++ es/blog/comments/index.html | 56 +++ es/blog/custom-font-subset/index.html | 114 ++++++ es/blog/customise-tabi/index.html | 13 + es/blog/index.html | 1 + es/blog/javascript/index.html | 1 + es/blog/markdown/index.html | 11 + es/blog/page/1/index.html | 1 + es/blog/page/2/index.html | 1 + es/blog/security/index.html | 9 + es/blog/shortcodes/index.html | 23 ++ es/blog/toc/index.html | 25 ++ es/index.html | 1 + es/projects/chu/index.html | 1 + es/projects/index.html | 1 + es/projects/nani/index.html | 1 + es/projects/spectro/index.html | 1 + es/projects/tabi/index.html | 1 + es/tags/funcionalidad/atom.xml | 112 ++++++ es/tags/funcionalidad/index.html | 2 + es/tags/index.html | 3 + es/tags/markdown/atom.xml | 46 +++ es/tags/markdown/index.html | 2 + es/tags/seguridad/atom.xml | 35 ++ es/tags/seguridad/index.html | 2 + es/tags/shortcodes/atom.xml | 35 ++ es/tags/shortcodes/index.html | 2 + es/tags/tutorial/atom.xml | 79 +++++ es/tags/tutorial/index.html | 2 + feed_style.xsl | 73 ++++ fonts/CascadiaCode-SemiLight.woff2 | Bin 0 -> 132856 bytes fonts/Inter4.woff2 | Bin 0 -> 260292 bytes fonts/KaTeX/KaTeX_AMS-Regular.ttf | Bin 0 -> 63632 bytes fonts/KaTeX/KaTeX_AMS-Regular.woff | Bin 0 -> 33516 bytes fonts/KaTeX/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28076 bytes fonts/KaTeX/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 12368 bytes fonts/KaTeX/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 7716 bytes fonts/KaTeX/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6912 bytes fonts/KaTeX/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 12344 bytes fonts/KaTeX/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 7656 bytes fonts/KaTeX/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6908 bytes fonts/KaTeX/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 19584 bytes fonts/KaTeX/KaTeX_Fraktur-Bold.woff | Bin 0 -> 13296 bytes fonts/KaTeX/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11348 bytes fonts/KaTeX/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 19572 bytes fonts/KaTeX/KaTeX_Fraktur-Regular.woff | Bin 0 -> 13208 bytes fonts/KaTeX/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11316 bytes fonts/KaTeX/KaTeX_Main-Bold.ttf | Bin 0 -> 51336 bytes fonts/KaTeX/KaTeX_Main-Bold.woff | Bin 0 -> 29912 bytes fonts/KaTeX/KaTeX_Main-Bold.woff2 | Bin 0 -> 25324 bytes fonts/KaTeX/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 32968 bytes fonts/KaTeX/KaTeX_Main-BoldItalic.woff | Bin 0 -> 19412 bytes fonts/KaTeX/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16780 bytes fonts/KaTeX/KaTeX_Main-Italic.ttf | Bin 0 -> 33580 bytes fonts/KaTeX/KaTeX_Main-Italic.woff | Bin 0 -> 19676 bytes fonts/KaTeX/KaTeX_Main-Italic.woff2 | Bin 0 -> 16988 bytes fonts/KaTeX/KaTeX_Main-Regular.ttf | Bin 0 -> 53580 bytes fonts/KaTeX/KaTeX_Main-Regular.woff | Bin 0 -> 30772 bytes fonts/KaTeX/KaTeX_Main-Regular.woff2 | Bin 0 -> 26272 bytes fonts/KaTeX/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 31196 bytes fonts/KaTeX/KaTeX_Math-BoldItalic.woff | Bin 0 -> 18668 bytes fonts/KaTeX/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16400 bytes fonts/KaTeX/KaTeX_Math-Italic.ttf | Bin 0 -> 31308 bytes fonts/KaTeX/KaTeX_Math-Italic.woff | Bin 0 -> 18748 bytes fonts/KaTeX/KaTeX_Math-Italic.woff2 | Bin 0 -> 16440 bytes fonts/KaTeX/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 24504 bytes fonts/KaTeX/KaTeX_SansSerif-Bold.woff | Bin 0 -> 14408 bytes fonts/KaTeX/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12216 bytes fonts/KaTeX/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 22364 bytes fonts/KaTeX/KaTeX_SansSerif-Italic.woff | Bin 0 -> 14112 bytes fonts/KaTeX/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 12028 bytes fonts/KaTeX/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 19436 bytes fonts/KaTeX/KaTeX_SansSerif-Regular.woff | Bin 0 -> 12316 bytes fonts/KaTeX/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10344 bytes fonts/KaTeX/KaTeX_Script-Regular.ttf | Bin 0 -> 16648 bytes fonts/KaTeX/KaTeX_Script-Regular.woff | Bin 0 -> 10588 bytes fonts/KaTeX/KaTeX_Script-Regular.woff2 | Bin 0 -> 9644 bytes fonts/KaTeX/KaTeX_Size1-Regular.ttf | Bin 0 -> 12228 bytes fonts/KaTeX/KaTeX_Size1-Regular.woff | Bin 0 -> 6496 bytes fonts/KaTeX/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5468 bytes fonts/KaTeX/KaTeX_Size2-Regular.ttf | Bin 0 -> 11508 bytes fonts/KaTeX/KaTeX_Size2-Regular.woff | Bin 0 -> 6188 bytes fonts/KaTeX/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5208 bytes fonts/KaTeX/KaTeX_Size3-Regular.ttf | Bin 0 -> 7588 bytes fonts/KaTeX/KaTeX_Size3-Regular.woff | Bin 0 -> 4420 bytes fonts/KaTeX/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3624 bytes fonts/KaTeX/KaTeX_Size4-Regular.ttf | Bin 0 -> 10364 bytes fonts/KaTeX/KaTeX_Size4-Regular.woff | Bin 0 -> 5980 bytes fonts/KaTeX/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4928 bytes fonts/KaTeX/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 27556 bytes fonts/KaTeX/KaTeX_Typewriter-Regular.woff | Bin 0 -> 16028 bytes fonts/KaTeX/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13568 bytes fonts/SourceSerif4Variable-Roman.ttf.woff2 | Bin 0 -> 429100 bytes img/amsterdam_by_oskerwyld.webp | Bin 0 -> 307660 bytes img/chu.webp | Bin 0 -> 14088 bytes img/desert_by_oskerwyld.webp | Bin 0 -> 44348 bytes img/edited.webp | Bin 0 -> 62622 bytes img/graph.webp | Bin 0 -> 4182 bytes img/main.webp | Bin 0 -> 17936 bytes img/mojave_day.webp | Bin 0 -> 12954 bytes img/mojave_night.webp | Bin 0 -> 8140 bytes img/nani.webp | Bin 0 -> 38622 bytes img/paris_day.webp | Bin 0 -> 80496 bytes img/paris_night.webp | Bin 0 -> 52236 bytes img/raw.webp | Bin 0 -> 71832 bytes img/skins/blue_dark.webp | Bin 0 -> 46532 bytes img/skins/blue_light.webp | Bin 0 -> 47034 bytes img/skins/evangelion_dark.webp | Bin 0 -> 45010 bytes img/skins/evangelion_light.webp | Bin 0 -> 46880 bytes img/skins/indigo_ingot_dark.webp | Bin 0 -> 47550 bytes img/skins/indigo_ingot_light.webp | Bin 0 -> 47020 bytes img/skins/lavender_dark.webp | Bin 0 -> 45316 bytes img/skins/lavender_light.webp | Bin 0 -> 46208 bytes img/skins/lowcontrast_orange_dark.webp | Bin 0 -> 46882 bytes img/skins/lowcontrast_orange_light.webp | Bin 0 -> 47886 bytes img/skins/lowcontrast_peach_dark.webp | Bin 0 -> 46600 bytes img/skins/lowcontrast_peach_light.webp | Bin 0 -> 46214 bytes img/skins/lowcontrast_pink_dark.webp | Bin 0 -> 46124 bytes img/skins/lowcontrast_pink_light.webp | Bin 0 -> 46522 bytes img/skins/mint_dark.webp | Bin 0 -> 45744 bytes img/skins/mint_light.webp | Bin 0 -> 45760 bytes img/skins/monochrome_dark.webp | Bin 0 -> 43380 bytes img/skins/monochrome_light.webp | Bin 0 -> 43492 bytes img/skins/red_dark.webp | Bin 0 -> 45996 bytes img/skins/red_light.webp | Bin 0 -> 46246 bytes img/skins/sakura_dark.webp | Bin 0 -> 44954 bytes img/skins/sakura_light.webp | Bin 0 -> 46246 bytes img/skins/teal_dark.webp | Bin 0 -> 46326 bytes img/skins/teal_light.webp | Bin 0 -> 46690 bytes img/spectro.webp | Bin 0 -> 75164 bytes img/tabi.webp | Bin 0 -> 31664 bytes index.html | 1 + inter_subset_en.css | 1 + inter_subset_es.css | 1 + isso.css | 374 ++++++++++++++++++++ isso.min.css | 1 + js/copyCodeToClipboard.js | 37 ++ js/copyCodeToClipboard.min.js | 1 + js/decodeMail.js | 44 +++ js/decodeMail.min.js | 1 + js/footnoteBacklinks.js | 33 ++ js/footnoteBacklinks.min.js | 1 + js/giscus.js | 79 +++++ js/giscus.min.js | 1 + js/hyvortalk.js | 43 +++ js/hyvortalk.min.js | 1 + js/initializeTheme.js | 17 + js/initializeTheme.min.js | 1 + js/isso.js | 80 +++++ js/isso.min.js | 1 + js/katex.min.js | 1 + js/loadComments.js | 26 ++ js/loadComments.min.js | 1 + js/themeSwitcher.js | 37 ++ js/themeSwitcher.min.js | 1 + js/utterances.js | 62 ++++ js/utterances.min.js | 1 + katex.min.css | 1 + main.css | 1 + no_js.css | 1 + projects/chu/index.html | 1 + projects/index.html | 1 + projects/nani/index.html | 1 + projects/spectro/index.html | 1 + projects/tabi/index.html | 1 + robots.txt | 4 + sitemap.xml | 219 ++++++++++++ skins/blue.css | 1 + skins/evangelion.css | 1 + skins/indigo_ingot.css | 1 + skins/lavender.css | 1 + skins/lowcontrast_orange.css | 1 + skins/lowcontrast_peach.css | 1 + skins/lowcontrast_pink.css | 1 + skins/mint.css | 1 + skins/monochrome.css | 1 + skins/red.css | 1 + skins/sakura.css | 1 + skins/teal.css | 1 + social_icons/LICENSE | 1 + social_icons/apple.svg | 1 + social_icons/bitcoin.svg | 1 + social_icons/deviantart.svg | 1 + social_icons/diaspora.svg | 1 + social_icons/discord.svg | 1 + social_icons/discourse.svg | 1 + social_icons/email.svg | 1 + social_icons/ethereum.svg | 1 + social_icons/etsy.svg | 1 + social_icons/facebook.svg | 1 + social_icons/github.svg | 1 + social_icons/gitlab.svg | 1 + social_icons/google.svg | 1 + social_icons/hacker-news.svg | 1 + social_icons/instagram.svg | 1 + social_icons/linkedin.svg | 1 + social_icons/mastodon.svg | 1 + social_icons/paypal.svg | 1 + social_icons/pinterest.svg | 1 + social_icons/quora.svg | 1 + social_icons/reddit.svg | 1 + social_icons/rss.svg | 1 + social_icons/skype.svg | 1 + social_icons/slack.svg | 1 + social_icons/snapchat.svg | 1 + social_icons/soundcloud.svg | 1 + social_icons/spotify.svg | 1 + social_icons/stack-exchange.svg | 1 + social_icons/stack-overflow.svg | 1 + social_icons/steam.svg | 1 + social_icons/telegram.svg | 1 + social_icons/twitter.svg | 1 + social_icons/vimeo.svg | 1 + social_icons/whatsapp.svg | 1 + social_icons/youtube.svg | 1 + syntax/syntax-ayu-dark.css | 1 + tags/index.html | 3 + tags/markdown/atom.xml | 46 +++ tags/markdown/index.html | 2 + tags/security/atom.xml | 35 ++ tags/security/index.html | 2 + tags/shortcodes/atom.xml | 35 ++ tags/shortcodes/index.html | 2 + tags/showcase/atom.xml | 112 ++++++ tags/showcase/index.html | 2 + tags/tutorial/atom.xml | 79 +++++ tags/tutorial/index.html | 2 + 273 files changed, 3281 insertions(+) create mode 100644 404.html create mode 100644 archive/index.html create mode 100644 atom.xml create mode 100644 blog/comments/index.html create mode 100644 blog/custom-font-subset/index.html create mode 100644 blog/customise-tabi/index.html create mode 100644 blog/index.html create mode 100644 blog/javascript/index.html create mode 100644 blog/markdown/index.html create mode 100644 blog/page/1/index.html create mode 100644 blog/page/2/index.html create mode 100644 blog/security/index.html create mode 100644 blog/shortcodes/index.html create mode 100644 blog/toc/index.html create mode 100644 ca/archive/index.html create mode 100644 ca/atom.xml create mode 100644 ca/blog/comments/index.html create mode 100644 ca/blog/custom-font-subset/index.html create mode 100644 ca/blog/customise-tabi/index.html create mode 100644 ca/blog/index.html create mode 100644 ca/blog/javascript/index.html create mode 100644 ca/blog/markdown/index.html create mode 100644 ca/blog/page/1/index.html create mode 100644 ca/blog/page/2/index.html create mode 100644 ca/blog/security/index.html create mode 100644 ca/blog/shortcodes/index.html create mode 100644 ca/blog/toc/index.html create mode 100644 ca/index.html create mode 100644 ca/projects/chu/index.html create mode 100644 ca/projects/index.html create mode 100644 ca/projects/nani/index.html create mode 100644 ca/projects/spectro/index.html create mode 100644 ca/projects/tabi/index.html create mode 100644 ca/tags/funcionalitat/atom.xml create mode 100644 ca/tags/funcionalitat/index.html create mode 100644 ca/tags/index.html create mode 100644 ca/tags/markdown/atom.xml create mode 100644 ca/tags/markdown/index.html create mode 100644 ca/tags/seguretat/atom.xml create mode 100644 ca/tags/seguretat/index.html create mode 100644 ca/tags/shortcodes/atom.xml create mode 100644 ca/tags/shortcodes/index.html create mode 100644 ca/tags/tutorial/atom.xml create mode 100644 ca/tags/tutorial/index.html create mode 100644 custom_subset.css create mode 100644 es/archive/index.html create mode 100644 es/atom.xml create mode 100644 es/blog/comments/index.html create mode 100644 es/blog/custom-font-subset/index.html create mode 100644 es/blog/customise-tabi/index.html create mode 100644 es/blog/index.html create mode 100644 es/blog/javascript/index.html create mode 100644 es/blog/markdown/index.html create mode 100644 es/blog/page/1/index.html create mode 100644 es/blog/page/2/index.html create mode 100644 es/blog/security/index.html create mode 100644 es/blog/shortcodes/index.html create mode 100644 es/blog/toc/index.html create mode 100644 es/index.html create mode 100644 es/projects/chu/index.html create mode 100644 es/projects/index.html create mode 100644 es/projects/nani/index.html create mode 100644 es/projects/spectro/index.html create mode 100644 es/projects/tabi/index.html create mode 100644 es/tags/funcionalidad/atom.xml create mode 100644 es/tags/funcionalidad/index.html create mode 100644 es/tags/index.html create mode 100644 es/tags/markdown/atom.xml create mode 100644 es/tags/markdown/index.html create mode 100644 es/tags/seguridad/atom.xml create mode 100644 es/tags/seguridad/index.html create mode 100644 es/tags/shortcodes/atom.xml create mode 100644 es/tags/shortcodes/index.html create mode 100644 es/tags/tutorial/atom.xml create mode 100644 es/tags/tutorial/index.html create mode 100644 feed_style.xsl create mode 100644 fonts/CascadiaCode-SemiLight.woff2 create mode 100644 fonts/Inter4.woff2 create mode 100644 fonts/KaTeX/KaTeX_AMS-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_AMS-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_AMS-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Caligraphic-Bold.ttf create mode 100644 fonts/KaTeX/KaTeX_Caligraphic-Bold.woff create mode 100644 fonts/KaTeX/KaTeX_Caligraphic-Bold.woff2 create mode 100644 fonts/KaTeX/KaTeX_Caligraphic-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Caligraphic-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Caligraphic-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Fraktur-Bold.ttf create mode 100644 fonts/KaTeX/KaTeX_Fraktur-Bold.woff create mode 100644 fonts/KaTeX/KaTeX_Fraktur-Bold.woff2 create mode 100644 fonts/KaTeX/KaTeX_Fraktur-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Fraktur-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Fraktur-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Main-Bold.ttf create mode 100644 fonts/KaTeX/KaTeX_Main-Bold.woff create mode 100644 fonts/KaTeX/KaTeX_Main-Bold.woff2 create mode 100644 fonts/KaTeX/KaTeX_Main-BoldItalic.ttf create mode 100644 fonts/KaTeX/KaTeX_Main-BoldItalic.woff create mode 100644 fonts/KaTeX/KaTeX_Main-BoldItalic.woff2 create mode 100644 fonts/KaTeX/KaTeX_Main-Italic.ttf create mode 100644 fonts/KaTeX/KaTeX_Main-Italic.woff create mode 100644 fonts/KaTeX/KaTeX_Main-Italic.woff2 create mode 100644 fonts/KaTeX/KaTeX_Main-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Main-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Main-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Math-BoldItalic.ttf create mode 100644 fonts/KaTeX/KaTeX_Math-BoldItalic.woff create mode 100644 fonts/KaTeX/KaTeX_Math-BoldItalic.woff2 create mode 100644 fonts/KaTeX/KaTeX_Math-Italic.ttf create mode 100644 fonts/KaTeX/KaTeX_Math-Italic.woff create mode 100644 fonts/KaTeX/KaTeX_Math-Italic.woff2 create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Bold.ttf create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Bold.woff create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Bold.woff2 create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Italic.ttf create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Italic.woff create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Italic.woff2 create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_SansSerif-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Script-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Script-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Script-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Size1-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Size1-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Size1-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Size2-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Size2-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Size2-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Size3-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Size3-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Size3-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Size4-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Size4-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Size4-Regular.woff2 create mode 100644 fonts/KaTeX/KaTeX_Typewriter-Regular.ttf create mode 100644 fonts/KaTeX/KaTeX_Typewriter-Regular.woff create mode 100644 fonts/KaTeX/KaTeX_Typewriter-Regular.woff2 create mode 100644 fonts/SourceSerif4Variable-Roman.ttf.woff2 create mode 100644 img/amsterdam_by_oskerwyld.webp create mode 100644 img/chu.webp create mode 100644 img/desert_by_oskerwyld.webp create mode 100644 img/edited.webp create mode 100644 img/graph.webp create mode 100644 img/main.webp create mode 100644 img/mojave_day.webp create mode 100644 img/mojave_night.webp create mode 100644 img/nani.webp create mode 100644 img/paris_day.webp create mode 100644 img/paris_night.webp create mode 100644 img/raw.webp create mode 100644 img/skins/blue_dark.webp create mode 100644 img/skins/blue_light.webp create mode 100644 img/skins/evangelion_dark.webp create mode 100644 img/skins/evangelion_light.webp create mode 100644 img/skins/indigo_ingot_dark.webp create mode 100644 img/skins/indigo_ingot_light.webp create mode 100644 img/skins/lavender_dark.webp create mode 100644 img/skins/lavender_light.webp create mode 100644 img/skins/lowcontrast_orange_dark.webp create mode 100644 img/skins/lowcontrast_orange_light.webp create mode 100644 img/skins/lowcontrast_peach_dark.webp create mode 100644 img/skins/lowcontrast_peach_light.webp create mode 100644 img/skins/lowcontrast_pink_dark.webp create mode 100644 img/skins/lowcontrast_pink_light.webp create mode 100644 img/skins/mint_dark.webp create mode 100644 img/skins/mint_light.webp create mode 100644 img/skins/monochrome_dark.webp create mode 100644 img/skins/monochrome_light.webp create mode 100644 img/skins/red_dark.webp create mode 100644 img/skins/red_light.webp create mode 100644 img/skins/sakura_dark.webp create mode 100644 img/skins/sakura_light.webp create mode 100644 img/skins/teal_dark.webp create mode 100644 img/skins/teal_light.webp create mode 100644 img/spectro.webp create mode 100644 img/tabi.webp create mode 100644 index.html create mode 100644 inter_subset_en.css create mode 100644 inter_subset_es.css create mode 100644 isso.css create mode 100644 isso.min.css create mode 100644 js/copyCodeToClipboard.js create mode 100644 js/copyCodeToClipboard.min.js create mode 100644 js/decodeMail.js create mode 100644 js/decodeMail.min.js create mode 100644 js/footnoteBacklinks.js create mode 100644 js/footnoteBacklinks.min.js create mode 100644 js/giscus.js create mode 100644 js/giscus.min.js create mode 100644 js/hyvortalk.js create mode 100644 js/hyvortalk.min.js create mode 100644 js/initializeTheme.js create mode 100644 js/initializeTheme.min.js create mode 100644 js/isso.js create mode 100644 js/isso.min.js create mode 100644 js/katex.min.js create mode 100644 js/loadComments.js create mode 100644 js/loadComments.min.js create mode 100644 js/themeSwitcher.js create mode 100644 js/themeSwitcher.min.js create mode 100644 js/utterances.js create mode 100644 js/utterances.min.js create mode 100644 katex.min.css create mode 100644 main.css create mode 100644 no_js.css create mode 100644 projects/chu/index.html create mode 100644 projects/index.html create mode 100644 projects/nani/index.html create mode 100644 projects/spectro/index.html create mode 100644 projects/tabi/index.html create mode 100644 robots.txt create mode 100644 sitemap.xml create mode 100644 skins/blue.css create mode 100644 skins/evangelion.css create mode 100644 skins/indigo_ingot.css create mode 100644 skins/lavender.css create mode 100644 skins/lowcontrast_orange.css create mode 100644 skins/lowcontrast_peach.css create mode 100644 skins/lowcontrast_pink.css create mode 100644 skins/mint.css create mode 100644 skins/monochrome.css create mode 100644 skins/red.css create mode 100644 skins/sakura.css create mode 100644 skins/teal.css create mode 100644 social_icons/LICENSE create mode 100644 social_icons/apple.svg create mode 100644 social_icons/bitcoin.svg create mode 100644 social_icons/deviantart.svg create mode 100644 social_icons/diaspora.svg create mode 100644 social_icons/discord.svg create mode 100644 social_icons/discourse.svg create mode 100644 social_icons/email.svg create mode 100644 social_icons/ethereum.svg create mode 100644 social_icons/etsy.svg create mode 100644 social_icons/facebook.svg create mode 100644 social_icons/github.svg create mode 100644 social_icons/gitlab.svg create mode 100644 social_icons/google.svg create mode 100644 social_icons/hacker-news.svg create mode 100644 social_icons/instagram.svg create mode 100644 social_icons/linkedin.svg create mode 100644 social_icons/mastodon.svg create mode 100644 social_icons/paypal.svg create mode 100644 social_icons/pinterest.svg create mode 100644 social_icons/quora.svg create mode 100644 social_icons/reddit.svg create mode 100644 social_icons/rss.svg create mode 100644 social_icons/skype.svg create mode 100644 social_icons/slack.svg create mode 100644 social_icons/snapchat.svg create mode 100644 social_icons/soundcloud.svg create mode 100644 social_icons/spotify.svg create mode 100644 social_icons/stack-exchange.svg create mode 100644 social_icons/stack-overflow.svg create mode 100644 social_icons/steam.svg create mode 100644 social_icons/telegram.svg create mode 100644 social_icons/twitter.svg create mode 100644 social_icons/vimeo.svg create mode 100644 social_icons/whatsapp.svg create mode 100644 social_icons/youtube.svg create mode 100644 syntax/syntax-ayu-dark.css create mode 100644 tags/index.html create mode 100644 tags/markdown/atom.xml create mode 100644 tags/markdown/index.html create mode 100644 tags/security/atom.xml create mode 100644 tags/security/index.html create mode 100644 tags/shortcodes/atom.xml create mode 100644 tags/shortcodes/index.html create mode 100644 tags/showcase/atom.xml create mode 100644 tags/showcase/index.html create mode 100644 tags/tutorial/atom.xml create mode 100644 tags/tutorial/index.html diff --git a/404.html b/404.html new file mode 100644 index 000000000..1fc8149fc --- /dev/null +++ b/404.html @@ -0,0 +1 @@ +~/tabi • 404
404
not found

The page you requested doesn't seem to exist or has not been translated to your language yet. Check the URL for errors, or return to the homepage.

La página que has solicitado parece no existir o aún no se ha traducido a tu idioma. Revisa la URL en busca de errores o regresa a la página de inicio.

La pàgina que has sol·licitat sembla que no existeix o encara no s'ha traduït al teu idioma. Comprova l'URL per detectar errors o torna a la pàgina d'inici.

\ No newline at end of file diff --git a/archive/index.html b/archive/index.html new file mode 100644 index 000000000..f31134d8e --- /dev/null +++ b/archive/index.html @@ -0,0 +1 @@ +~/tabi • Archive
Archive
\ No newline at end of file diff --git a/atom.xml b/atom.xml new file mode 100644 index 000000000..6a4474e98 --- /dev/null +++ b/atom.xml @@ -0,0 +1,112 @@ + + + + + + This is a web feed + also known as an Atom feed + Subscribe + by copying the URL from the address bar into your newsreader + Visit + to learn more and get started + It's free + website + Recent posts + + + ~/tabi + tabi is a fast, lightweight, and modern Zola theme with multi-language support, optional JavaScript, and a perfect Lighthouse score. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/atom.xml + + Customise tabi with skins and a default theme + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/customise-tabi/ + Learn how to customise tabi using skins and setting a default theme, making your site uniquely yours. + + + Add comments to your posts with these 4 comment systems + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/comments/ + Discover how to enable a comments section on your posts using giscus, utterances, Hyvor Talk, or Isso, enabling reader interaction and feedback. + + + Optimise loading times with a custom font subset + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/custom-font-subset/ + Learn how to create a custom subset that only includes the necessary glyphs. + + + Secure by default + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/security/ + tabi has an easily customizable Content Security Policy (CSP) with safe defaults. Get peace of mind and an A+ on Mozilla Observatory. + + + Custom shortcodes + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/shortcodes/ + 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. + + + Markdown examples + 2023-01-31T00:00:00+00:00 + 2023-08-02T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/markdown/ + This post showcases some examples of Markdown formatting, including a table, code blocks and tags, quotes, tables, and footnotes. + + + No mandatory JavaScript + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/javascript/ + JavaScript is only used when HTML and CSS aren't enough. + + + Table of Contents + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/toc/ + A post showcasing the optional Table of Contents and its options. + + diff --git a/blog/comments/index.html b/blog/comments/index.html new file mode 100644 index 000000000..7132f47e5 --- /dev/null +++ b/blog/comments/index.html @@ -0,0 +1,56 @@ +~/tabi • Add comments to your posts with these 4 comment systems
Add comments to your posts with these 4 comment systems

tabi currently supports four comment systems: giscus, utterances, Hyvor Talk, and Isso.

giscus and utterances are open-source projects that let you add a comments section to your website using GitHub issues (utterances) or discussions (giscus). They are perfect for static site generators like Zola, since they enable your readers to interact and leave comments on your posts without requiring a traditional backend or database.

As they are based on GitHub, giscus and utterances require users to have a GitHub account and authorize the respective app. Alternatively, visitors can also comment directly on the corresponding GitHub discussion or issue.

Both are great tools for adding comments to your blog, but giscus has a few advantages:

  • More themes.
  • Support for reactions.
  • Comment replies and conversation view.
  • Safer: utterances requires enabling unsafe inline styles to set the height of the frame; giscus doesn't.
  • Multilanguage support: utterances is only available in English; giscus supports over 20 languages.
  • More active development: giscus' last commit, as of this post, was a two days ago. utterances' last commit was over a year ago.

Hyvor Talk is a paid privacy-focused commenting platform. It offers all of the giscus' advantages, and a few more, like moderation and spam detection.

Isso is an open-source self-hosted commenting system that stores comments in its own database. One of its main advantages is privacy; it does not share user data with third parties. It also has a lightweight and clean interface, making it easy for your visitors to leave comments. Isso also allows anonymous comments, potentially increasing user engagement on your website.

Setup

GitHub based systems

The configuration of both giscus and utterances is quite similar. First, visit the website of the system you want to enable: giscus.app or utteranc.es.

Follow the instructions on the Configuration section of the website, and set it up it to your liking. Then, set the values shown on the Enable giscus/utterances section (the script codeblock) on the proper section of your config.toml: [extra.giscus] or [extra.utterances].

giscus

giscus has a few more settings than utterances:

[extra.giscus]
+enabled_for_all_posts = false
+automatic_loading = true
+repo = "yourGithubUsername/yourRepo"
+repo_id = "YourRepoID"
+category = "Announcements"
+category_id = "YourCategoryID"
+mapping = "slug"
+strict_title_matching = 1  # 1 to enable, 0 to disable.
+enable_reactions = 1  # 1 to enable, 0 to disable.
+comment_box_above_comments = true
+light_theme = "noborder_light"
+dark_theme = "noborder_dark"
+lang = ""  # Leave blank to match the page's language.
+lazy_loading = true
+

utterances

[extra.utterances]
+enabled_for_all_posts = false
+automatic_loading = true
+repo = "yourgithubuser/yourrepo"
+issue_term = "slug"
+label = "💬"
+light_theme = "github-light"
+dark_theme = "photon-dark"
+lazy_loading = true
+

Hyvor Talk

Set up your website from the Hyvor Talk console and fill in the settings in config.toml:

[extra.hyvortalk]
+enabled_for_all_posts = false
+automatic_loading = true
+website_id = "1234"
+page_id_is_slug = true
+lang = ""
+page_author = ""  # Email (or base64 encoded email) of the author.
+lazy_loading = true
+

Isso

To enable Isso, you'll first need to install and run an Isso server (here's a useful guide). Then, complete these settings in config.toml:

[extra.isso]
+enabled_for_all_posts = false
+automatic_loading = true
+endpoint_url = "https://example.com/comments/"  # URL to Isso host.
+page_id_is_slug = true
+lang = ""
+max_comments_top = "inf"
+max_comments_nested = "5"
+avatar = true
+voting = true
+page_author_hashes = ""
+lazy_loading = true
+

Common settings

Setting enabled_for_all_posts = true for a comment system will enable it globally.

Alternatively, enable comments on an individual post's front matter by adding the name of the system (utterances, giscus, hyvortalk, or isso) = true. For example, this is how you would enable giscus:

+++
+title = "Bears, Beets, Battlestar Galactica: The Dwight Schrute Guide to Life"
+date = 2007-04-26
+description = "Lessons learned from beet farming and paper sales."
+
+[taxonomies]
+tags = ["personal", "beets"]
+
+[extra]
+giscus = true
++++
+

If you accidentally enable more than one system, your site will fail to build with an error.

If your site has multiple languages with matching posts (like this demo), and you'd like to share comments between languages, you must use issue_term = "slug" (for giscus and utterances) or page_id_is_slug = true (for Hyvor Talk or Isso). This will use the name of the Markdown file (sans the language tag) as the identifier. All other options will create different comment sections for each language.

Live example

Below you'll find the giscus widget using the settings shown above.

\ No newline at end of file diff --git a/blog/custom-font-subset/index.html b/blog/custom-font-subset/index.html new file mode 100644 index 000000000..449d340fa --- /dev/null +++ b/blog/custom-font-subset/index.html @@ -0,0 +1,117 @@ +~/tabi • Optimise loading times with a custom font subset
Optimise loading times with a custom font subset

The problem

Custom fonts cause flashing text in Firefox. For a gif and more details, see this issue.

The solution

To fix 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.

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.

Requirements

Install these tools:

Run pip install fonttools brotli to install both.

The script

The script below takes a config.toml file and a font file as input, extracts the necessary characters, creates a subset of the font, and generates a CSS file containing the base64 encoded subset.

#!/usr/bin/env bash
+
+usage() {
+    echo "Usage: $0 [--config | -c CONFIG_FILE] [--font | -f FONT_FILE] [--output | -o OUTPUT_PATH]"
+    echo
+    echo "Options:"
+    echo "  --config, -c   Path to the config.toml file."
+    echo "  --font, -f     Path to the font file."
+    echo "  --output, -o   Output path for the generated subset.css file (default: current directory)"
+    echo "  --help, -h     Show this help message and exit"
+}
+
+# Default output is current directory.
+output_path="."
+
+# Parse command line options
+while [ "$#" -gt 0 ]; do
+    case "$1" in
+        --config|-c)
+            config_file="$2"
+            shift 2
+            ;;
+        --font|-f)
+            font_file="$2"
+            shift 2
+            ;;
+        --output|-o)
+            output_path="$2"
+            shift 2
+            ;;
+        --help|-h)
+            usage
+            exit 0
+            ;;
+        *)
+            echo "Unknown option: $1"
+            usage
+            exit 1
+            ;;
+    esac
+done
+
+# Check if -c and -f options are provided
+if [ -z "$config_file" ]; then
+    echo "Error: --config|-c option is required."
+    usage
+    exit 1
+fi
+
+if [ -z "$font_file" ]; then
+    echo "Error: --font|-f option is required."
+    usage
+    exit 1
+fi
+
+# Check if config and font files exist.
+if [ ! -f "$config_file" ]; then
+    echo "Error: Config file '$config_file' not found."
+    exit 1
+fi
+
+if [ ! -f "$font_file" ]; then
+    echo "Error: Font file '$font_file' not found."
+    exit 1
+fi
+
+# Extract the title and menu names from the config file.
+title=$(awk -F' = ' '/^title/{print $2}' "$config_file" | tr -d '"')
+menu_names=$(awk -F' = ' '/^menu/{f=1;next} /socials/{f=0} f && /name/{print $2}' "$config_file" | cut -d',' -f1 | tr -d '"' )
+language_names=$(awk -F' = ' '/^language_name\./{print $2}' "$config_file" | tr -d '"' )
+
+# If the site is multilingual, get the menu translations.
+if [ -n "$language_names" ]; then
+    for menu_name in $menu_names; do
+        # Find the line with the menu name inside a [languages.*.translations] section and get the translated menus.
+        menu_translation=$(awk -F' = ' "/\\[languages.*\\.translations\\]/{f=1;next} /^\\[/ {f=0} f && /$menu_name =/{print \$2}" "$config_file" | tr -d '"' )
+        # Add the found menu value to the translations string
+        menu_names+="$menu_translation"
+    done
+fi
+
+# Combine the extracted strings.
+combined="$title$menu_names$language_names"
+
+# Get unique characters.
+unique_chars=$(echo "$combined" | grep -o . | sort -u | tr -d '\n')
+
+# Create a temporary file for subset.woff2.
+temp_subset=$(mktemp)
+
+# Create the subset.
+pyftsubset "$font_file" \
+    --text="$unique_chars" \
+    --layout-features="*" --flavor="woff2" --output-file="$temp_subset" --with-zopfli
+
+# Remove trailing slash from output path, if present.
+output_path=${output_path%/}
+
+# Base64 encode the temporary subset.woff2 file and create the CSS file.
+base64_encoded_font=$(base64 -i "$temp_subset")
+echo "@font-face{font-family:\"Inter Subset\";src:url(data:application/font-woff2;base64,$base64_encoded_font);}" > "$output_path/custom_subset.css"
+
+# Remove the temporary subset.woff2 file.
+rm "$temp_subset"
+

Usage

Save the script somewhere like ~/bin/subset_font. Make it executable with chmod +x ~/bin/subset_font.

Now you can run it with the required --config and --font options:

~/bin/subset_font --config path/to/config.toml --font path/to/font.woff2
+

By default, this generates a custom_subset.css file in the current directory. Use -o or --output to specify a different path:

~/bin/subset_font -c path/to/config.toml -f path/to/font.woff2 -o path/to/output
+

You should place this custom_subset.css file inside the static/ directory.

Automating with Pre-commit Hook

You might change the title or menu options of your site, making the custom subset no longer useful.

To automate the process of creating this file, you can integrate the script into a Git pre-commit hook that checks for changes in the config.toml file, runs the script, and stores the resulting CSS file in the static/ directory of your site.

  1. Create a .git/hooks/pre-commit file in your Git project, if it doesn't already exist.

  2. Make it executable with chmod +x .git/hooks/pre-commit.

  3. Add the following code to the file:

# Check if config.toml has been modified.
+if git diff --cached --name-only | grep -q "config.toml"; then
+    echo "config.toml modified. Running subset_font…"
+
+    # Call the subset_font script.
+    ~/bin/subset_font -c config.toml -f static/fonts/Inter4.woff2 -o static/
+
+    # Add the generated subset.css file to the commit.
+    git add static/custom_subset.css
+fi
+

Make sure to modify the script to match the path where you stored the subset_font script. The config and font paths should work fine with tabi's default setup.

Now, every time you commit changes to your Git project, the pre-commit hook will check for modifications in the config.toml file and automatically run the subset_font script to update the custom_subset.css file.

By the way, if you're interested in a way to automatically update the date of your Zola posts or compress your PNG files, check out this post.

If you want to use all scripts at once (compressing PNG files, updating the date, and creating the font subset), combine their code into a single .git/hooks/pre-commit file.

\ No newline at end of file diff --git a/blog/customise-tabi/index.html b/blog/customise-tabi/index.html new file mode 100644 index 000000000..d647dac17 --- /dev/null +++ b/blog/customise-tabi/index.html @@ -0,0 +1,13 @@ +~/tabi • Customise tabi with skins and a default theme
Customise tabi with skins and a default theme

tabi can be customised in two ways: by setting the default theme (dark or light) and by choosing the main colour for the theme (skins).

Default theme

To permanently set your site to either the dark or light theme, you need to disable the theme switcher in config.toml and set your preferred theme as the default_theme.

For example, to have a permanent dark theme:

[extra]
+theme_switcher = false
+default_theme = "dark"
+

If your theme switcher is enabled, the default_theme will only be used as fallback, in case a visitor has JavaScript disabled.

Skins

Not a fan of teal? No problem! tabi has 12 skins for you to choose from. If none of these work for you, you can create your own.

A skin is a CSS file with two variables: the primary colour for the light theme, and the primary colour for the dark theme.

Enabling a skin is as easy as setting the skin variable in your config.toml with the name of the skin. For example:

[extra]
+skin = "sakura"
+

Take a look below at the available skins below.

Click on the images to switch between dark and light themes.


Teal

The default skin. If the skin variable is unset (or set to "teal"), this is what tabi looks like:


Lavender

To apply, use skin = "lavender".


Red

Switch to this by setting skin = "red".


Mint

A skin designed by 🅿️.

Activate it with skin = "mint".


Sakura

Inspired by the Japanese cherry blossom season.

To enable this skin, adjust skin = "sakura".


Blue

For this appearance, set skin = "blue".


Indigo Ingot

Indigo for blue (in light theme) and ingot for gold (in dark theme).

To activate this skin, use skin = "indigo_ingot".


Evangelion

Inspired by the colours of Evangelion Unit-01 (in dark theme) and Unit-02 (in light theme).


Monochrome

To achieve this look, set skin = "monochrome".


Low contrast orange

WARNING! This skin's light theme may have low contrast, affecting accessibility and Lighthouse rating. (Dark theme is fine.)

To use, set skin = "lowcontrast_orange".


Low contrast peach

WARNING! This skin's light theme may have low contrast, affecting accessibility and Lighthouse rating. (Dark theme is fine.)

To enable it, specify skin = "lowcontrast_peach".


Low contrast pink

WARNING! This skin's light theme may have low contrast, affecting accessibility and Lighthouse rating. (Dark theme is fine.)

For this colourscheme, choose skin = "lowcontrast_pink".


Create your own skin

You're not just limited to predefined skins. Why not create a look that's distinctively tailored to your preferences?

You can save your new skin it in either of these two directories:

  1. Inside the theme's directory: themes/tabi/sass/skins
  2. Inside your main site's directory: sass/skins (you'll need to create this folder)

Create a new .scss file (for example, your_skin.scss) in your preferred location. This file needs to have these two variables (this is the default skin, "teal"):

:root {
+    --primary-color: #087e96;
+}
+
+[data-theme='dark'] {
+    --primary-color: #91e0ee;
+}
+

Modify the colours to your taste. Once you're satisfied, update the skin variable to match your filename.

Remember to consider the accessibility of the colours you choose. Here's a link that can help you: WebAIM: Contrast Checker. The background of the light theme is #fff, and the dark one is #1f1f1f.

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 000000000..9582fbb2a --- /dev/null +++ b/blog/index.html @@ -0,0 +1 @@ +~/tabi • Blog
Blog
09 August 2023

Learn how to customise tabi using skins and setting a default theme, making your site uniquely yours.

Read more →
14 July 2023

Discover how to enable a comments section on your posts using giscus, utterances, Hyvor Talk, or Isso, enabling reader interaction and feedback.

Read more →
29 April 2023

Learn how to create a custom subset that only includes the necessary glyphs.

Read more →
22 February 2023

tabi has an easily customizable Content Security Policy (CSP) with safe defaults. Get peace of mind and an A+ on Mozilla Observatory.

Read more →
19 February 2023

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.

Read more →
\ No newline at end of file diff --git a/blog/javascript/index.html b/blog/javascript/index.html new file mode 100644 index 000000000..d8ba6175e --- /dev/null +++ b/blog/javascript/index.html @@ -0,0 +1 @@ +~/tabi • No mandatory JavaScript
No mandatory JavaScript

This theme has no mandatory JavaScript. Optionally, it can load a minimal amount to add some features that are impossible to achieve with HTML and CSS.

Globally enabled settings

  • The light/dark mode switch can be enabled by setting theme_switcher = true in the [extra] section of your config.toml (~900 bytes of JavaScript).

  • E-mail decoding (~400 bytes). To protect against spambots scraping your e-mail from your website, you can set encode_plaintext_email = true. If your site is on a public repository, for extra protection, consider setting your email as a base64-encoded string1 directly.

Settings that can be enabled globally and for individual posts

The following settings can be enabled globally for all pages or specifically for individual posts:

To enable these settings globally, add them in the [extra] section of your config.toml file. To enable for individual posts, set the corresponding variables in the [extra] section of the post's front matter.

  • Comments. giscus (2 KB), utterances (1 KB), Hyvor Talk (~800 bytes) or Isso (1KB) can be globally enabled by setting enabled_for_all_posts = true in the right section of your config.toml (i.e. [extra.giscus], [extra.utterances], [extra.hyvortalk] or [extra.isso]). To enable comments on individual posts, set the name of the system = true (e.g. hyvortalk = true) in the post's front matter.

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 or, on your terminal, run: printf 'mail@example.com' | base64.

\ No newline at end of file diff --git a/blog/markdown/index.html b/blog/markdown/index.html new file mode 100644 index 000000000..e6e0f6e61 --- /dev/null +++ b/blog/markdown/index.html @@ -0,0 +1,11 @@ +~/tabi • Markdown examples
Markdown examples

$\KaTeX$

$\KaTeX$ is a fast and easy-to-use library that enables the rendering of mathematical notation, using LaTeX syntax.

You can use $\KaTeX$ inline by wrapping the expression between $ or between \\( and \\).

For example, $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $ would render: $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $

To display the expression on its own line and centered, wrap it around $$ or between \\[ and \\].

For example, \\[ 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}} \\] renders: \[ 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}} \]

To activate $\KaTeX$ for a post, include katex = true within the [extra] section of the post's front matter. For exemple:

+++
+title = "Testing KaTeX"
+date = 2002-11-30
+
+[extra]
+katex = true
++++
+

You may enable it globally as well, by setting katex = true in the [extra] section of your config.toml.

For enhanced performance and security, the $\KaTeX$ JavaScript, CSS, and fonts are hosted locally.

Note: After enabling $\KaTeX$, if you want to use $ without rendering a mathematical expression, escape it with a single backslash: \$.

Table

Here's an example of a table1. Its colours change depending on the current theme.
SymbolElementAtomic Number
HHydrogen1
CCarbon6
FeIron26
AuGold79

Code Block

fn main() {
+    println!("Hello, world!") -> ();
+}
+

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}").

Quote

"We're all hurtling towards death. Yet here we are, for the moment, alive. Each of us knowing we're going to die. Each of us secretly believing we won't."

— Charlie Kaufman, Synecdoche, New York


1

And here's an example of a footnote!

\ No newline at end of file diff --git a/blog/page/1/index.html b/blog/page/1/index.html new file mode 100644 index 000000000..95b1b167c --- /dev/null +++ b/blog/page/1/index.html @@ -0,0 +1 @@ +Redirect

Click here to be redirected. \ No newline at end of file diff --git a/blog/page/2/index.html b/blog/page/2/index.html new file mode 100644 index 000000000..73f7e780c --- /dev/null +++ b/blog/page/2/index.html @@ -0,0 +1 @@ +~/tabi • Blog

Blog
31 January 2023

This post showcases some examples of Markdown formatting, including a table, code blocks and tags, quotes, tables, and footnotes.

Read more →
06 January 2023

JavaScript is only used when HTML and CSS aren't enough.

Read more →
01 November 2022

A post showcasing the optional Table of Contents and its options.

Read more →
\ No newline at end of file diff --git a/blog/security/index.html b/blog/security/index.html new file mode 100644 index 000000000..8f2543cec --- /dev/null +++ b/blog/security/index.html @@ -0,0 +1,9 @@ +~/tabi • Secure by default
Secure by default

The default configuration of the theme gets an A+ score on Mozilla Observatory.1

This is accomplished by programatically configuring Content Security Policy (CSP) headers based on a user-defined list of allowed domains in the config.toml file. Here's the default and recommended setup (you could remove the last directive if you don't want to embed YouTube videos):

[extra]
+allowed_domains = [
+    { directive = "font-src", domains = ["'self'", "data:"] },
+    { directive = "img-src", domains = ["'self'", "https://*", "data:"] },
+    { directive = "script-src", domains = ["'self'"] },
+    { directive = "style-src", domains = ["'self'"] },
+    { directive = "frame-src", domains = ["https://www.youtube-nocookie.com"] },
+]
+

The allowed_domains list specifies the URLs that the website should be able to connect to, and each domain in the list is associated with a CSP directive such as frame-src, connect-src, or script-src. The templates/partials/header.html file dynamically generates the CSP header based on this list.

This feature allows you to easily customize the website's security headers to allow for specific use cases, such as embedding YouTube videos, loading scripts or remote fonts (not recommended).

Note: enabling comments automatically allows scripts and frames from the comment system, as well as unsafe-inline styles when using utterances or Hyvor Talk.

1

Requires proper webserver configuration (e.g. redirecting HTTP traffic to HTTPS).

\ No newline at end of file diff --git a/blog/shortcodes/index.html b/blog/shortcodes/index.html new file mode 100644 index 000000000..6df2f48d6 --- /dev/null +++ b/blog/shortcodes/index.html @@ -0,0 +1,23 @@ +~/tabi • Custom shortcodes
Custom shortcodes

Image shortcodes

Note: all image shortcodes have two optional parameters: full_width, which defaults to false (see below), and lazy_loading, which defaults to true.

Dual theme images

Useful if you want to use a different image for the light and dark themes:

The Eiffel towerThe Eiffel tower

Usage

{{ dual_theme_image(light_src="img/paris_day.webp", dark_src="img/paris_night.webp" alt="The Eiffel tower") }}
+

Invertible image

Good for graphs, line drawings, diagrams… Inverts the colours of the image. The source image will be used for the light theme.

Invertible graph

Usage

{{ invertible_image(src="img/graph.webp", alt="Invertible graph") }}
+

Dimmable image

Images with too much brightness or contrast can be jarring against a dark background. Here's an example of a photograph that dims when the dark theme is active.

Photograph of a desert, heavenly sky

Usage

{{ dimmable_image(src="img/desert_by_oskerwyld.webp", alt="Photograph of a desert, heavenly sky") }}
+

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.

Edited picture
Original shot

Usage

{{ image_hover(default_src="img/before.webp", hovered_src="img/after.webp", default_alt="Edited picture", hovered_alt="Original shot") }}
+

Interactive image toggle

Display an image and switch to a different one on click. Ideal for highlighting differences or drawing attention to details.

Usage

{{ image_toggler(default_src="img/mojave_day.webp", toggled_src="img/mojave_night.webp", default_alt="Mojave during the day", toggled_alt="Mojave at night") }}
+

Full-width image

The image will expand to match the width of the header, which is usually wider than the article text (except on mobile/small windows).

All other image shortcodes can be made into full-width by setting the optional parameter full_width to true.

Photograph of a canal in Amsterdam

Usage

{{ full_width_image(src="img/amsterdam_by_oskerwyld.webp", alt="Photograph of a canal in Amsterdam") }}
+

Text shortcodes

Multilingual quotes

This shortcode allows you to display both the translated and original text for a quote. The quotation marks will be added automatically:

“What tranquility, to go through life in silence, greeting only friends.”

— Francisco Umbral

“Qué sosiego, ir por la vida en silencio, saludando sólo a los amigos.”

— 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") }}
+

References with hanging indent

This shortcode formats a reference section with a hanging indent like so:

Alderson, E. (2015). Cybersecurity and Social Justice: A Critique of Corporate Hegemony in a Digital World. New York Journal of Technology, 11(2), 24-39. https://doi.org/10.1007/s10198-022-01497-6.

Funkhouser, M. (2012). The Social Norms of Indecency: An Analysis of Deviant Behavior in Contemporary Society. Los Angeles Journal of Sociology, 16(3), 41-58. https://doi.org/10.1093/jmp/jhx037.

Schrute, D. (2005). The Beet Farming Revolution: An Analysis of Agricultural Innovation. Scranton Agricultural Quarterly, 38(3), 67-81.

Steinbrenner, G. (1997). The Cost-Benefit Analysis of George Costanza: An Examination of Risk-Taking Behavior in the Workplace. New York Journal of Business, 12(4), 112-125.

Winger, J. A. (2010). The Art of Debate: An Examination of Rhetoric in Greendale Community College's Model United Nations. Colorado Journal of Communication Studies, 19(2), 73-86. https://doi.org/10.1093/6seaons/1movie.

Usage

{% references() %}
+
+Your references go here.
+
+Each in a new line. Markdown (links, italics…) will be rendered.
+
+{% end %}
+

Spoiler

This shortcode allows you to blur text until the user clicks on it. Like this: Goldfish have a memory span of a few

As you can see, Markdown is rendered. You can even add newlines with <br>.

This shortcode has the optional flag fixed_blur to blur a fixed placeholder ("SPOILER"), instead of blurring the actual contents. Like this: it is to wait 24 hours before filing a missing person report.

Usage

{{ spoiler(text="text to hide", fixed_blur=false) }}
+

Containers

Wide container

Use this shortcode if you want to have a wider table, paragraph, code block… On desktop, it will take up the width of the header. It will have no effect on mobile, except for tables, which will get a horizontal scroll.

TitleYearDirectorCinematographerGenreIMDbDuration
Beoning2018Lee Chang-dongHong Kyung-pyoDrama/Mystery7.5148 min
The Master2012Paul Thomas AndersonMihai Mălaimare Jr.Drama/History7.1137 min
The Tree of Life2011Terrence MalickEmmanuel LubezkiDrama6.8139 min

Usage

{% wide_container() %}
+
+Place your code block, paragraph, table… here.
+
+Markdown will of course be rendered.
+
+{% end %}
+
\ No newline at end of file diff --git a/blog/toc/index.html b/blog/toc/index.html new file mode 100644 index 000000000..1fad457cb --- /dev/null +++ b/blog/toc/index.html @@ -0,0 +1,25 @@ +~/tabi • Table of Contents
Table of Contents

Documentation

Enabling (and positioning) the Table of Contents

There are two ways to enable the Table of Contents (ToC). If you want it to be right below the header (like in this page) set this variable on the post's front matter:

[extra]
+toc = true
+

If you'd rather show the ToC elsewhere on your post (e.g. after an introduction), you can do so by adding a line with this content wherever you'd like the ToC to appear:

<!-- toc -->
+

You can also use the simple {{ toc() }} shortcode, which will simply write that string for you, effectively inserting the ToC (Michael Clayton's idea).

This method will render the ToC without the "Table of Contents" header. This allows you to use a different (or no) header for the ToC, or hide it like this:

Hidden ToC

The code to achieve this:

<details>
+    <summary>Hidden ToC</summary>
+    <!-- toc -->
+</details>
+

Note: If you both set toc = true and have <!-- toc --> somewhere in your text, you'll get multiple ToCs.

If you set a custom position and a custom header for the ToC, you'll probably want to hide it (see the section below) like this:

+++
+title = "Your Post's Title"
+date = 2034-01-11
+
+[extra]
+toc_ignore_pattern = "^(Table of Contents)"
++++
+
+Here goes some introductory text.
+
+### Table of Contents
+
+<!-- toc -->
+
+## First content header
+

Setting a maximum depth

You can set the maximum depth for the ToC by specifying the toc_levels variable, which takes an integer between 1 and 4:

[extra]
+toc_levels = 2
+

In this example, only the first two levels of headers would be included in the ToC, regardless of their actual HTML tags (h1, h2, h3, etc.). If you want to include only the main level of headers, set toc_levels = 1. The default toc_levels value is 3.

Keep your readers in mind when setting the toc_levels. While it can be tempting to include many nested levels for detailed navigation, a shorter and simpler ToC can often be more reader-friendly and less overwhelming. Adjust the depth according to the complexity and length of your content for the best reader experience.

Hiding headers from the ToC

You might want to hide certain headers. For example, if your article has many Figures or Tables, they might clutter the ToC. You can hide specific headers in the ToC with the toc_ignore_pattern variable.

This variable expects a regular expression (regex), as it's using Tera's matching test. The toc_ignore_pattern is tested against the text of the header, excluding the # character(s). For example, for the header ### Further reading, the text Further reading would be checked against.

Here are some example values for toc_ignore_pattern along with the headers they can hide:
toc_ignore_patternExcludes headers which…
Tablecontain "Table"
^Figurestart with "Figure"
(?i)(table|figure)start with "Table" or "Figure" (case insensitive)
\[Draft\]$end with "[Draft]".

You can test your regular expression on a site like regex101 to ensure it works as expected.

Note: "Look-around" capabilities, including look-ahead and look-behind, are not supported.

Heading 1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 3.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 3.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 3.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 3.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Heading 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

\ No newline at end of file diff --git a/ca/archive/index.html b/ca/archive/index.html new file mode 100644 index 000000000..45cd6cbcd --- /dev/null +++ b/ca/archive/index.html @@ -0,0 +1 @@ +~/tabi • Arxiu
Arxiu
\ No newline at end of file diff --git a/ca/atom.xml b/ca/atom.xml new file mode 100644 index 000000000..60be261b4 --- /dev/null +++ b/ca/atom.xml @@ -0,0 +1,112 @@ + + + + + + Aquest és un canal web + també conegut com a canal Atom + Subscriu-te + copiant l'URL de la barra d'adreces al teu lector de notícies + Visita + per aprendre més i començar + És gratuït + la web + Publicacions recents + + + ~/tabi + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/ca/atom.xml + + Personalitza el color de tabi i el tema per defecte + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/customise-tabi/ + Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic. + + + Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/comments/ + Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors. + + + Optimitza la càrrega amb un subconjunt de font personalitzat + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/custom-font-subset/ + Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris. + + + Seguretat per defecte + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/security/ + 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. + + + Shortcodes personalitzats + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/shortcodes/ + 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. + + + Exemples de Markdown + 2023-01-31T00:00:00+00:00 + 2023-08-06T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/markdown/ + 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. + + + Sense JavaScript obligatori + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/javascript/ + JavaScript només s'utilitza quan HTML i CSS no són suficients. + + + Taula de contingut + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/toc/ + Una publicació que mostra la taula de contingut opcional i la seva configuració. + + diff --git a/ca/blog/comments/index.html b/ca/blog/comments/index.html new file mode 100644 index 000000000..b0bd03ee5 --- /dev/null +++ b/ca/blog/comments/index.html @@ -0,0 +1,56 @@ +~/tabi • Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes
Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes

tabi actualment suporta quatre sistemes de comentaris: giscus i utterances, Hyvor Talk i Isso.

giscus i utterances són projectes de codi obert que et permeten afegir una secció de comentaris al teu lloc web utilitzant les «issues» (utterances) o «discussions» (giscus) de GitHub. Són perfectes per a generadors de llocs estàtics com Zola, ja que permeten als teus lectors interactuar i deixar comentaris a les teves publicacions sense requerir un backend tradicional o una base de dades.

Com que tots dos es basen en GitHub, giscus i utterances requereixen que els usuaris tinguin un compte a GitHub i autoritzin l'aplicació respectiva. Alternativament, els visitants també poden comentar directament en la discussió o «issue» corresponent a GitHub.

Ambdues són excel·lents eines per afegir comentaris al teu blog, però giscus té alguns avantatges:

  • Més temes.
  • Suport per a reaccions.
  • Respostes a comentaris i vista de conversa.
  • Més segur: utterances requereix habilitar estils en línia no segurs («unsafe inline styles») per establir l'altura del frame; giscus no.
  • Suport multilingüe: utterances només està disponible en anglès; giscus suporta més de 20 idiomes.
  • Desenvolupament més actiu: l'últim commit de giscus, en el moment d'aquesta publicació, va ser fa dos dies. L'últim commit d'utterances es va fer fa més d'un any.

Hyvor Talk és una plataforma de comentaris de pagament centrada en la privadesa. Ofereix tots els avantatges del giscus i alguns més, com la moderació i la detecció de correu brossa.

Isso és un sistema de comentaris de codi obert autoallotjat que emmagatzema els comentaris a la seva pròpia base de dades. Un dels seus principals avantatges és la privacitat; no comparteix les dades dels usuaris amb tercers. També té una interfície lleugera i neta, facilitant als teus visitants deixar comentaris. Isso també permet comentaris anònims, potencialment augmentant la participació dels usuaris a la teva pàgina web.

Configuració

Sistemes basats en GitHub

giscus y utterances requereixen una configuració similar. Primer, visita el lloc web del sistema que vulguis habilitar: giscus.app o utteranc.es.

Segueix les instruccions de la secció Configuració del lloc web, i tria les opcions que prefereixis. Finalment, estableix els valors que es mostren a la secció Habilitar giscus/utterances (el bloc de codi script) en la secció corresponent del teu config.toml: [extra.giscus] o [extra.utterances].

giscus

giscus té més opcions que utterances:

[extra.giscus]
+enabled_for_all_posts = false
+automatic_loading = true
+repo = "elTeuNomDUsuariDeGithub/elTeuRepositori"
+repo_id = "LaTevaIDdeRepositori"
+category = "Anuncis"
+category_id = "LaTevaIDdeCategoria"
+mapping = "slug"
+strict_title_matching = 1  # 1 per habilitar, 0 per deshabilitar.
+enable_reactions = 1  # 1 per habilitar, 0 per deshabilitar.
+comment_box_above_comments = true
+light_theme = "noborder_light"
+dark_theme = "noborder_dark"
+lang = ""  # Deixa en blanc perquè coincideixi amb l'idioma de la pàgina.
+lazy_loading = true
+

utterances

[extra.utterances]
+enabled_for_all_posts = false
+automatic_loading = true
+repo = "elTeuNomDUsuariDeGithub/elTeuRepositori"
+issue_term = "slug"
+label = "💬"
+light_theme = "github-light"
+dark_theme = "photon-dark"
+lazy_loading = true
+

Hyvor Talk

Configura el teu lloc web des de la consola Hyvor Talk i completa la configuració a config.toml:

[extra.hyvortalk]
+enabled_for_all_posts = false
+automatic_loading = true
+website_id = "1234"
+page_id_is_slug = true
+lang = ""
+page_author = ""  # Correu (o correu codificat en base64) de l'autor.
+lazy_loading = true
+

Isso

Per habilitar Isso, primer hauràs d'instal·lar i executar un servidor Isso (aquí tens una guia útil). Després, completa aquestes configuracions a config.toml:

[extra.isso]
+enabled_for_all_posts = false
+automatic_loading = true
+endpoint_url = "https://example.com/comments/"  # URL a Isso.
+page_id_is_slug = true
+lang = ""
+max_comments_top = "inf"
+max_comments_nested = "5"
+avatar = true
+voting = true
+page_author_hashes = ""
+lazy_loading = true
+

Configuracions comunes

La opció enabled_for_all_posts = true habilita globalment el sistema de comentaris corresponent.

Alternativament, pots habilitar els comentaris a publicacions concretes afegint el nom del sistema (utterances, giscus, hyvortalk o isso) = true. Per exemple, així és com habilitaries giscus:

+++
+title = "L'art de l'entremaliadura segons Shin-Chan
+date = 1990-02-14
+description = "Descobreix com les travessures poden canviar la teva perspectiva de vida."
+
+[taxonomies]
+tags = ["personal", "travessures"]
+
+[extra]
+giscus = true
++++
+

Si accidentalment habilites més d'un sistema, Zola mostrarà un error.

Si el teu lloc web té múltiples idiomes amb publicacions coincidents (com aquesta demo), i t'agradaria compartir comentaris entre idiomes, has d'utilitzar issue_term = "slug" (per giscus y utterances) o page_id_is_slug = true (per Hyvor Talk o Isso). Això utilitzarà el nom de l'arxiu Markdown (sense l'etiqueta d'idioma) com a identificador. Totes les altres opcions crearan diferents seccions de comentaris per a cada idioma.

Exemple en viu

A continuació trobaràs el widget de giscus amb la configuració mostrada a dalt.

\ No newline at end of file diff --git a/ca/blog/custom-font-subset/index.html b/ca/blog/custom-font-subset/index.html new file mode 100644 index 000000000..485cc0e40 --- /dev/null +++ b/ca/blog/custom-font-subset/index.html @@ -0,0 +1,114 @@ +~/tabi • Optimitza la càrrega amb un subconjunt de font personalitzat
Optimitza la càrrega amb un subconjunt de font personalitzat

El problema

Les fonts personalitzades causen parpelleig de text a Firefox. Per veure un gif i més detalls, mira aquesta issue.

La solució

Per solucionar això, tabi carrega un subconjunt de glifs per a l'encapçalament. Donat que això augmenta lleugerament el temps de càrrega inicial, és una bona idea intentar minimitzar la mida d'aquest subconjunt.

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.

Requisits

Instal·la aquestes eines:

Executa pip install fonttools brotli per instal·lar totes dues.

L'script

El següent script pren un fitxer config.toml i un fitxer de font com a entrada, extreu els caràcters necessaris, crea un subconjunt de la font i genera un fitxer CSS que conté el subconjunt codificat en base64.

#!/usr/bin/env bash
+
+usage() {
+    echo "Usage: $0 [--config | -c CONFIG_FILE] [--font | -f FONT_FILE] [--output | -o OUTPUT_PATH]"
+    echo
+    echo "Options:"
+    echo "  --config, -c   Path to the config.toml file."
+    echo "  --font, -f     Path to the font file."
+    echo "  --output, -o   Output path for the generated custom_subset.css file (default: current directory)"
+    echo "  --help, -h     Show this help message and exit"
+}
+
+# La sortida per defecte és el directori actual.
+output_path="."
+
+# Opcions de la línia de comandes.
+while [ "$#" -gt 0 ]; do
+    case "$1" in
+        --config|-c)
+            config_file="$2"
+            shift 2
+            ;;
+        --font|-f)
+            font_file="$2"
+            shift 2
+            ;;
+        --output|-o)
+            output_path="$2"
+            shift 2
+            ;;
+        --help|-h)
+            usage
+            exit 0
+            ;;
+        *)
+            echo "Unknown option: $1"
+            usage
+            exit 1
+            ;;
+    esac
+done
+
+# Comprova si s'han proporcionat les opcions -c i -f.
+if [ -z "$config_file" ]; then
+    echo "Error: --config|-c option is required."
+    usage
+    exit 1
+fi
+
+if [ -z "$font_file" ]; then
+    echo "Error: --font|-f option is required."
+    usage
+    exit 1
+fi
+
+# Comprova si els fitxers de configuració i de font existeixen.
+if [ ! -f "$config_file" ]; then
+    echo "Error: Config file '$config_file' not found."
+    exit 1
+fi
+
+if [ ! -f "$font_file" ]; then
+    echo "Error: Font file '$font_file' not found."
+    exit 1
+fi
+
+# Extreu el títol i els noms del menú del fitxer de configuració.
+title=$(awk -F' = ' '/^title/{print $2}' "$config_file" | tr -d '"')
+menu_names=$(awk -F' = ' '/^menu/{f=1;next} /socials/{f=0} f && /name/{print $2}' "$config_file" | cut -d',' -f1 | tr -d '"' )
+language_names=$(awk -F' = ' '/^language_name\./{print $2}' "$config_file" | tr -d '"' )
+
+# Si el lloc web és multilingüe, obté les traduccions del menú.
+if [ -n "$language_names" ]; then
+    for menu_name in $menu_names; do
+        # Find the line with the menu name inside a [languages.*.translations] section and get the translated menus.
+        menu_translation=$(awk -F' = ' "/\\[languages.*\\.translations\\]/{f=1;next} /^\\[/ {f=0} f && /$menu_name =/{print \$2}" "$config_file" | tr -d '"' )
+        # Add the found menu value to the translations string
+        menu_names+="$menu_translation"
+    done
+fi
+
+# Combina les cadenes extretes.
+combined="$title$menu_names$language_names"
+
+# Obté els caràcters únics.
+unique_chars=$(echo "$combined" | grep -o . | sort -u | tr -d '\n')
+
+# Crea un fitxer temporal per a subset.woff2.
+temp_subset=$(mktemp)
+
+# Crea el subconjunto.
+pyftsubset "$font_file" \
+    --text="$unique_chars" \
+    --layout-features="*" --flavor="woff2" --output-file="$temp_subset" --with-zopfli
+
+# Codifica en base64 el fitxer temporal subset.woff2 i crea el fitxer CSS.
+base64_encoded_font=$(base64 -i "$temp_subset")
+echo "@font-face{font-family:\"Inter Subset\";src:url(data:application/font-woff2;base64,$base64_encoded_font);}" > "$output_path/custom_subset.css"
+
+# Elimina el fitxer temporal subset.woff2.
+rm "$temp_subset"
+

Ús

Guarda l'script a algun lloc com ~/bin/subset_font. Fes-lo executable amb chmod +x ~/bin/subset_font.

Ara pots executar-lo amb les opcions requerides --config i --font:

~/bin/subset_font --config path/to/config.toml --font path/to/font.woff2
+

De forma predeterminada, això generarà un fitxer custom_subset.css al directori actual. Utilitza -o o --output per especificar una ruta diferent:

~/bin/subset_font -c path/to/config.toml -f path/to/font.woff2 -o path/to/output
+

Col·loca aquest fitxer custom_subset.css dins del directori static/ del teu projecte de Zola.

Automatització amb un Pre-commit Hook

És possible que canviïs el títol o les opcions del menú del teu lloc web, la qual cosa faria que el subconjunt personalitzat deixés de ser útil.

Per automatitzar el procés de creació d'aquest fitxer, pots integrar l'script en un ganxo (hook) pre-commit de Git que s'activi en detectar canvis al fitxer config.toml, executi l'script i guardi el fitxer CSS resultant al directori static/ del teu lloc web.

  1. Crea un fitxer .git/hooks/pre-commit al teu projecte de Git, si encara no existeix.

  2. Fes-lo executable amb chmod +x .git/hooks/pre-commit.

  3. Afegeix el següent codi al fitxer:

# Comprova si config.toml s'ha modificat.
+if git diff --cached --name-only | grep -q "config.toml"; then
+    echo "config.toml modified. Running subset_font…"
+
+    # Executa l'script subset_font.
+    ~/bin/subset_font -c config.toml -f static/fonts/Inter4.woff2 -o static/
+
+    # Afegeix el fitxer subset.css generat al commit.
+    git add static/custom_subset.css
+fi
+

Asegura't de modificar l'script perquè coincideixi amb la ruta on has guardat l'script subset_font. Les rutes de configuració i font haurien de funcionar correctament amb la configuració predeterminada de tabi.

Ara, cada vegada que facis canvis al teu projecte de Git i facis commit, el ganxo pre-commit verificarà les modificacions al fitxer config.toml i executarà automàticament l'script subset_font per actualitzar el fitxer custom_subset.css.

Per cert, si t'interessa una forma d'actualitzar automàticament la data de les teves publicacions a Zola o comprimir automàticament els teus fitxers PNG, fes un cop d'ull a aquesta publicació.

Si desitges utilitzar tots els scripts alhora (compressió de fitxers PNG, actualització de la data i creació del subconjunt de fonts), combina el seu codi en un sol fitxer .git/hooks/pre-commit.

\ No newline at end of file diff --git a/ca/blog/customise-tabi/index.html b/ca/blog/customise-tabi/index.html new file mode 100644 index 000000000..9d916a436 --- /dev/null +++ b/ca/blog/customise-tabi/index.html @@ -0,0 +1,13 @@ +~/tabi • Personalitza el color de tabi i el tema per defecte
Personalitza el color de tabi i el tema per defecte

tabi pot ser personalitzat de dues maneres: establint el tema per defecte (fosc o clar) i triant el color principal per al tema ("skin").

Tema per defecte

Per configurar permanentment el teu lloc en el tema fosc o clar, necessites desactivar el theme_switcher a config.toml i establir el teu tema preferit (light o dark) a default_theme.

Per exemple, per tenir un tema fosc permanent:

[extra]
+theme_switcher = false
+default_theme = "dark"
+

Si el teu interruptor de mode clar/fosc està activat, el default_theme només s'utilitzarà com a reserva, en cas que un visitant tingui JavaScript desactivat.

Skins

No t'agrada l'aiguamarina? Cap problema! tabi té 12 skins per triar. Si cap d'aquestes t'agrada, pots crear la teva pròpia skin.

Una skin és un arxiu CSS amb dues variables: el color principal per al tema clar i el color principal per al tema fosc.

Activar una skin és tan fàcil com establir la variable skin a la teva config.toml amb el nom de la skin. Per exemple:

[extra]
+skin = "sakura"
+

Fes una ullada a les skins disponibles a continuació.

Fes clic a les imatges per canviar entre els temes fosc i clar.


Aiguamarina

La skin per defecte. Si la variable skin no està configurada (o és igual a "teal"), aquest és l'aspecte de tabi:


Lavanda

Per aplicar-la, utilitza skin = "lavender".


Vermell

Canvia a aquesta skin establint skin = "red".


Menta

Una skin dissenyada per 🅿️.

Activa-la amb skin = "mint".


Sakura

Inspirat per la temporada de floració dels cirerers al Japó.

Per habilitar aquesta skin, ajusta skin = "sakura".


Blau

Per activar aquesta aparença, estableix skin = "blue".


Lingot indigo

Indigo pel blau (en el tema clar) i lingot pel daurat (en el tema fosc).

Per activar aquest tema, utilitza skin = "indigo_ingot".


Evangelion

Inspirat pels colors de la Unitat Evangelion-01 (en el tema fosc) i la Unitat-02 (en el tema clar).


Monocromàtic

Per aconseguir aquesta aparença, estableix skin = "monochrome".


Taronja (baix contrast)

AVÍS! Aquesta skin en mode clar pot tenir baix contrast, afectant l'accessibilitat i la qualificació Lighthouse. (El mode fosc té bon contrast.)

Per utilitzar-la, estableix skin = "lowcontrast_orange".


Préssec (baix contrast)

AVÍS! Aquesta skin en mode clar pot tenir baix contrast, afectant l'accessibilitat i la qualificació Lighthouse. (El mode fosc té bon contrast.)

Especifica skin = "lowcontrast_peach" per utilitzar aquesta skin.


Rosa (baix contrast)

AVÍS! Aquesta skin en mode clar pot tenir baix contrast, afectant l'accessibilitat i la qualificació Lighthouse. (El mode fosc té bon contrast.)

Per utilitzar aquests colors, assigna skin = "lowcontrast_pink".


Crea la teva pròpia skin

No estàs limitat a les skins predefinides. Per què no crees un disseny únic que et representi?

Pots guardar la teva nova skin en qualsevol d'aquests dos directoris:

  1. Dins del directori del tema: themes/tabi/sass/skins
  2. Dins del directori principal del teu lloc: sass/skins (necessitaràs crear aquesta carpeta)

Crea un nou arxiu .scss (per exemple, la_teva_skin.scss) a la ubicació que prefereixis. Aquest arxiu ha de contenir aquestes dues variables (aquesta és la skin predeterminada, "teal"):

:root {
+    --primary-color: #087e96;
+}
+
+[data-theme='dark'] {
+    --primary-color: #91e0ee;
+}
+

Modifica els colors al teu gust. Una vegada estiguis satisfet, actualitza la variable skin perquè coincideixi amb el nom del teu arxiu.

Recorda tenir en compte l'accesibilitat dels colors que triis. Aquí tens un enllaç que et pot ajudar: WebAIM: Contrast Checker. El fondo del tema clar és #fff, i el del tema fosc #1f1f1f.

\ No newline at end of file diff --git a/ca/blog/index.html b/ca/blog/index.html new file mode 100644 index 000000000..57ae67640 --- /dev/null +++ b/ca/blog/index.html @@ -0,0 +1 @@ +~/tabi • Blog
Blog
09 d’agost 2023

Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic.

Llegir més →
14 de juliol 2023

Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors.

Llegir més →
29 d’abril 2023

Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris.

Llegir més →
22 de febrer 2023

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.

Llegir més →
19 de febrer 2023

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.

Llegir més →
\ No newline at end of file diff --git a/ca/blog/javascript/index.html b/ca/blog/javascript/index.html new file mode 100644 index 000000000..9ea378e3c --- /dev/null +++ b/ca/blog/javascript/index.html @@ -0,0 +1 @@ +~/tabi • Sense JavaScript obligatori
Sense JavaScript obligatori

Aquest tema no requereix JavaScript obligatori. Opcionalment, pot carregar una quantitat mínima per afegir algunes característiques que són impossibles d'aconseguir amb HTML i CSS.

Opcions habilitades globalment

  • L'interruptor de mode clar/fosc pot habilitar-se configurant theme_switcher = true a la secció [extra] del teu config.toml (~900 bytes de JavaScript).

  • Decodificació del correu (~400 bytes). Per protegir el teu lloc correu dels robots de correu brossa, pots configurar encode_plaintext_email = true. Si el teu lloc web està en un repositori públic, per a una protecció millorada, considera configurar el teu email com una cadena codificada en base641 directament (per exemple: email = "bWFpbEBleGFtcGxlLmNvbQ==").

Configuracions que es poden habilitar tant globalment com en publicacions individuals

Les següents configuracions es poden habilitar globalment per a totes les pàgines o específicament per a publicacions individuals:

Per habilitar aquestes configuracions globalment, afegeix-les a la secció [extra] del teu config.toml. Per habilitar-les en publicacions individuals, estableix les variables corresponents a l'apartat [extra] del front matter de la publicació.

  • Comentaris. giscus (2 KB), utterances (1 KB), Hyvor Talk (~800 bytes) o Isso (1KB) es poden habilitar globalment configurant enabled_for_all_posts = true a la secció apropiada del teu fitxer config.toml ([extra.giscus], [extra.utterances], [extra.hyvortalk] o [extra.isso]). Per habilitar comentaris en publicacions individuals, configura el nom del sistema = true (per exemple, `hyvort
  • Comentaris. giscus (2 KB), utterances (1 KB), Hyvor Talk (~800 bytes) o Isso (1KB) es poden habilitar globalment configurant enabled_for_all_posts = true a la secció apropiada del teu fitxer config.toml ([extra.giscus], [extra.utterances], [extra.hyvortalk] o [extra.isso]). Per habilitar comentaris en publicacions individuals, configura el nom del sistema = true (per exemple, hyvortalk = true) al front matter del post.

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 o, al terminal, executa: printf 'mail@example.com' | base64.

\ No newline at end of file diff --git a/ca/blog/markdown/index.html b/ca/blog/markdown/index.html new file mode 100644 index 000000000..507a616d0 --- /dev/null +++ b/ca/blog/markdown/index.html @@ -0,0 +1,11 @@ +~/tabi • Exemples de Markdown
Exemples de Markdown

$\KaTeX$

$\KaTeX$ és una llibreria ràpida i fàcil d'usar que permet representar notació matemàtica mitjançant la sintaxi LaTeX.

Pots utilitzar $\KaTeX$ en línia embolcallant l'expressió entre $ o entre \\( i \\).

Per exemple, $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $ es renderitzarà com: $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $

Per mostrar l'expressió en una línia pròpia i centrada, embolcalla-la amb $$ o entre \\[ i \\].

Per exemple, \\[ 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}} \\] es renderitzarà com: \[ 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}} \]

Per activar $\KaTeX$ en una publicació, inclou katex = true dins de la secció [extra] dels metadades de la publicació. Per exemple:

+++
+title = "Provant KaTeX"
+date = 2002-11-30
+
+[extra]
+katex = true
++++
+

Per activar-lo globalment, afeigeix katex = true a la secció [extra] del teu config.toml.

Per obtenir un millor rendiment i seguretat, els fitxers JavaScript, CSS i les tipografies de $\KaTeX$ s'allotgen localment.

Nota: Després d'activar $\KaTeX$, si vols utilitzar el caràcter $ sense renderitzar-lo com a expressió matemàtica, escapa'l amb una barra inversa: \$.

Taula

Aquí tens un exemple de taula1. Els seus colors canvien en funció del tema actual.
SímbolElementNombre atòmic
HHidrogen1
CCarboni6
FeFerro26
AuOr79

Bloc de codi

fn main() {
+    println!("Hola, món!") -> ();
+}
+

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}").

Quote

«La vida, perquè sigui vida, s'ha de viure a poc a poc…»

— Mercè Rodoreda, La plaça del Diamant


1

I aquí tens un exemple de nota a peu de pàgina!

\ No newline at end of file diff --git a/ca/blog/page/1/index.html b/ca/blog/page/1/index.html new file mode 100644 index 000000000..1111353a3 --- /dev/null +++ b/ca/blog/page/1/index.html @@ -0,0 +1 @@ +Redirect

Click here to be redirected. \ No newline at end of file diff --git a/ca/blog/page/2/index.html b/ca/blog/page/2/index.html new file mode 100644 index 000000000..9c8367ba3 --- /dev/null +++ b/ca/blog/page/2/index.html @@ -0,0 +1 @@ +~/tabi • Blog

Blog
31 de gener 2023

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.

Llegir més →
06 de gener 2023

JavaScript només s'utilitza quan HTML i CSS no són suficients.

Llegir més →
01 de novembre 2022

Una publicació que mostra la taula de contingut opcional i la seva configuració.

Llegir més →
\ No newline at end of file diff --git a/ca/blog/security/index.html b/ca/blog/security/index.html new file mode 100644 index 000000000..712306059 --- /dev/null +++ b/ca/blog/security/index.html @@ -0,0 +1,9 @@ +~/tabi • Seguretat per defecte
Seguretat per defecte

La configuració per defecte del tema obté una puntuació A+ a l'Observatori de Mozilla.1

Això s'aconsegueix configurant programàticament les capçaleres de la Política de Seguretat de Contingut (CSP) basant-se en una llista de dominis permesos definida per l'usuari en el fitxer config.toml. Aquí tens la configuració per defecte i recomanada (pots eliminar l'última directiva si no vols inserir vídeos de YouTube):

[extra]
+allowed_domains = [
+    { directive = "font-src", domains = ["'self'", "data:"] },
+    { directive = "img-src", domains = ["'self'", "https://*", "data:"] },
+    { directive = "script-src", domains = ["'self'"] },
+    { directive = "style-src", domains = ["'self'"] },
+    { directive = "frame-src", domains = ["https://www.youtube-nocookie.com"] },
+]
+

La llista allowed_domains especifica les URLs a les quals el lloc web hauria de poder connectar-se, i cada domini de la llista està associat amb una directiva CSP com frame-src, connect-src o script-src. El fitxer templates/partials/header.html genera dinàmicament la capçalera CSP basant-se en aquesta llista.

Aquesta funcionalitat permet personalitzar fàcilment les capçaleres de seguretat del lloc web per permetre casos d'ús específics, com ara inserir vídeos de YouTube, carregar scripts o tipografies remotes (no recomanat).

Nota: habilitar els comentaris permet automàticament scripts i frames del sistema de comentaris corresponent, així com estils en línia no segurs en el cas de utterances i Hyvor Talk.

1

Requereix una configuració adequada del servidor web (p. ex., redirigir el trànsit HTTP a HTTPS).

\ No newline at end of file diff --git a/ca/blog/shortcodes/index.html b/ca/blog/shortcodes/index.html new file mode 100644 index 000000000..8bf9514ca --- /dev/null +++ b/ca/blog/shortcodes/index.html @@ -0,0 +1,23 @@ +~/tabi • Shortcodes personalitzats
Shortcodes personalitzats

Shortcodes d'imatge

Nota: tots els shortcodes d'imatge tenen dos paràmetres opcionals: full_width, que té com a valor predeterminat false (vegeu a sota), i lazy_loading, que té com a valor predeterminat true.

Imatges per a temes duals

Útil si vols utilitzar una imatge diferent pels temes clar i fosc:

La Torre EiffelLa Torre Eiffel

Ús

{{ dual_theme_image(light_src="img/paris_day.webp", dark_src="img/paris_night.webp" alt="La Torre Eiffel") }}
+

Imatge invertible

Útil per a gràfics, dibuixos de línies, diagrames… Inverteix els colors de la imatge. La imatge original s'utilitzarà per al tema clar.

Gràfic invertible

Ús

{{ invertible_image(src="img/graph.webp", alt="Gràfic invertible") }}
+

Imatge regulable

Les imatges amb massa brillantor o contrast poden ser molestes en un fons fosc. Aquí tens un exemple d'una fotografia que s'atenua quan s'activa el tema fosc.

Fotografia d'un desert, cel celestial

Ús

{{ dimmable_image(src="img/desert_by_oskerwyld.webp", alt="Fotografia d'un desert, cel celestial") }}
+

Canvi d'imatge en passar el cursor

La imatge mostrada canvia quan l'usuari passa el cursor per sobre. Útil per a comparacions d'abans i després, per exemple.

Foto editada
Foto original

Ús

{{ image_hover(default_src="img/before.webp", hovered_src="img/after.webp", default_alt="Foto editada", hovered_alt="Foto original") }}
+

Canvi d'imatge via clic

Mostra una imatge i canvia a una diferent en fer clic. Ideal per destacar diferències o cridar l'atenció sobre detalls.

Ús

{{ image_toggler(default_src="img/mojave_day.webp", toggled_src="img/mojave_night.webp", default_alt="Mojave de dia", toggled_alt="Mojave de nit") }}
+

Imatge d'amplada completa

La imatge s'expandirà per coincidir amb l'amplada de la capçalera, que normalment és més ampla que el text de l'article (excepte en mòbil/finestres petites).

Tots els altres shortcodes d'imatges poden utilizar l'amplada completa assignant true al paràmetre opcional full_width.

Fotografia d'un canal a Àmsterdam

Ús

{{ full_width_image(src="img/amsterdam_by_oskerwyld.webp", alt="Fotografia d'un canal a Àmsterdam") }}
+

Shortcodes de text

Cites multillenguatge

Aquest shortcode permet mostrar una cita traduïda i en el llenguatge original:

«La lògica, encara que inquebrantable, no resisteix a un home que vol viure.»

— Franz Kafka

«Die Logik ist zwar unerschütterlich, aber einem Menschen, der leben will, widersteht sie nicht.»

— Franz Kafka

Ús

{{ multilingual_quote(original="Die Logik ist zwar unerschütterlich, aber einem Menschen, der leben will, widersteht sie nicht.", translated="La lògica, encara que inquebrantable, no resisteix a un home que vol viure.", author="Franz Kafka") }}
+

Referències amb sagnat invertit

Aquest shortcode formata una secció de referència amb un sagnat invertit de la següent manera:

Alderson, E. (2015). Ciberseguretat i justícia social: Una crítica a la hegemonia corporativa en un món digital. New York Journal of Technology, 11(2), 24-39. https://doi.org/10.1007/s10198-022-01497-6.

Funkhouser, M. (2012). Les normes socials d'indecència: Un anàlisi del comportament desviat a la societat contemporània. Los Angeles Journal of Sociology, 16(3), 41-58. https://doi.org/10.1093/jmp/jhx037.

Schrute, D. (2005). La revolució de l'agricultura de remolatxa: Un anàlisi de la innovació agrícola. Scranton Agricultural Quarterly, 38(3), 67-81.

Steinbrenner, G. (1997). L'anàlisi cost-benefici de George Costanza: Un anàlisi del comportament de presa de riscos en el lloc de treball. New York Journal of Business, 12(4), 112-125.

Winger, J. A. (2010). L'art del debat: Un examen de la retòrica en el model de les Nacions Unides del Greendale Community College. Colorado Journal of Communication Studies, 19(2), 73-86. https://doi.org/10.1093/6seaons/1movie.

Ús

{% references() %}
+
+Les teves referències van aquí.
+
+Cada una en una nova línia. Es renderitzarà el Markdown (enllaços, cursiva…).
+
+{% end %}
+

Spoiler

Aquest shortcode amaga el text fins que l'usuari fa clic per revelar-lo. Per exemple: A l'antiga Roma, el vomitorium era

Com veus, el Markdown es renderitza.

Aquest shortcode té l'opció fixed_blur per difuminar el text "SPOILER", en lloc de difuminar el contingut real. Per exemple: és esperar 24 hores abans de denunciar la desaparició d'una persona.

Ús

{{ spoiler(text="text a amagar", fixed_blur=false) }}
+

Contenidors

Contenidor ample

Utilitza aquest codi curt si vols tenir una taula, paràgraf, bloc de codi… més ample. A l'escriptori, ocuparà l'amplada de la capçalera. A mòbils no tindrà efecte, excepte per les taules, que guanyaran scroll horitzontal.

TítolAnyDirectorDirector de fotografiaGènereIMDbDurada
Beoning2018Lee Chang-dongHong Kyung-pyoDrama/Misteri7.5148 min
The Master2012Paul Thomas AndersonMihai Mălaimare Jr.Drama/Història7.1137 min
The Tree of Life2011Terrence MalickEmmanuel LubezkiDrama6.8139 min

Ús

{% wide_container() %}
+
+Posa el teu bloc de codi, paràgraf, taula… aquí.
+
+El Markdown, per suposat, serà interpretat.
+
+{% end %}
+
\ No newline at end of file diff --git a/ca/blog/toc/index.html b/ca/blog/toc/index.html new file mode 100644 index 000000000..247859b5f --- /dev/null +++ b/ca/blog/toc/index.html @@ -0,0 +1,25 @@ +~/tabi • Taula de contingut
Taula de contingut

Documentació

Habilitant (i posicionant) la Taula de Contingut

Hi ha dues formes d'habilitar la Taula de Contingut (TdC). Si vols que estigui just a sota del capçalera (com en aquesta pàgina), configura aquesta variable en el front matter del teu post:

[extra]
+toc = true
+

Si prefereixes col·locar la TdC a un altre lloc (per exemple, després d'una introducció), pots fer-ho afegint una línia amb aquest contingut allà on vulguis que aparegui la TdC:

<!-- toc -->
+

També pots utilitzar el shortcode {{ toc() }}, que simplement inserirà aquest text per tu (idea de Michael Clayton).

Aquest mètode renderitzarà la TdC sense el capçalera "Taula de Contingut". Això et permet utilitzar un capçalera diferent (o cap) per la TdC, o fins i tot ocultar-la de forma predeterminada:

TdC oculta

El codi per aconseguir-ho:

<details>
+    <summary>TdC oculta</summary>
+    <!-- toc -->
+</details>
+

Nota: Si actives la TdC amb toc = true i també afegeixes <!-- toc --> en algun lloc del teu text, obtindràs múltiples TdCs.

Si col·loques la TdC en un lloc diferent del predeterminat i li afegeixes un capçalera, segurament voldràs ocultar aquest capçalera de la TdC (consulta la secció per ocultar capçaleres). Pots fer-ho així:

+++
+title = "El títol del teu post"
+date = 2034-01-11
+
+[extra]
+toc_ignore_pattern = "^(Taula de contingut)"
++++
+
+Aquí va algun text introductori.
+
+### Taula de contingut
+
+<!-- toc -->
+
+## Primer encapçalament de contingut
+

Establint la profunditat màxima

Pots establir la profunditat màxima per la TdC especificant la variable toc_levels, que accepta un número enter entre 1 i 4:

[extra]
+toc_levels = 2
+

En aquest exemple, només els dos primers nivells d'encapçalaments s'inclourien a la TdC, independentment de les seves etiquetes HTML reals (h1, h2, h3, etc.). Si vols incloure només el nivell principal d'encapçalaments, estableix toc_levels = 1. El valor per defecte de toc_levels és 3.

Tingues en compte als teus lectors quan establertis toc_levels. Encara que pot ser temptador incloure molts nivells imbricats per a una navegació detallada, una TdC més curta i senzilla sovint és més amigable i menys aclaparadora.

Ocultant capçaleres de la TdC

És possible que vulguis amagar certes capçaleres. Per exemple, si el teu article té moltes Figures o Taules, aquestes podrien saturar la TdC. Pots ocultar capçaleres específiques a la TdC configurant la variable toc_ignore_pattern en la secció [extra] del front matter del teu post.

Aquesta variable espera una expressió regular (regex), ja que utilitza el test matching de Tera. El toc_ignore_pattern es prova contra el text del capçalera. Per exemple, per a la capçalera ### Lectura addicional, només el text Lectura addicional s'utilitzaria per comprovar si coincideix amb el patró.

Aquí tens alguns valors d'exemple per a toc_ignore_pattern juntament amb les capçaleres que amagarien:
toc_ignore_patternExclou capçaleres que…
Taulacontinguin "Taula"
^Figuracomencin amb "Figura"
(?i)(taula|figura)comencin amb "Taula" o "Figura" (insensible a majúscules/minúscules)
\[Esborrany\]$acabin amb "[Esborrany]".

Pots provar la teva expressió regular en plataformes com regex101 per assegurar-te que funciona com esperes.

Nota: Les capacitats de "look-around", incloent look-ahead i look-behind, no estan suportades.

Capçalera 1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 3.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 3.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 3.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 3.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Capçalera 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

\ No newline at end of file diff --git a/ca/index.html b/ca/index.html new file mode 100644 index 000000000..cbb1356bd --- /dev/null +++ b/ca/index.html @@ -0,0 +1 @@ +~/tabi
Publicacions recents
09 d’agost 2023

Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic.

Llegir més →
14 de juliol 2023

Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors.

Llegir més →
29 d’abril 2023

Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris.

Llegir més →
22 de febrer 2023

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.

Llegir més →
\ No newline at end of file diff --git a/ca/projects/chu/index.html b/ca/projects/chu/index.html new file mode 100644 index 000000000..d4557eacc --- /dev/null +++ b/ca/projects/chu/index.html @@ -0,0 +1 @@ +~/tabi • chu
chu
  •  0 min de lectura
\ No newline at end of file diff --git a/ca/projects/index.html b/ca/projects/index.html new file mode 100644 index 000000000..f58b88b2d --- /dev/null +++ b/ca/projects/index.html @@ -0,0 +1 @@ +~/tabi • Projectes
Projectes
img/tabi.webp

tabi

Un tema de Zola ràpid, lleuger i modern amb JavaScript opcional.
img/chu.webp

chu

Aplicació Flask per a càrregues de fitxers segures, amb eliminació de metadades, compressió, protecció amb contrasenya i més.
img/nani.webp

nani

Script Bash per crear URL públiques a partir de fitxers o text en servidors remots.
img/spectro.webp

spectro

Script de Bash per generar espectrogrames, comparar-los, carregar-los a Imgur i proporcionar els corresponents URLs per compartir-los.
\ No newline at end of file diff --git a/ca/projects/nani/index.html b/ca/projects/nani/index.html new file mode 100644 index 000000000..81597cf81 --- /dev/null +++ b/ca/projects/nani/index.html @@ -0,0 +1 @@ +~/tabi • nani
nani
  •  0 min de lectura
\ No newline at end of file diff --git a/ca/projects/spectro/index.html b/ca/projects/spectro/index.html new file mode 100644 index 000000000..b9710d56f --- /dev/null +++ b/ca/projects/spectro/index.html @@ -0,0 +1 @@ +~/tabi • spectro
spectro
  •  0 min de lectura
\ No newline at end of file diff --git a/ca/projects/tabi/index.html b/ca/projects/tabi/index.html new file mode 100644 index 000000000..8b43cbff0 --- /dev/null +++ b/ca/projects/tabi/index.html @@ -0,0 +1 @@ +~/tabi • tabi
tabi
  •  0 min de lectura
\ No newline at end of file diff --git a/ca/tags/funcionalitat/atom.xml b/ca/tags/funcionalitat/atom.xml new file mode 100644 index 000000000..184398918 --- /dev/null +++ b/ca/tags/funcionalitat/atom.xml @@ -0,0 +1,112 @@ + + + + + + Aquest és un canal web + també conegut com a canal Atom + Subscriu-te + copiant l'URL de la barra d'adreces al teu lector de notícies + Visita + per aprendre més i començar + És gratuït + la web + Publicacions recents + + + ~/tabi - funcionalitat + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/funcionalitat/atom.xml + + Personalitza el color de tabi i el tema per defecte + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/customise-tabi/ + Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic. + + + Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/comments/ + Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors. + + + Optimitza la càrrega amb un subconjunt de font personalitzat + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/custom-font-subset/ + Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris. + + + Seguretat per defecte + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/security/ + 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. + + + Shortcodes personalitzats + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/shortcodes/ + 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. + + + Exemples de Markdown + 2023-01-31T00:00:00+00:00 + 2023-08-06T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/markdown/ + 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. + + + Sense JavaScript obligatori + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/javascript/ + JavaScript només s'utilitza quan HTML i CSS no són suficients. + + + Taula de contingut + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/toc/ + Una publicació que mostra la taula de contingut opcional i la seva configuració. + + diff --git a/ca/tags/funcionalitat/index.html b/ca/tags/funcionalitat/index.html new file mode 100644 index 000000000..f897c0c66 --- /dev/null +++ b/ca/tags/funcionalitat/index.html @@ -0,0 +1,2 @@ + + ~/tabi • funcionalitat
funcionalitat
09 d’agost 2023

Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic.

Llegir més →
14 de juliol 2023

Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors.

Llegir més →
29 d’abril 2023

Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris.

Llegir més →
22 de febrer 2023

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.

Llegir més →
19 de febrer 2023

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.

Llegir més →
31 de gener 2023

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.

Llegir més →
06 de gener 2023

JavaScript només s'utilitza quan HTML i CSS no són suficients.

Llegir més →
01 de novembre 2022

Una publicació que mostra la taula de contingut opcional i la seva configuració.

Llegir més →
\ No newline at end of file diff --git a/ca/tags/index.html b/ca/tags/index.html new file mode 100644 index 000000000..9abf4901b --- /dev/null +++ b/ca/tags/index.html @@ -0,0 +1,3 @@ + + +~/tabi • Etiquetes
Totes les etiquetes
\ No newline at end of file diff --git a/ca/tags/markdown/atom.xml b/ca/tags/markdown/atom.xml new file mode 100644 index 000000000..309dd1339 --- /dev/null +++ b/ca/tags/markdown/atom.xml @@ -0,0 +1,46 @@ + + + + + + Aquest és un canal web + també conegut com a canal Atom + Subscriu-te + copiant l'URL de la barra d'adreces al teu lector de notícies + Visita + per aprendre més i començar + És gratuït + la web + Publicacions recents + + + ~/tabi - markdown + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-08-14T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/markdown/atom.xml + + Exemples de Markdown + 2023-01-31T00:00:00+00:00 + 2023-08-06T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/markdown/ + 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. + + + Taula de contingut + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/toc/ + Una publicació que mostra la taula de contingut opcional i la seva configuració. + + diff --git a/ca/tags/markdown/index.html b/ca/tags/markdown/index.html new file mode 100644 index 000000000..d136444fe --- /dev/null +++ b/ca/tags/markdown/index.html @@ -0,0 +1,2 @@ + + ~/tabi • markdown
markdown
31 de gener 2023

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.

Llegir més →
01 de novembre 2022

Una publicació que mostra la taula de contingut opcional i la seva configuració.

Llegir més →
\ No newline at end of file diff --git a/ca/tags/seguretat/atom.xml b/ca/tags/seguretat/atom.xml new file mode 100644 index 000000000..a664f8ca3 --- /dev/null +++ b/ca/tags/seguretat/atom.xml @@ -0,0 +1,35 @@ + + + + + + Aquest és un canal web + també conegut com a canal Atom + Subscriu-te + copiant l'URL de la barra d'adreces al teu lector de notícies + Visita + per aprendre més i començar + És gratuït + la web + Publicacions recents + + + ~/tabi - seguretat + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-07-17T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/seguretat/atom.xml + + Seguretat per defecte + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/security/ + 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. + + diff --git a/ca/tags/seguretat/index.html b/ca/tags/seguretat/index.html new file mode 100644 index 000000000..63177f4c5 --- /dev/null +++ b/ca/tags/seguretat/index.html @@ -0,0 +1,2 @@ + + ~/tabi • seguretat
seguretat
22 de febrer 2023

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.

Llegir més →
\ No newline at end of file diff --git a/ca/tags/shortcodes/atom.xml b/ca/tags/shortcodes/atom.xml new file mode 100644 index 000000000..d38d1bacb --- /dev/null +++ b/ca/tags/shortcodes/atom.xml @@ -0,0 +1,35 @@ + + + + + + Aquest és un canal web + també conegut com a canal Atom + Subscriu-te + copiant l'URL de la barra d'adreces al teu lector de notícies + Visita + per aprendre més i començar + És gratuït + la web + Publicacions recents + + + ~/tabi - shortcodes + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/shortcodes/atom.xml + + Shortcodes personalitzats + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/shortcodes/ + 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. + + diff --git a/ca/tags/shortcodes/index.html b/ca/tags/shortcodes/index.html new file mode 100644 index 000000000..bc3922a04 --- /dev/null +++ b/ca/tags/shortcodes/index.html @@ -0,0 +1,2 @@ + + ~/tabi • shortcodes
shortcodes
19 de febrer 2023

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.

Llegir més →
\ No newline at end of file diff --git a/ca/tags/tutorial/atom.xml b/ca/tags/tutorial/atom.xml new file mode 100644 index 000000000..dcfc109cf --- /dev/null +++ b/ca/tags/tutorial/atom.xml @@ -0,0 +1,79 @@ + + + + + + Aquest és un canal web + també conegut com a canal Atom + Subscriu-te + copiant l'URL de la barra d'adreces al teu lector de notícies + Visita + per aprendre més i començar + És gratuït + la web + Publicacions recents + + + ~/tabi - tutorial + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-08-18T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/tutorial/atom.xml + + Personalitza el color de tabi i el tema per defecte + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/customise-tabi/ + Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic. + + + Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/comments/ + Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors. + + + Optimitza la càrrega amb un subconjunt de font personalitzat + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/custom-font-subset/ + Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris. + + + Sense JavaScript obligatori + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/javascript/ + JavaScript només s'utilitza quan HTML i CSS no són suficients. + + + Taula de contingut + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/toc/ + Una publicació que mostra la taula de contingut opcional i la seva configuració. + + diff --git a/ca/tags/tutorial/index.html b/ca/tags/tutorial/index.html new file mode 100644 index 000000000..bf0c8e44f --- /dev/null +++ b/ca/tags/tutorial/index.html @@ -0,0 +1,2 @@ + + ~/tabi • tutorial
tutorial
09 d’agost 2023

Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic.

Llegir més →
14 de juliol 2023

Descobreix com habilitar una secció de comentaris a les teves publicacions utilitzant giscus, utterances, Hyvor Talk, o Isso, permetent la interacció i feedback dels lectors.

Llegir més →
29 d’abril 2023

Aprèn com crear un subconjunt personalitzat que només inclogui els glifs necessaris.

Llegir més →
06 de gener 2023

JavaScript només s'utilitza quan HTML i CSS no són suficients.

Llegir més →
01 de novembre 2022

Una publicació que mostra la taula de contingut opcional i la seva configuració.

Llegir més →
\ No newline at end of file diff --git a/custom_subset.css b/custom_subset.css new file mode 100644 index 000000000..95361a622 --- /dev/null +++ b/custom_subset.css @@ -0,0 +1 @@ +@font-face{font-family:"Inter Subset";src:url(data:application/font-woff2;base64,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);} diff --git a/es/archive/index.html b/es/archive/index.html new file mode 100644 index 000000000..bb054e071 --- /dev/null +++ b/es/archive/index.html @@ -0,0 +1 @@ +~/tabi • Archivo
Archivo
\ No newline at end of file diff --git a/es/atom.xml b/es/atom.xml new file mode 100644 index 000000000..2ffb4cd1e --- /dev/null +++ b/es/atom.xml @@ -0,0 +1,112 @@ + + + + + + Esta es una fuente web + también conocida como fuente Atom + Suscríbete + copiando la URL de la barra de direcciones en tu lector de noticias + Visita + para aprender más y empezar + Es gratis + la web + Publicaciones recientes + + + ~/tabi + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/es/atom.xml + + Personaliza el color de tabi y el tema predeterminado + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/customise-tabi/ + Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único. + + + Añade comentarios a tus publicaciones con estas 4 plataformas + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/comments/ + Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores. + + + Optimiza la carga con un subconjunto de fuente personalizado + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/custom-font-subset/ + Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios. + + + Seguro por defecto + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/security/ + 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. + + + Shortcodes personalizados + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/shortcodes/ + 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. + + + Ejemplos de Markdown + 2023-01-31T00:00:00+00:00 + 2023-08-06T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/markdown/ + 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. + + + Sin JavaScript obligatorio + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/javascript/ + JavaScript solo se utiliza cuando HTML y CSS no son suficientes. + + + Tabla de contenido + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/toc/ + Una publicación que muestra la tabla de contenido opcional así como su configuración. + + diff --git a/es/blog/comments/index.html b/es/blog/comments/index.html new file mode 100644 index 000000000..7732bc398 --- /dev/null +++ b/es/blog/comments/index.html @@ -0,0 +1,56 @@ +~/tabi • Añade comentarios a tus publicaciones con estas 4 plataformas
Añade comentarios a tus publicaciones con estas 4 plataformas

tabi actualmente soporta cuatro sistemas de comentarios: giscus y utterances, Hyvor Talk e Isso.

giscus y utterances son proyectos de código abierto que te permiten añadir una sección de comentarios a tu sitio web usando las «issues» (utterances) o «discussions» (giscus) de GitHub. Son perfectos para generadores de sitios estáticos como Zola, ya que permiten a tus lectores interactuar y dejar comentarios en tus publicaciones sin requerir un backend tradicional ni una base de datos.

Al estar basados en GitHub, giscus y utterances requieren que los usuarios tengan una cuenta en dicha plataforma y autoricen la respectiva aplicación. Alternativamente, los visitantes también pueden comentar directamente en la discusión o «issue» correspondiente de GitHub.

Ambas son excelentes herramientas para agregar comentarios a tu blog, pero giscus tiene algunas ventajas:

  • Más temas.
  • Soporte para reacciones.
  • Respuestas a comentarios y vista de conversación.
  • Más seguro: utterances requiere habilitar estilos en línea inseguros («unsafe inline styles») para ajustar la altura del frame; giscus no.
  • Soporte multilingüe: utterances solo está disponible en inglés; giscus soporta más de 20 idiomas.
  • Desarrollo más activo: el último commit de giscus, a fecha de esta publicación, fue hace una dos días. El último commit de utterances fue hace más de un año.

Hyvor Talk es una plataforma de comentarios de pago centrada en la privacidad. Ofrece todas las ventajas de giscus y algunas más, como moderación y detección de spam.

Isso es un sistema de comentarios de código abierto y autoalojado que almacena los comentarios en su propia base de datos. Una de sus principales ventajas es la privacidad; no comparte los datos de los usuarios con terceros. También tiene una interfaz ligera y limpia, lo que facilita que tus visitantes dejen comentarios. Isso también permite comentarios anónimos, lo que podría aumentar la participación de los usuarios en tu sitio web.

Configuración

Sistemas basados en GitHub

giscus y utterances requieren una configuración similar. Primero, visita el sitio web del sistema que quieras habilitar: giscus.app o utteranc.es.

Sigue las instrucciones de la sección Configuración del sitio web, y elige las opciones que prefieras. Luego, establece los valores que se muestran en la sección Habilitar giscus/utterances (el bloque de código script) en la sección correspondiente de tu config.toml: [extra.giscus] o [extra.utterances].

giscus

giscus tiene algunos ajustes más que utterances:

[extra.giscus]
+enabled_for_all_posts = false
+automatic_loading = true
+repo = "tuNombreDeUsuarioDeGithub/tuRepositorio"
+repo_id = "TuIDdeRepositorio"
+category = "Anuncios"
+category_id = "TuIDdeCategoría"
+mapping = "slug"
+strict_title_matching = 1  # 1 para habilitar, 0 para deshabilitar.
+enable_reactions = 1  # 1 para habilitar, 0 para deshabilitar.
+comment_box_above_comments = true
+light_theme = "noborder_light"
+dark_theme = "noborder_dark"
+lang = ""  # Deja en blanco para que coincida con el idioma de la página.
+lazy_loading = true
+

utterances

[extra.utterances]
+enabled_for_all_posts = false
+automatic_loading = true
+repo = "tuNombreDeUsuarioDeGithub/tuRepositorio"
+issue_term = "slug"
+label = "💬"
+light_theme = "github-light"
+dark_theme = "photon-dark"
+lazy_loading = true
+

Hyvor Talk

Configura tu web desde la consola de Hyvor Talk y rellena las opciones en config.toml:

[extra.hyvortalk]
+enabled_for_all_posts = false
+automatic_loading = true
+website_id = "1234"
+page_id_is_slug = true
+lang = ""
+page_author = ""  # Correo (o correo codificado en base64) del autor.
+lazy_loading = true
+

Isso

Para habilitar Isso, primero necesitarás instalar y ejecutar un servidor Isso (aquí tienes una guía útil). Luego, completa estas configuraciones en config.toml:

[extra.isso]
+enabled_for_all_posts = false
+automatic_loading = true
+endpoint_url = "https://example.com/comments/"  # URL a Isso.
+page_id_is_slug = true
+lang = ""
+max_comments_top = "inf"
+max_comments_nested = "5"
+avatar = true
+voting = true
+page_author_hashes = ""
+lazy_loading = true
+

Ajustes comunes

La opción enabled_for_all_posts = true habilitará globalmente el sistema de comentarios correspondiente.

Alternativamente, puedes habilitar los comentarios en publicaciones concretas añadiendo el nombre del sistema (utterances, giscus, hyvortalk o isso) = true. Por ejemplo, así habilitarías giscus:

+++
+title = "Los molinos de viento de mi vida: reflexiones de un escudero"
+date = 1605-01-16
+description = "Mi viaje junto a Don Quijote, enfrentándome a gigantes imaginarios y descubriendo las verdaderas batallas de la vida."
+
+[taxonomies]
+tags = ["personal", "reflexiones"]
+
+[extra]
+giscus = true
++++
+

Si accidentalmente habilitas más de un sistema, Zola mostrará un error.

Si tu web tiene múltiples idiomas con publicaciones coincidentes (como esta demo), y te gustaría compartir comentarios entre idiomas, debes usar issue_term = "slug" (en el caso de giscus y utterances) o page_id_is_slug = true (para Hyvor Talk e Isso). Esto usará el nombre del archivo Markdown (sin la etiqueta de idioma) como identificador. Todas las demás opciones crearán diferentes secciones de comentarios para cada idioma.

Ejemplo en vivo

Al final de esta publicación encontrarás el widget de giscus usando los ajustes mostrados arriba.

\ No newline at end of file diff --git a/es/blog/custom-font-subset/index.html b/es/blog/custom-font-subset/index.html new file mode 100644 index 000000000..9df659b3a --- /dev/null +++ b/es/blog/custom-font-subset/index.html @@ -0,0 +1,114 @@ +~/tabi • Optimiza la carga con un subconjunto de fuente personalizado
Optimiza la carga con un subconjunto de fuente personalizado

El problema

Las fuentes personalizadas causan parpadeo de texto en Firefox. Para ver un gif y más detalles, mira esta issue.

La solución

Para solucionar esto, tabi carga un subconjunto de glifos para el encabezado. Dado que esto aumenta ligeramente el tiempo de carga inicial, es una buena idea tratar de minimizar el tamaño de este subconjunto.

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.

Requisitos

Instala estas herramientas:

Ejecuta pip install fonttools brotli para instalar ambas.

El script

El script que sigue toma un archivo config.toml y un archivo de fuente como entrada, extrae los caracteres necesarios, crea un subconjunto de la fuente y genera un archivo CSS que contiene el subconjunto codificado en base64.

#!/usr/bin/env bash
+
+usage() {
+    echo "Usage: $0 [--config | -c CONFIG_FILE] [--font | -f FONT_FILE] [--output | -o OUTPUT_PATH]"
+    echo
+    echo "Options:"
+    echo "  --config, -c   Path to the config.toml file."
+    echo "  --font, -f     Path to the font file."
+    echo "  --output, -o   Output path for the generated custom_subset.css file (default: current directory)"
+    echo "  --help, -h     Show this help message and exit"
+}
+
+# La salida predeterminada es el directorio actual.
+output_path="."
+
+# Analiza las opciones de la línea de comandos.
+while [ "$#" -gt 0 ]; do
+    case "$1" in
+        --config|-c)
+            config_file="$2"
+            shift 2
+            ;;
+        --font|-f)
+            font_file="$2"
+            shift 2
+            ;;
+        --output|-o)
+            output_path="$2"
+            shift 2
+            ;;
+        --help|-h)
+            usage
+            exit 0
+            ;;
+        *)
+            echo "Unknown option: $1"
+            usage
+            exit 1
+            ;;
+    esac
+done
+
+# Comprueba si se proporcionan las opciones -c y -f.
+if [ -z "$config_file" ]; then
+    echo "Error: --config|-c option is required."
+    usage
+    exit 1
+fi
+
+if [ -z "$font_file" ]; then
+    echo "Error: --font|-f option is required."
+    usage
+    exit 1
+fi
+
+# Comprueba si existen los archivos de configuración y de fuentes.
+if [ ! -f "$config_file" ]; then
+    echo "Error: Config file '$config_file' not found."
+    exit 1
+fi
+
+if [ ! -f "$font_file" ]; then
+    echo "Error: Font file '$font_file' not found."
+    exit 1
+fi
+
+# Extrae el título y los nombres de los menús del archivo de configuración.
+title=$(awk -F' = ' '/^title/{print $2}' "$config_file" | tr -d '"')
+menu_names=$(awk -F' = ' '/^menu/{f=1;next} /socials/{f=0} f && /name/{print $2}' "$config_file" | cut -d',' -f1 | tr -d '"' )
+language_names=$(awk -F' = ' '/^language_name\./{print $2}' "$config_file" | tr -d '"' )
+
+# Si el sitio es multilingüe, obtiene las traducciones de los menús.
+if [ -n "$language_names" ]; then
+    for menu_name in $menu_names; do
+        # Find the line with the menu name inside a [languages.*.translations] section and get the translated menus.
+        menu_translation=$(awk -F' = ' "/\\[languages.*\\.translations\\]/{f=1;next} /^\\[/ {f=0} f && /$menu_name =/{print \$2}" "$config_file" | tr -d '"' )
+        # Add the found menu value to the translations string
+        menu_names+="$menu_translation"
+    done
+fi
+
+# Combina las cadenas extraídas.
+combined="$title$menu_names$language_names"
+
+# Obtiene los caracteres únicos.
+unique_chars=$(echo "$combined" | grep -o . | sort -u | tr -d '\n')
+
+# Crea un archivo temporal para subset.woff2.
+temp_subset=$(mktemp)
+
+# Crea el subconjunto.
+pyftsubset "$font_file" \
+    --text="$unique_chars" \
+    --layout-features="*" --flavor="woff2" --output-file="$temp_subset" --with-zopfli
+
+# Codifica en Base64 el archivo temporal subset.woff2 y crea el archivo CSS.
+base64_encoded_font=$(base64 -i "$temp_subset")
+echo "@font-face{font-family:\"Inter Subset\";src:url(data:application/font-woff2;base64,$base64_encoded_font);}" > "$output_path/custom_subset.css"
+
+# Elimina el archivo temporal subset.woff2.
+rm "$temp_subset"
+

Uso

Guarda el script en algún lugar como ~/bin/subset_font. Hazlo ejecutable con chmod +x ~/bin/subset_font.

Ahora puedes ejecutarlo con las opciones requeridas --config y --font:

~/bin/subset_font --config path/to/config.toml --font path/to/font.woff2
+

De forma predeterminada, esto generará un archivo custom_subset.css en el directorio actual. Usa -o o --output para especificar una ruta diferente:

~/bin/subset_font -c path/to/config.toml -f path/to/font.woff2 -o path/to/output
+

Coloca este archivo custom_subset.css dentro del directorio static/.

Automatización con un Pre-commit Hook

Es posible que cambies el título o las opciones del menú de tu sitio, lo que haría que el subconjunto personalizado deje de ser útil.

Para automatizar el proceso de creación de este archivo, puedes integrar el script en un gancho (hook) pre-commit de Git que se active al detectar cambios en el archivo config.toml, ejecute el script y guarde el archivo CSS resultante en el directorio static/ de tu sitio.

  1. Crea un archivo .git/hooks/pre-commit en tu proyecto de Git, si aún no existe.

  2. Hazlo ejecutable con chmod +x .git/hooks/pre-commit.

  3. Agrega el siguiente código al archivo:

# Comprueba si config.toml se ha modificado.
+if git diff --cached --name-only | grep -q "config.toml"; then
+    echo "config.toml modified. Running subset_font…"
+
+    # Ejecuta el script subset_font.
+    ~/bin/subset_font -c config.toml -f static/fonts/Inter4.woff2 -o static/
+
+    # Añadie el subset.css recién generado al commit.
+    git add static/custom_subset.css
+fi
+

Asegúrate de modificar el script para que coincida con la ruta donde has guardado el script subset_font. Las rutas de configuración y fuente deberían funcionar correctamente con la configuración predeterminada de tabi.

Ahora, cada vez que hagas cambios en tu proyecto de Git y los confirmes, el gancho pre-commit verificará las modificaciones en el archivo config.toml y ejecutará automáticamente el script subset_font para actualizar el archivo custom_subset.css.

Por cierto, si te interesa una forma de actualizar automáticamente la fecha de tus publicaciones en Zola o comprimir automáticamente tus archivos PNG, echa un vistazo a esta publicación.

Si deseas utilizar todos los scripts a la vez (compresión de archivos PNG, actualización de la fecha y creación del subconjunto de fuentes), combina su código en un solo archivo .git/hooks/pre-commit.

\ No newline at end of file diff --git a/es/blog/customise-tabi/index.html b/es/blog/customise-tabi/index.html new file mode 100644 index 000000000..fa94e0d49 --- /dev/null +++ b/es/blog/customise-tabi/index.html @@ -0,0 +1,13 @@ +~/tabi • Personaliza el color de tabi y el tema predeterminado
Personaliza el color de tabi y el tema predeterminado

tabi puede ser personalizado de dos maneras: estableciendo el tema predeterminado (oscuro o claro) y eligiendo el color principal para el tema ("skin").

Tema predeterminado

Para configurar permanentemente tu sitio en el tema oscuro o claro, necesitas desactivar el theme_switcher en config.toml y establecer tu tema preferido (light o dark) como el default_theme.

Por ejemplo, para tener un tema oscuro permanente:

[extra]
+theme_switcher = false
+default_theme = "dark"
+

Si tu interruptor de modo claro/oscuro está activado, el default_theme sólo se usará como respaldo, en caso de que un visitante tenga JavaScript desactivado.

Skins

¿No te gusta el aguamarina? ¡No hay problema! tabi tiene 12 skins (pieles) para elegir. Si ninguna de estas te convence, puedes crear tu propia skin.

Una skin es un archivo CSS con dos variables: el color principal para el tema claro y el color principal para el tema oscuro.

Activar una skin es tan fácil como establecer la variable skin en tu config.toml con el nombre de la skin. Por ejemplo:

[extra]
+skin = "sakura"
+

Echa un vistazo a las pieles disponibles a continuación.

Haz clic en las imágenes para cambiar entre los temas oscuro y claro.


Aguamarina

La skin predeterminada. Si la variable skin no está configurada (o es igual a "teal"), este es el aspecto de tabi:


Lavanda

Aplica esta skin con skin = "lavender".


Rojo

Cambia a esta skin con la configuración skin = "red".


Menta

Una skin hecha por 🅿️.

Actívala con skin = "mint".


Sakura

Inspirada en la temporada de florecimiento de los cerezos en Japón.

Para activar esta skin, ajusta skin = "sakura".


Azul

Para lograr esta apariencia, establece skin = "blue".


Lingote índigo

Índigo por el azul (en el tema claro) y lingote por el oro (en el tema oscuro).

Para activar esta skin, usa skin = "indigo_ingot".


Evangelion

Inspirada en los colores de la Unidad-01 de Evangelion (en el tema oscuro) y el EVA-02 (en el tema claro).

Actívala con skin = "evangelion".


Monocromático

Si te gusta este look, usa skin = "monochrome".


Naranja (bajo contraste)

¡ADVERTENCIA! El tema claro de esta skin podría tener poco contraste, afectando la accesibilidad y la calificación de Lighthouse. (El tema oscuro tiene buen contraste.)

Para activarla, configura skin = "lowcontrast_orange".


Melocotón (bajo contraste)

¡ADVERTENCIA! El tema claro de esta skin podría tener poco contraste, afectando la accesibilidad y la calificación de Lighthouse. (El tema oscuro tiene buen contraste.)

Especifica skin = "lowcontrast_peach" para usar esta skin.


Rosa (bajo contraste)

¡ADVERTENCIA! El tema claro de esta skin podría tener poco contraste, afectando la accesibilidad y la calificación de Lighthouse. (El tema oscuro tiene buen contraste.)

Para usar estos colores, asigna skin = "lowcontrast_pink".


Crea tu propia skin

No estás limitado a las skins predefinidas. ¿Por qué no diseñas un aspecto único que te represente?

Puedes guardar tu nueva skin en cualquiera de estos dos directorios:

  1. Dentro del directorio del tema: themes/tabi/sass/skins
  2. Dentro del directorio principal de tu sitio: sass/skins (necesitarás crear esta carpeta)

Crea un nuevo archivo .scss (por ejemplo, tu_skin.scss) en la ubicación que prefieras. Este archivo debe contener estas dos variables (esta es la skin predeterminada, "teal"):

:root {
+    --primary-color: #087e96;
+}
+
+[data-theme='dark'] {
+    --primary-color: #91e0ee;
+}
+

Modifica los colores a tu gusto. Una vez que estés satisfecho, actualiza la variable skin para que coincida con el nombre de tu archivo.

Recuerda tener en cuenta la accesibilidad de los colores que elijas. Aquí tienes un enlace que te puede ayudar: WebAIM: Contrast Checker. El fondo del tema claro es #fff, y el del tema oscuro #1f1f1f.

\ No newline at end of file diff --git a/es/blog/index.html b/es/blog/index.html new file mode 100644 index 000000000..83c3088a1 --- /dev/null +++ b/es/blog/index.html @@ -0,0 +1 @@ +~/tabi • Blog
Blog
09 agosto 2023

Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único.

Leer más →
14 julio 2023

Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores.

Leer más →
29 abril 2023

Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios.

Leer más →
22 febrero 2023

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.

Leer más →
19 febrero 2023

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.

Leer más →
\ No newline at end of file diff --git a/es/blog/javascript/index.html b/es/blog/javascript/index.html new file mode 100644 index 000000000..abc120c1e --- /dev/null +++ b/es/blog/javascript/index.html @@ -0,0 +1 @@ +~/tabi • Sin JavaScript obligatorio
Sin JavaScript obligatorio

Este tema no tiene JavaScript obligatorio. Opcionalmente, puede cargar una cantidad mínima para agregar algunas características que son imposibles de lograr con HTML y CSS.

Opciones habilitadas globalmente

  • El interruptor de modo claro/oscuro puede habilitarse configurando theme_switcher = true en la sección [extra] de tu config.toml (~900 bytes de JavaScript).

  • Decodificación de correo electrónico (~400 bytes). Para protegerte contra los bots que escanean tu correo electrónico desde tu sitio web, puedes configurar encode_plaintext_email = true. Si tu sitio está en un repositorio público, para una protección extra, considera configurar tu email como una cadena codificada en base641 directamente.

Configuraciones que pueden habilitarse tanto globalmente como en publicaciones individuales

Las siguientes configuraciones pueden habilitarse globalmente para todas las páginas o específicamente para publicaciones individuales:

Para habilitar estas configuraciones globalmente, añádelas en la sección [extra] de tu config.toml. Para habilitarlas en publicaciones individuales, establece las variables correspondientes en el apartado [extra] del front matter de la publicación.

  • Comentarios. giscus (2 KB), utterances (1 KB), Hyvor Talk (~800 bytes) o Isso (1KB) se pueden habilitar globalmente configurando enabled_for_all_posts = true en el apartado apropiado de tu archivo config.toml ([extra.giscus], [extra.utterances], [extra.hyvortalk] o [extra.isso]). Para habilitar comentarios en publicaciones individuales, configura el nombre del sistema = true (por ejemplo, hyvortalk = true) en el front matter del post.

Aparte de eso, es un tema rápido con HTML y CSS que funciona con JavaScript deshabilitado. Justo como debería ser (en su mayoría) la web :-)


1

Para codificar tu correo en base64 puedes usar herramientas en línea o, en tu terminal, ejecuta: `printf '

\ No newline at end of file diff --git a/es/blog/markdown/index.html b/es/blog/markdown/index.html new file mode 100644 index 000000000..e9b967ee4 --- /dev/null +++ b/es/blog/markdown/index.html @@ -0,0 +1,11 @@ +~/tabi • Ejemplos de Markdown
Ejemplos de Markdown

$\KaTeX$

$\KaTeX$ es una biblioteca rápida y fácil de usar que permite la representación de notación matemática utilizando sintaxis LaTeX.

Puedes usar $\KaTeX$ en línea al envolver la expresión entre $ o entre \\( y \\).

Por ejemplo, $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $ se mostraría como: $ \sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n + 1)!} x^{2n + 1} $

Para mostrar la expresión en su propia línea y centrada, envuélvela entre $$ o entre \\[ y \\].

Por ejemplo, \\[ 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}} \\] se mostraría como: \[ 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}} \]

Para activar $\KaTeX$ en una publicación, incluye katex = true dentro de la sección [extra] del encabezado de la publicación. Por ejemplo:

+++
+title = "Probando KaTeX"
+date = 2002-11-30
+
+[extra]
+katex = true
++++
+

Para activarlo globalmente, añade katex = true en la sección [extra] de tu config.toml.

Para un mejor rendimiento y seguridad, el JavaScript, CSS y las fuentes de $\KaTeX$ se alojan localmente.

Nota: Después de habilitar $\KaTeX$, si deseas usar $ sin representar una expresión matemática, escápalo con una sola barra invertida: \$.

Tabla

Aquí tienes un ejemplo de una tabla1. Los colores cambian dependiendo del tema actual.
SímboloElementoNúmero atómico
HHidrógeno1
CCarbono6
FeHierro26
AuOro79

Bloque de código

fn main() {
+    println!("¡Hola, mundo!") -> ();
+}
+

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}").

Cita

«A mí me sobra el cuerpo, Orfeo, me sobra el cuerpo porque me falta alma.»

— Miguel de Unamuno, Niebla


1

¡Y aquí tienes un ejemplo de una nota al pie de página!

\ No newline at end of file diff --git a/es/blog/page/1/index.html b/es/blog/page/1/index.html new file mode 100644 index 000000000..5989c580c --- /dev/null +++ b/es/blog/page/1/index.html @@ -0,0 +1 @@ +Redirect

Click here to be redirected. \ No newline at end of file diff --git a/es/blog/page/2/index.html b/es/blog/page/2/index.html new file mode 100644 index 000000000..a2ed6f21c --- /dev/null +++ b/es/blog/page/2/index.html @@ -0,0 +1 @@ +~/tabi • Blog

Blog
31 enero 2023

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.

Leer más →
06 enero 2023

JavaScript solo se utiliza cuando HTML y CSS no son suficientes.

Leer más →
01 noviembre 2022

Una publicación que muestra la tabla de contenido opcional así como su configuración.

Leer más →
\ No newline at end of file diff --git a/es/blog/security/index.html b/es/blog/security/index.html new file mode 100644 index 000000000..59dcc1df1 --- /dev/null +++ b/es/blog/security/index.html @@ -0,0 +1,9 @@ +~/tabi • Seguro por defecto
Seguro por defecto

La configuración predeterminada del tema obtiene una calificación de A+ en Mozilla Observatory.1

Esto se logra configurando programáticamente las cabeceras de la Política de Seguridad de Contenido (CSP) en función de una lista de dominios permitidos definida por el usuario en el archivo config.toml. Aquí tienes la configuración predeterminada y recomendada (puedes eliminar la última directiva si no deseas insertar videos de YouTube):

[extra]
+allowed_domains = [
+    { directive = "font-src", domains = ["'self'", "data:"] },
+    { directive = "img-src", domains = ["'self'", "https://*", "data:"] },
+    { directive = "script-src", domains = ["'self'"] },
+    { directive = "style-src", domains = ["'self'"] },
+    { directive = "frame-src", domains = ["https://www.youtube-nocookie.com"] },
+]
+

La lista allowed_domains especifica las URL a las que el sitio web debería poder conectarse, y cada dominio de la lista se asocia con una directiva CSP como frame-src, connect-src o script-src. El archivo templates/partials/header.html genera dinámicamente la cabecera CSP en función de esta lista.

Esta función permite personalizar fácilmente las cabeceras de seguridad del sitio web para permitir casos de uso específicos, como la incrustación de videos de YouTube, la carga de scripts o fuentes remotas (no recomendado).

Nota: habilitar los comentarios permite automáticamente scripts y frames del sistema de comentarios correspondiente, así como estilos unsafe-inline en el caso de utterances o Hyvor Talk.

1

Requiere una configuración adecuada del servidor web (por ejemplo, redirigir el tráfico HTTP a HTTPS).

\ No newline at end of file diff --git a/es/blog/shortcodes/index.html b/es/blog/shortcodes/index.html new file mode 100644 index 000000000..abdd35403 --- /dev/null +++ b/es/blog/shortcodes/index.html @@ -0,0 +1,23 @@ +~/tabi • Shortcodes personalizados
Shortcodes personalizados

Shortcodes de imagen

Nota: todos los shortcodes de imagen tienen dos parámetros opcionales: full_width, que tiene como valor predeterminado false (ver más abajo), y lazy_loading, que tiene como valor predeterminado true.

Imágenes de doble tema

Útil si deseas usar una imagen diferente para los temas claro y oscuro:

La Torre EiffelLa Torre Eiffel

Uso

{{ dual_theme_image(light_src="img/paris_day.webp", dark_src="img/paris_night.webp" alt="La Torre Eiffel") }}
+

Imagen invertible

Ideal para gráficos, dibujos lineales, diagramas... Invierte los colores de la imagen. La imagen de origen se utilizará para el tema claro.

Gráfico invertible

Uso

{{ invertible_image(src="img/graph.webp", alt="Gráfico invertible") }}
+

Imagen atenuable

Las imágenes con demasiado brillo o contraste pueden ser demasiado discordantes en un fondo oscuro. Aquí tienes un ejemplo de una fotografía que se atenúa cuando el tema oscuro está activo.

Fotografía de un desierto, cielo celestial

Uso

{{ dimmable_image(src="img/desert_by_oskerwyld.webp", alt="Fotografía de un desierto, cielo celestial") }}
+

Cambio de imagen al pasar el cursor

La imagen mostrada cambia cuando el usuario pasa el cursor por encima. Útil para comparaciones de antes y después, por ejemplo.

Foto editada
Foto original

Uso

{{ image_hover(default_src="img/before.webp", hovered_src="img/after.webp", default_alt="Imagen editada", hovered_alt="Toma original") }}
+

Cambio de imagen vía click

Muestra una imagen y cambia a una diferente al hacer clic. Ideal para destacar diferencias o llamar la atención sobre detalles.

Uso

{{ image_toggler(default_src="img/mojave_day.webp", toggled_src="img/mojave_night.webp", default_alt="Mojave durante el día", toggled_alt="Mojave durante la noche") }}
+

Imagen a ancho completo

La imagen se expandirá para coincidir con el ancho del encabezado, que generalmente es más ancho que el texto del artículo (excepto en móvil/ventanas pequeñas).

Todos los otros shortcodes de imágenes pueden usar el ancho completo asignando el valor true al parámetro opcional full_width.

Fotografía de un canal en Ámsterdam

Uso

{{ full_width_image(src="img/amsterdam_by_oskerwyld.webp", alt="Fotografía de un canal en Ámsterdam") }}
+

Shortcodes de texto

Citas multilenguaje

Este shortcode permite mostrar una cita traducida y en su lenguaje original:

«Lo terrible no es sufrir o morir, sino morir en vano.»

— Jean-Paul Sartre

«Ce qui est terrible, ce n’est pas de souffrir ni de mourir, mais de mourir en vain.»

— Jean-Paul Sartre

Uso

{{ multilingual_quote(original="Ce qui est terrible, ce n’est pas de souffrir ni de mourir, mais de mourir en vain.", translated="Lo terrible no es sufrir o morir, sino morir en vano.", author="Jean-Paul Sartre") }}
+

Referencias con sangría francesa

Este shortcode formatea una sección de referencias con sangría francesa de la siguiente manera:

Alderson, E. (2015). Ciberseguridad y justicia social: Una crítica a la hegemonía corporativa en un mundo digital. New York Journal of Technology, 11(2), 24-39. https://doi.org/10.1007/s10198-022-01497-6.

Funkhouser, M. (2012). Las normas sociales de indecencia: Un análisis del comportamiento desviado en la sociedad contemporánea. Los Angeles Journal of Sociology, 16(3), 41-58. https://doi.org/10.1093/jmp/jhx037.

Schrute, D. (2005). La revolución de la agricultura de remolacha: Un análisis de la innovación agrícola. Scranton Agricultural Quarterly, 38(3), 67-81.

Steinbrenner, G. (1997). El análisis costo-beneficio de George Costanza: Un examen del comportamiento de toma de riesgos en el lugar de trabajo. New York Journal of Business, 12(4), 112-125.

Winger, J. A. (2010). El arte del debate: Un examen de la retórica en el modelo de las Naciones Unidas del Greendale Community College. Colorado Journal of Communication Studies, 19(2), 73-86. https://doi.org/10.1093/6seaons/1movie.

Uso

{% references() %}
+
+Tus referencias van aquí.
+
+Cada una en una línea nueva. Se renderizará Markdown (enlaces, cursivas…).
+
+{% end %}
+

Spoilers

Este shortcode permite ocultar texto que se revelará al hacer clic. Por ejemplo: las galletas de la fortuna tiene su origen en

Como ves, el Markdown se renderiza.

Este shortcode tiene la opción fixed_blur para difuminar el texto "SPOILER", en lugar de difuminar el contenido real. Por ejemplo: es esperar 24 horas antes de denunciar la desaparición de una persona.

Uso

{{ spoiler(text="texto que ocultar", fixed_blur=false) }}
+

Contenedores

Contenedor ancho

Utiliza este código corto si deseas tener una tabla, párrafo, bloque de código… más ancho. En escritorio, ocupará el ancho del encabezado. En móviles no tendrá efecto, excepto para las tablas, que ganarán scroll horizontal.

TítuloAñoDirectorDirector de FotografíaGéneroIMDbDuración
Beoning2018Lee Chang-dongHong Kyung-pyoDrama/Misterio7.5148 min
The Master2012Paul Thomas AndersonMihai Mălaimare Jr.Drama/Historia7.1137 min
The Tree of Life2011Terrence MalickEmmanuel LubezkiDrama6.8139 min

Uso

{% wide_container() %}
+
+Coloca tu bloque de código, párrafo, tabla… aquí.
+
+El Markdown, por supuesto, será interpretado.
+
+{% end %}
+
\ No newline at end of file diff --git a/es/blog/toc/index.html b/es/blog/toc/index.html new file mode 100644 index 000000000..a76cb8f72 --- /dev/null +++ b/es/blog/toc/index.html @@ -0,0 +1,25 @@ +~/tabi • Tabla de contenido
Tabla de contenido

Documentación

Habilitando (y posicionando) la Tabla de Contenido

Hay dos formas de habilitar la Tabla de Contenido (TdC). Si quieres que esté justo debajo del encabezado (como en esta página), configura esta variable en el front matter de tu post:

[extra]
+toc = true
+

Si prefieres situar la TdC en otro lugar de tu post (por ejemplo, después de una introducción), puedes hacerlo añadiendo una línea con este contenido ahí donde quieras que aparezca la TdC:

<!-- toc -->
+

También puedes usar el shortcode {{ toc() }}, que simplemente insertará ese texto por ti (idea de Michael Clayton).

Este método renderizará la TdC sin el encabezado "Tabla de contenido". Esto te permite usar un encabezado diferente (o ninguno) para la TdC, o incluso ocultarla de forma predeterminada:

TdC oculta

El código para lograr esto:

<details>
+    <summary>TdC oculta</summary>
+    <!-- toc -->
+</details>
+

Nota: Si activas la TdC a través de toc = true y además añades <!-- toc --> en algún lugar de tu texto, obtendrás múltiples TdCs.

Si colocas la TdC en algún lugar distinto al predeterminado y le añades un encabezado, seguramente quieras ocultar dicho encabezado de la TdC (consulta la sección para ocultar encabezados). Puedes lograrlo así:

+++
+title = "El título de tu post"
+date = 2034-01-11
+
+[extra]
+toc_ignore_pattern = "^(Tabla de contenido)"
++++
+
+Aquí va algún texto introductorio.
+
+### Tabla de contenido
+
+<!-- toc -->
+
+## Primer encabezado de contenido
+

Estableciendo la profundidad máxima

Puedes establecer la profundidad máxima para la TdC especificando la variable toc_levels, que acepta un número entero entre 1 y 4:

[extra]
+toc_levels = 2
+

En este ejemplo, sólo los dos primeros niveles de encabezados se incluirían en la TdC, independientemente de sus etiquetas HTML reales (h1, h2, h3, etc.). Si quieres incluir sólo el nivel principal de encabezados, establece toc_levels = 1. El valor predeterminado de toc_levels es 3.

Ten en cuenta a tus lectores al establecer toc_levels. Aunque puede ser tentador incluir muchos niveles anidados para una navegación detallada, una TdC más corta y sencilla suele ser más amigable y menos abrumadora.

Ocultando encabezados de la TdC

Es posible que quieras ocultar ciertos encabezados. Por ejemplo, si tu artículo tiene muchas Figuras o Tablas, éstas podrían saturar la TdC. Puedes ocultar encabezados específicos en la TdC configurando la variable toc_ignore_pattern en la sección [extra] del front matter de tu post.

Esta variable espera una expresión regular (regex), ya que utiliza el test matching de Tera. El toc_ignore_pattern se prueba contra el texto del encabezado. Por ejemplo, para el encabezado ### Lectura adicional, sólo el texto Lectura adicional se usaría para comprobar si concuerda con el patrón.

Aquí tienes algunos valores de ejemplo para toc_ignore_pattern junto con los encabezados que ocultarían:
toc_ignore_patternExcluye encabezados que…
Tablacontengan "Tabla"
^Figuraempiecen por "Figura"
(?i)(tabla|figura)empiecen por "Tabla" o "Figura" (insensible a mayúsculas/minúsculas)
\[Borrador\]$terminen con "[Borrador]".

Puedes probar tu expresión regular en plataformas como regex101 para asegurarte de que funciona como esperas.

Nota: Las capacidades de "look-around", incluyendo look-ahead y look-behind, no están soportadas.

Encabezado 1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 3.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 3.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 3.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 3.2

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

Encabezado 4.1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed mollis augue, vel efficitur lacus. Pellentesque eu egestas mi. Etiam ultrices lectus sit amet aliquet ullamcorper. Praesent in erat quis est sagittis finibus. Etiam nec sapien in nulla interdum faucibus. Integer iaculis lorem quis arcu lobortis, non malesuada neque vehicula. Aenean nec tellus eu metus bibendum tempus. Sed rutrum urna ut commodo tempor. Vestibulum aliquet elit posuere turpis maximus condimentum. Sed urna libero, ornare eu tellus vitae, laoreet condimentum risus. Aenean elit lectus, mattis quis nibh nec, faucibus rutrum sapien. Sed iaculis consectetur mi, eget posuere turpis finibus et.

\ No newline at end of file diff --git a/es/index.html b/es/index.html new file mode 100644 index 000000000..0b7d00026 --- /dev/null +++ b/es/index.html @@ -0,0 +1 @@ +~/tabi
Publicaciones recientes
09 agosto 2023

Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único.

Leer más →
14 julio 2023

Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores.

Leer más →
29 abril 2023

Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios.

Leer más →
22 febrero 2023

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.

Leer más →
\ No newline at end of file diff --git a/es/projects/chu/index.html b/es/projects/chu/index.html new file mode 100644 index 000000000..73aa442c0 --- /dev/null +++ b/es/projects/chu/index.html @@ -0,0 +1 @@ +~/tabi • chu
chu
  •  0 min de lectura
\ No newline at end of file diff --git a/es/projects/index.html b/es/projects/index.html new file mode 100644 index 000000000..edd273b7a --- /dev/null +++ b/es/projects/index.html @@ -0,0 +1 @@ +~/tabi • Proyectos
Proyectos
img/tabi.webp

tabi

Un tema de Zola rápido, ligero y moderno con JavaScript opcional.
img/chu.webp

chu

Aplicación Flask para subir archivos de forma segura, con eliminación de metadatos, compresión, protección con contraseña y más.
img/nani.webp

nani

Script Bash para crear URL públicas desde archivos o texto en servidores remotos.
img/spectro.webp

spectro

Script de Bash para generar espectrogramas, compararlos, subirlos a Imgur y proporcionar las correspondientes URLs para compartir.
\ No newline at end of file diff --git a/es/projects/nani/index.html b/es/projects/nani/index.html new file mode 100644 index 000000000..2b84280a5 --- /dev/null +++ b/es/projects/nani/index.html @@ -0,0 +1 @@ +~/tabi • nani
nani
  •  0 min de lectura
\ No newline at end of file diff --git a/es/projects/spectro/index.html b/es/projects/spectro/index.html new file mode 100644 index 000000000..9b78da817 --- /dev/null +++ b/es/projects/spectro/index.html @@ -0,0 +1 @@ +~/tabi • spectro
spectro
  •  0 min de lectura
\ No newline at end of file diff --git a/es/projects/tabi/index.html b/es/projects/tabi/index.html new file mode 100644 index 000000000..5df407c35 --- /dev/null +++ b/es/projects/tabi/index.html @@ -0,0 +1 @@ +~/tabi • tabi
tabi
  •  0 min de lectura
\ No newline at end of file diff --git a/es/tags/funcionalidad/atom.xml b/es/tags/funcionalidad/atom.xml new file mode 100644 index 000000000..2cace5127 --- /dev/null +++ b/es/tags/funcionalidad/atom.xml @@ -0,0 +1,112 @@ + + + + + + Esta es una fuente web + también conocida como fuente Atom + Suscríbete + copiando la URL de la barra de direcciones en tu lector de noticias + Visita + para aprender más y empezar + Es gratis + la web + Publicaciones recientes + + + ~/tabi - funcionalidad + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/funcionalidad/atom.xml + + Personaliza el color de tabi y el tema predeterminado + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/customise-tabi/ + Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único. + + + Añade comentarios a tus publicaciones con estas 4 plataformas + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/comments/ + Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores. + + + Optimiza la carga con un subconjunto de fuente personalizado + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/custom-font-subset/ + Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios. + + + Seguro por defecto + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/security/ + 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. + + + Shortcodes personalizados + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/shortcodes/ + 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. + + + Ejemplos de Markdown + 2023-01-31T00:00:00+00:00 + 2023-08-06T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/markdown/ + 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. + + + Sin JavaScript obligatorio + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/javascript/ + JavaScript solo se utiliza cuando HTML y CSS no son suficientes. + + + Tabla de contenido + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/toc/ + Una publicación que muestra la tabla de contenido opcional así como su configuración. + + diff --git a/es/tags/funcionalidad/index.html b/es/tags/funcionalidad/index.html new file mode 100644 index 000000000..3c2691aa8 --- /dev/null +++ b/es/tags/funcionalidad/index.html @@ -0,0 +1,2 @@ + + ~/tabi • funcionalidad
funcionalidad
09 agosto 2023

Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único.

Leer más →
14 julio 2023

Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores.

Leer más →
29 abril 2023

Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios.

Leer más →
22 febrero 2023

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.

Leer más →
19 febrero 2023

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.

Leer más →
31 enero 2023

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.

Leer más →
06 enero 2023

JavaScript solo se utiliza cuando HTML y CSS no son suficientes.

Leer más →
01 noviembre 2022

Una publicación que muestra la tabla de contenido opcional así como su configuración.

Leer más →
\ No newline at end of file diff --git a/es/tags/index.html b/es/tags/index.html new file mode 100644 index 000000000..340e45ccd --- /dev/null +++ b/es/tags/index.html @@ -0,0 +1,3 @@ + + +~/tabi • Etiquetas
Todas las etiquetas
\ No newline at end of file diff --git a/es/tags/markdown/atom.xml b/es/tags/markdown/atom.xml new file mode 100644 index 000000000..cd4eec74a --- /dev/null +++ b/es/tags/markdown/atom.xml @@ -0,0 +1,46 @@ + + + + + + Esta es una fuente web + también conocida como fuente Atom + Suscríbete + copiando la URL de la barra de direcciones en tu lector de noticias + Visita + para aprender más y empezar + Es gratis + la web + Publicaciones recientes + + + ~/tabi - markdown + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-08-14T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/markdown/atom.xml + + Ejemplos de Markdown + 2023-01-31T00:00:00+00:00 + 2023-08-06T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/markdown/ + 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. + + + Tabla de contenido + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/toc/ + Una publicación que muestra la tabla de contenido opcional así como su configuración. + + diff --git a/es/tags/markdown/index.html b/es/tags/markdown/index.html new file mode 100644 index 000000000..6f63f00c7 --- /dev/null +++ b/es/tags/markdown/index.html @@ -0,0 +1,2 @@ + + ~/tabi • markdown
markdown
31 enero 2023

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.

Leer más →
01 noviembre 2022

Una publicación que muestra la tabla de contenido opcional así como su configuración.

Leer más →
\ No newline at end of file diff --git a/es/tags/seguridad/atom.xml b/es/tags/seguridad/atom.xml new file mode 100644 index 000000000..b3dfa9bdc --- /dev/null +++ b/es/tags/seguridad/atom.xml @@ -0,0 +1,35 @@ + + + + + + Esta es una fuente web + también conocida como fuente Atom + Suscríbete + copiando la URL de la barra de direcciones en tu lector de noticias + Visita + para aprender más y empezar + Es gratis + la web + Publicaciones recientes + + + ~/tabi - seguridad + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-07-17T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/seguridad/atom.xml + + Seguro por defecto + 2023-02-22T00:00:00+00:00 + 2023-07-17T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/security/ + 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. + + diff --git a/es/tags/seguridad/index.html b/es/tags/seguridad/index.html new file mode 100644 index 000000000..124ce973f --- /dev/null +++ b/es/tags/seguridad/index.html @@ -0,0 +1,2 @@ + + ~/tabi • seguridad
seguridad
22 febrero 2023

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.

Leer más →
\ No newline at end of file diff --git a/es/tags/shortcodes/atom.xml b/es/tags/shortcodes/atom.xml new file mode 100644 index 000000000..0fd10508b --- /dev/null +++ b/es/tags/shortcodes/atom.xml @@ -0,0 +1,35 @@ + + + + + + Esta es una fuente web + también conocida como fuente Atom + Suscríbete + copiando la URL de la barra de direcciones en tu lector de noticias + Visita + para aprender más y empezar + Es gratis + la web + Publicaciones recientes + + + ~/tabi - shortcodes + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-08-26T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/shortcodes/atom.xml + + Shortcodes personalizados + 2023-02-19T00:00:00+00:00 + 2023-08-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/shortcodes/ + 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. + + diff --git a/es/tags/shortcodes/index.html b/es/tags/shortcodes/index.html new file mode 100644 index 000000000..f30b207c4 --- /dev/null +++ b/es/tags/shortcodes/index.html @@ -0,0 +1,2 @@ + + ~/tabi • shortcodes
shortcodes
19 febrero 2023

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.

Leer más →
\ No newline at end of file diff --git a/es/tags/tutorial/atom.xml b/es/tags/tutorial/atom.xml new file mode 100644 index 000000000..0b24539bf --- /dev/null +++ b/es/tags/tutorial/atom.xml @@ -0,0 +1,79 @@ + + + + + + Esta es una fuente web + también conocida como fuente Atom + Suscríbete + copiando la URL de la barra de direcciones en tu lector de noticias + Visita + para aprender más y empezar + Es gratis + la web + Publicaciones recientes + + + ~/tabi - tutorial + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-08-18T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/tutorial/atom.xml + + Personaliza el color de tabi y el tema predeterminado + 2023-08-09T00:00:00+00:00 + 2023-08-10T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/customise-tabi/ + Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único. + + + Añade comentarios a tus publicaciones con estas 4 plataformas + 2023-07-14T00:00:00+00:00 + 2023-07-26T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/comments/ + Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores. + + + Optimiza la carga con un subconjunto de fuente personalizado + 2023-04-29T00:00:00+00:00 + 2023-07-08T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/custom-font-subset/ + Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios. + + + Sin JavaScript obligatorio + 2023-01-06T00:00:00+00:00 + 2023-08-18T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/javascript/ + JavaScript solo se utiliza cuando HTML y CSS no son suficientes. + + + Tabla de contenido + 2022-11-01T00:00:00+00:00 + 2023-08-14T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/toc/ + Una publicación que muestra la tabla de contenido opcional así como su configuración. + + diff --git a/es/tags/tutorial/index.html b/es/tags/tutorial/index.html new file mode 100644 index 000000000..a3cc70446 --- /dev/null +++ b/es/tags/tutorial/index.html @@ -0,0 +1,2 @@ + + ~/tabi • tutorial
tutorial
09 agosto 2023

Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único.

Leer más →
14 julio 2023

Descubre cómo habilitar una sección de comentarios en tus publicaciones usando giscus, utterances, Hyvor Talk, o Isso, permitiendo la interacción y feedback de los lectores.

Leer más →
29 abril 2023

Aprende cómo crear un subconjunto personalizado que solo incluya los glifos necesarios.

Leer más →
06 enero 2023

JavaScript solo se utiliza cuando HTML y CSS no son suficientes.

Leer más →
01 noviembre 2022

Una publicación que muestra la tabla de contenido opcional así como su configuración.

Leer más →
\ No newline at end of file diff --git a/feed_style.xsl b/feed_style.xsl new file mode 100644 index 000000000..b0fb06be3 --- /dev/null +++ b/feed_style.xsl @@ -0,0 +1,73 @@ + + + + + + + + <xsl:value-of select="/atom:feed/atom:title"/> • Feed + + + + + + + + + +
+
+
+ , . . About Feeds . . +
+ + +
+

+
+
+ +
+
+ +
+
+ +
+ +
+ + + + + +
+
+
+
+
+
+ + +
+
diff --git a/fonts/CascadiaCode-SemiLight.woff2 b/fonts/CascadiaCode-SemiLight.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fb0f9de2e4d106aff755830a13e549fdf74ba051 GIT binary patch literal 132856 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 -mY&62e^xm z2cMQ7+^3_@G~Hv(y+C_J;7j+V`(gTtWBM6Ozc9F8xL>CHv%;O?k~UM5YO|KLg<2z5 zXo`D_?MjW-8Em0Cnc;e~j{=Mb_qqFU4wr8WBCmOyYm$vjHEBY`Plpp5x$m~cj!qiq z|HL0m?D_B5I*5J=4vUy5d97k-u4ffXJuPA*U+j-uv0tzv-up#7EyckY7Y7j*Tv85j z2eMZK@5h*GxOi$f-CJGp`=UJYY`_B#Jn%Z+Ls$uxva*$6gzE}7o~+!48DG28SJP+R z=q{d1Y25uMq}eOmio96<)_oq|_V)Y<*XeCV!5^9irsxccE+jg~8RTvIxi|N5dmov6GxXJNVae(SdJY17+vqVP9O&=z1U4kfW^WlxR zc%%5-FVW72K}k~{bM%RFY_&YUyCHAv3YF$8dk9}~VZ)&mh@p-<8cq&()4lN&%YG>? zZ5&eTo+)QKD(yMxDfTsq9kB-s7*X3*HlLdavZ{f@O^Ll>tPg`QSHWjR6 z@6+JZZFjBoLjh8B!CRJ7RZddC>ED_VP#g3G%E^IPm z4DQXOgDobKZ*7xu;4@G>_tlsG=Q62Cc`5$3R1vN4p#&ump%i5(M+GXq{5zHByO;JB zO8t5@SxDZ=dJqOc`iVns@HblLM8i=_URz@J=s%3u`gr42c0T9(kLHxql(6Ug!9mlP zdV=T-C8stVz3WUc8w*ouJ^CGFgHACz;{?0))VH>fHJYzC0QYPhrfp#KS8pe7DQ-+p z6BqSi%e9H`xW7so5Vra`{|f$xrVtX1RC2^K}ei} z4OWNgH$4Zx7Wy#zWF}L&wUj7N^XmN}^r`%4meSEhQYvG6j#S~0V_BsF+=0VU&Ol6V z0E0u#!n)DaS5Uhy??A~f(wxl@T~hhQWbZS7$nh?f`azblp(xC70bsZ5EgufO@%umi zgJCwJVSUdT=lG*1e7^n5(VzK0F7}Nx@=0%zA211${O5spzH0bzvzS8C_rhHD0 zA9GK_^-g&Bnr(jhx5202IHLiomC1r%<*)YT=pO&?bDN)@v6-_b|GvNd^w(l|B2#+D z-Hq$bjJuL+{;<7+M#ifP_7{BzM|LLv1OW5iEapWOPJQ=70BbYZ-vF2Z)P|)LVD6=0mq!Sf#hc-yLG-)DB8ENnT;Bqr$?IUTd>`un-r zQKm<|1E`O2-d zy+#F?nQCN*&n^cTqw4MdeP+j5*m9PorC${#T3}{sXApN*?I+G#<@K_xlg86#X8vLD z9cTIo5;EEE4z_k>YH=%-+9cJqEg7Nra`t^v?~~WUZJjC{EsHQTtfONBt2+OSy*RsI z4c1%sdxVP~@G`O-lpIf(eHP2U*Nc16{@yAu+lgyC>mLNW*UOTBpKxudR&y3|XJT<< z(r+p|_7!#)VCpR@(2=crNPn8aGuqyiH^dXm51_qnyj4EO%zH1>Rp#@)lhr}wqkmvuHq`>Eaxjmxu>&UBsjCYteu`~>JU@mYtE}m+65sN z>C7ZAqZKo6RuaWbq+p;-A*+x+op5!mJ$%*1DmRj{Co$Qk{btO1^2)cBgR#1s0RYug zh{v8&BThJ?&;ex;yvUuks*U%o)ORnY$ljZk$u$8AH2W(l8dPo{}+7N>Dw`fLDF;Yr})iUNo-c zZe#!|bgE0{ROs%|>8dv&TUs|SSa`V2FTHbW2d)4=C2p>C&R&LN>#|von|iIxa$Pl@ z;ANy<5`Y|m#y*pCm9|JyCoW0B4`g6$}6d?#{kr%(9Ci-=h6RuGR*zN>U!K6KJWoX3>;gJdtLH&v-Q)^uzJ2G*`bHoCa{N@o zrFKen%4B>I?|lh>lP^SP0aTiWl#>+kk^u2@H~TRHq^10W;$C6Yo^HTr06Bep;oA1F zZ(cv_n}Y3d^#jm<_e5E3OlblZSna

be1KJ0KvC>Qq~g?d-0R*0X+kt1GvrgP;3O zcAb66)Evh56z^b1S`~rhe0+CQQGxtF~!dja!38gGPfs9^6E&J!xVk-S_Ff;6Cm{2|aC(1YZok7<`cuamj^? zKddwSvmM>&MmM@!!FhwrsiPtlsYp$!;@%Z{4%`>$z%F&}%B*pRNJn~}u8Ij*XZ~H0 zt=;lWA~H`&CT}&(0Qt=&J75t?LP;Qu>|dZ)@u{T? zezazbl+0&B$}h&MbXHQcjWI@ql+Jy;(vRgjt83Psr!V`)7kqJc#ZfIxELzv&e3@!% zM;lz>3Rg%!?Yas`AZ4Vn;;oNae~q`2Fu8ISNwPKjNAup(&R`Hbum7X4-^xpAE4t0r zLVvB<*Gf?TlAT)d2#@goHt%}}D8uW=MK|La|h83(}{L|y3 zt2uTgw&33#K|JEI;Wl>2fgNCX7&Y=VTj9S(@~>|?72FJuJss=ADhpO_n98ML=Lj|z zz5P9(c>51!qQw{mD|awH#b7*@RXq%CX`BHGR**^}eGq3tx=NNETKg(eYT@;5KF|LZ z9H{oN_GO3rwRigW7g)Mq=IixqrwAaJ>XfV5YJSQUTv>H9p8v#3d%U{Th!*ghJzrsS zroFzxdM3mh2-)^ZuJ@&$2@TGN-}=;;7EEBq!w_z2Umke`7$pBzB5*TwN$S@82s>w- zA*XF@IqFEt=2dieouI_?Wq(RMC(&EU728gWXnd!6H_a_DG-PZ6_d_`ScPPWgR{JS2 z%NXy2(SE@Kl0W6IGODThJKizPj8jgBnCRh-HA2#BRpxoj-|`lSk71!7Vxmd886j@v zHnBoDL-aDNO1V|^+N)7(Yk)NY)&%v1$oQr#10&Oy1i}n=tP$dSzzM9(?*7(+#}i2uhKW&{%UC|p*S@O-$(xDE98to$q!mA4QN1P zpfT@rgsDdCtHf(IwKs&6ul21bV+(GXQxTGKoY_5|FBvu;egFR_u)#}mU;~`{5rZMM z&uVM+W(3Vr=nBOTB@Si~L7w3c`}Rp|5bwu9``;jf1L<%-(47IlcY@TB@ag#X_jVcF_MYWY3*(uJ6Kwr}RsL2!)*BvWYU0IPv*yb^ zUnENOCf;a)pzRrn5r#0h{d0#}CZTsR;PHwKqay<2 zL+?_@x6#=ZN3}4q(B)GcGx-sYe)xG( z6WWF>WI0XwqKvM;N)Qkj9~d9B(%3!n{SaL>#UQn8Gf7t4v3|j3G(B()0PYDWEbM0E zwx@0e$Ml<+@nKUDYK~?hAHG+EJ9O`^v)Fdqax#G{M-*p1)E7+d#Exh4U%43`1=_-8 zw^$H-&F|*d)Hf>C%&^OPLw5Vj`>d=mezG|)@KMU3rp@unzx*z%iKlgv1WHlwl4I_Cy;}sA z^{|2YN5=5TxGcCdpT>|m$e$%DUB7>21ZwhGZNLl|)q zzaaqjdasWrO`0@m>ZY6`MT!(Dw&K?c0Rcg-rsKIN{%FiZt>gEqB|NPiN1j+--y@(^ zqLeKVL9Ui43^fzq@09a3O?ux_=t0lb6a>ppVmp3U|5*=|Y*G~OXS>e&2+i;ck9$e~ zTs{0eL#ZG9&HQk0ta#@7fIDMjU03|S6~yzVRL4(%b)`N7)(~Od7M}tJhhw>2$*Bu2 zJ|(QU9S}A*KpdI*1Dc|iA~Gj{$^o%4^5Z7E4j|ctbQm-qrO%3~Fe=$2t7{O5j!EBI z9J{e(`hMQi(j!A&!D*nv8b;M7+bk}U=&hY*jqJ6!pwS0Im%rG*m>j)hX!d0~G{WfUIRMCljV8rJZLhM9+E1|gp>5M6 zJ{^gvTUkUM5)I9Pl!InN%0qMHfCB<456y-=CU4AI?I*w+1yTyV@`$B{uapXly?v}DE!Mrg5;9%fIY%%G?0b)*Ki$CX}_>n!Ts*@nqlNe%YSt%ZdvfO?* z)`bFK?KHb3e^vTQ{0i1btHW|YtR$!lAa7t(C6EIRmt6MQj=YVmELS08oo6k?FbEp|%kHKq<8M=k}?Rnx! zm$rM-ycaMfB}=0L)LhHVNHl-m0_W~?0M9Ka^%y~7kiADSvmv%^=R7D=(&LFxe=EK~ z^=<$QAuykl$)}-bJV4#xDRMuqhHj;V*|VjNz8Kqw}dPPjr9n~LM0p0|dI*4wbdQvk@ z>kqor@LX||HWAx{bVj#Kld;^Od|#*t%~=MM58=nt^rD<4lJlS;JnP)VlGA1S4i$N+s>clPnq;IS*+)IdluX z6`i3f`8xCdRVH63e&~0P&>oK`!>(qnN*J}pN3HC-&x*?2I5jHzJFc_9 z_gs$n24>?3xRv}1LWxeehFhOOo$=(~*shWr!js9?D9pQh?KV7{wdRHjI(q$cCim98 zd)8=Ezx(dv!YSejCe-^+Jphn_24SQv&WK^Kapm20!biRUq3j-*uvwsnuoK0dnw+$z!t=L zYLS0kKn9ks32?!~)o>s^T?iFKlI>Z8SVinE8>~~hU7q1&PD-H6v#+buE*iJlE-v+b zmH3bZDtJaDAy{L3x&Y~!y-hSK24Qur7Swoa()<(r@O%FoHguSdUOPCuvru0Su zd|3dgQ>3N6zZ`cjzpgtil^4wVlDrB59Ec`uj)5M!dOxM_0k+Dfcp#%iz^Tk>HJ|qj zDvADSOq)dq9oVqhmBEqdZ$Vz>Grd8rNSRYY zN&c!3)tyNzwS=s}W?YdZe@Fh~vTgkr)PbGE_eo6IF}fi(Eng6j2PLcu>R4@5|MGU! znq1r7CK(l?<7e%3xl3NqtWt6&(d8Q`*g&}6 zsI|}~rCtFF(2qJ&9u($VD-db?c~%d>Fr_t<=*=rKd*;aBRYXxymr@Heq+UAJ2r!^f z?Q6rcbPKSlcygrv7Q*^>+CM^uS4{`OwZjnWYV28p+ktp0%p~Bz^c%t29=^ zP(jT|WzUG;g|`>-<^_s209LRgYE>TcH!KZgBnr;At{N9ipkceHdU%aBsJs}Y=4Llo z1;BtD9Dr)FG^pFtikmDV9Kan`a!3ZEI_A_wb>9(OJV`9Q{%ZpF@p zIgo~GC=FtlI&bqZSQeRCoo#{zM-+W8?6_K}jJ-0Ko7PYegs%?CTk`jL=gMGL=~`#$ zwxh+DdS{6%T(!B|NMTPU)@S>aGjv+bsE3L$(Ek59B$V`80)f@1?ot zv@VIDV(b^SH!Z4dkvF*QBSw8yhBXP=g;wU;D}|JJuu(r^=7<&0p^3m-kDPXwaa|2D zTCf*lGfolXU7j_W%Bm;rn@_ShrO2avnouk88*HzTtuj|SZ6<}(9$-|TsPbB-H85}l zvnI`rkkMR8B7^$J=gZn74ne3h{D5fl4V=%?7>g=dvJfJy`>>L?Ys}Ur4^j@ep0tE~ zzQdflQp-tBa~$`gq!RvVCx9GTg9Rg)O=q2JVTa8mKR(ITt{YI)WBXO0dTv>#EyM`A zUIIxt27C|rlFli;djabhtxfi)9w}nEc#aWLr2$crqC47-ktK1z=9LY(y&EhBK!)sS zCap~yW-G|Lt|uYnLTr$EX`>^+Jkoh-D;X$o@9$1C768^XPds1FVnAoB}0gsi}-z30G9|d9QHNiW?Hn zV=+las7m#{d5CEjpz%N|94>gWeAOL0#0-P5(;U-Tf><%fhM!MIJ#j z8^>Gre$2*Kt3K~;Bz?DVTng3(hN9(h2F&vy=R~YR^H+FIn#3V7qOVB%KfJw?uayg& zHmTp~!P{9w50JCbhe!-OdMml%4gKxWdRzDP6ZG*z*j0hp5ltT5KT$6tw%I5AIa(Z_ zz>hCq+zj4$CS1>uE1+3rMbeB@(17jv0yOgeas?ySFuC=MjSM+7`rC|#wsM+i9!ykT z*L4GD^{%Sm6E?k%?Z1rw<8plS0&B`m`@!3G?X7;{w9xumjL2>EUt0ykHLD}t5fx=d&;1