From 24852fd5ea62f5a3e5c2aa0af05da241b3ccac16 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 16 Sep 2023 23:30:26 +0000 Subject: [PATCH] Deploy welpo/tabi to welpo/tabi:gh-pages --- 404.html | 1 + about/index.html | 1 + archive/index.html | 1 + atom.xml | 114 ++++++ blog/comments/index.html | 54 +++ blog/custom-font-subset/index.html | 117 ++++++ blog/customise-tabi/index.html | 13 + blog/faq-languages/index.html | 13 + blog/index.html | 1 + blog/javascript/index.html | 1 + blog/markdown/index.html | 9 + 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/about/index.html | 1 + ca/archive/index.html | 1 + ca/atom.xml | 114 ++++++ ca/blog/comments/index.html | 54 +++ ca/blog/custom-font-subset/index.html | 114 ++++++ ca/blog/customise-tabi/index.html | 13 + ca/blog/faq-languages/index.html | 13 + ca/blog/index.html | 1 + ca/blog/javascript/index.html | 1 + ca/blog/markdown/index.html | 9 + 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 | 35 ++ ca/projects/spectro/index.html | 24 ++ ca/projects/tabi/index.html | 1 + ca/tags/funcionalitat/atom.xml | 114 ++++++ ca/tags/funcionalitat/index.html | 1 + ca/tags/index.html | 1 + ca/tags/markdown/atom.xml | 37 ++ ca/tags/markdown/index.html | 1 + ca/tags/preguntes-frequents/atom.xml | 26 ++ ca/tags/preguntes-frequents/index.html | 1 + ca/tags/seguretat/atom.xml | 26 ++ ca/tags/seguretat/index.html | 1 + ca/tags/shortcodes/atom.xml | 26 ++ ca/tags/shortcodes/index.html | 1 + ca/tags/tutorial/atom.xml | 81 ++++ ca/tags/tutorial/index.html | 1 + custom_subset.css | 1 + es/about/index.html | 1 + es/archive/index.html | 1 + es/atom.xml | 114 ++++++ es/blog/comments/index.html | 54 +++ es/blog/custom-font-subset/index.html | 114 ++++++ es/blog/customise-tabi/index.html | 13 + es/blog/faq-languages/index.html | 13 + es/blog/index.html | 1 + es/blog/javascript/index.html | 1 + es/blog/markdown/index.html | 9 + 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 | 35 ++ es/projects/spectro/index.html | 24 ++ es/projects/tabi/index.html | 1 + es/tags/funcionalidad/atom.xml | 114 ++++++ es/tags/funcionalidad/index.html | 1 + es/tags/index.html | 1 + es/tags/markdown/atom.xml | 37 ++ es/tags/markdown/index.html | 1 + es/tags/preguntas-frecuentes/atom.xml | 26 ++ es/tags/preguntas-frecuentes/index.html | 1 + es/tags/seguridad/atom.xml | 26 ++ es/tags/seguridad/index.html | 1 + es/tags/shortcodes/atom.xml | 26 ++ es/tags/shortcodes/index.html | 1 + es/tags/tutorial/atom.xml | 81 ++++ es/tags/tutorial/index.html | 1 + feed_style.xsl | 83 ++++ 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/light_dark_tabi.webp | Bin 0 -> 123698 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/seedling.png | Bin 0 -> 15391 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/social_cards/about.ca.jpg | Bin 0 -> 70292 bytes img/social_cards/about.es.jpg | Bin 0 -> 73066 bytes img/social_cards/about.jpg | Bin 0 -> 72481 bytes img/social_cards/archive.jpg | Bin 0 -> 51467 bytes img/social_cards/blog.jpg | Bin 0 -> 56699 bytes img/social_cards/blog_comments.jpg | Bin 0 -> 52033 bytes img/social_cards/blog_custom_font_subset.jpg | Bin 0 -> 54345 bytes img/social_cards/blog_customise_tabi.jpg | Bin 0 -> 46379 bytes img/social_cards/blog_faq_languages.jpg | Bin 0 -> 76129 bytes img/social_cards/blog_javascript.jpg | Bin 0 -> 59695 bytes img/social_cards/blog_markdown.jpg | Bin 0 -> 60701 bytes img/social_cards/blog_security.jpg | Bin 0 -> 62091 bytes img/social_cards/blog_shortcodes.jpg | Bin 0 -> 46192 bytes img/social_cards/blog_toc.jpg | Bin 0 -> 52701 bytes img/social_cards/ca.jpg | Bin 0 -> 68237 bytes img/social_cards/ca_archive.jpg | Bin 0 -> 50459 bytes img/social_cards/ca_blog.jpg | Bin 0 -> 62097 bytes img/social_cards/ca_blog_comments.jpg | Bin 0 -> 55887 bytes .../ca_blog_custom_font_subset.jpg | Bin 0 -> 62776 bytes img/social_cards/ca_blog_customise_tabi.jpg | Bin 0 -> 50297 bytes img/social_cards/ca_blog_faq_languages.jpg | Bin 0 -> 82454 bytes img/social_cards/ca_blog_javascript.jpg | Bin 0 -> 69507 bytes img/social_cards/ca_blog_markdown.jpg | Bin 0 -> 64233 bytes img/social_cards/ca_blog_security.jpg | Bin 0 -> 68785 bytes img/social_cards/ca_blog_shortcodes.jpg | Bin 0 -> 52480 bytes img/social_cards/ca_blog_toc.jpg | Bin 0 -> 55822 bytes img/social_cards/ca_projects.jpg | Bin 0 -> 45237 bytes img/social_cards/ca_projects_chu.jpg | Bin 0 -> 65611 bytes img/social_cards/ca_projects_nani.jpg | Bin 0 -> 64177 bytes img/social_cards/ca_projects_spectro.jpg | Bin 0 -> 81974 bytes img/social_cards/ca_projects_tabi.jpg | Bin 0 -> 57935 bytes img/social_cards/es.jpg | Bin 0 -> 68344 bytes img/social_cards/es_archive.jpg | Bin 0 -> 50681 bytes img/social_cards/es_blog.jpg | Bin 0 -> 60324 bytes img/social_cards/es_blog_comments.jpg | Bin 0 -> 58084 bytes .../es_blog_custom_font_subset.jpg | Bin 0 -> 63651 bytes img/social_cards/es_blog_customise_tabi.jpg | Bin 0 -> 53157 bytes img/social_cards/es_blog_faq_languages.jpg | Bin 0 -> 83305 bytes img/social_cards/es_blog_javascript.jpg | Bin 0 -> 72735 bytes img/social_cards/es_blog_markdown.jpg | Bin 0 -> 65403 bytes img/social_cards/es_blog_security.jpg | Bin 0 -> 69225 bytes img/social_cards/es_blog_shortcodes.jpg | Bin 0 -> 53427 bytes img/social_cards/es_blog_toc.jpg | Bin 0 -> 58949 bytes img/social_cards/es_projects.jpg | Bin 0 -> 45917 bytes img/social_cards/es_projects_chu.jpg | Bin 0 -> 64550 bytes img/social_cards/es_projects_nani.jpg | Bin 0 -> 64400 bytes img/social_cards/es_projects_spectro.jpg | Bin 0 -> 82968 bytes img/social_cards/es_projects_tabi.jpg | Bin 0 -> 58705 bytes img/social_cards/index.jpg | Bin 0 -> 63056 bytes img/social_cards/projects.jpg | Bin 0 -> 43972 bytes img/social_cards/projects_chu.jpg | Bin 0 -> 56303 bytes img/social_cards/projects_nani.jpg | Bin 0 -> 64084 bytes img/social_cards/projects_spectro.jpg | Bin 0 -> 78635 bytes img/social_cards/projects_tabi.jpg | Bin 0 -> 61898 bytes img/spectro.webp | Bin 0 -> 75164 bytes img/spectrogram.webp | Bin 0 -> 284892 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 | 81 ++++ 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 | 35 ++ projects/spectro/index.html | 24 ++ projects/tabi/index.html | 1 + robots.txt | 4 + sitemap.xml | 249 ++++++++++++ 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/x.svg | 1 + social_icons/youtube.svg | 1 + tags/faq/atom.xml | 26 ++ tags/faq/index.html | 1 + tags/index.html | 1 + tags/markdown/atom.xml | 37 ++ tags/markdown/index.html | 1 + tags/security/atom.xml | 26 ++ tags/security/index.html | 1 + tags/shortcodes/atom.xml | 26 ++ tags/shortcodes/index.html | 1 + tags/showcase/atom.xml | 114 ++++++ tags/showcase/index.html | 1 + tags/tutorial/atom.xml | 81 ++++ tags/tutorial/index.html | 1 + 342 files changed, 3520 insertions(+) create mode 100644 404.html create mode 100644 about/index.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/faq-languages/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/about/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/faq-languages/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/preguntes-frequents/atom.xml create mode 100644 ca/tags/preguntes-frequents/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/about/index.html 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/faq-languages/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/preguntas-frecuentes/atom.xml create mode 100644 es/tags/preguntas-frecuentes/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/light_dark_tabi.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/seedling.png 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/social_cards/about.ca.jpg create mode 100644 img/social_cards/about.es.jpg create mode 100644 img/social_cards/about.jpg create mode 100644 img/social_cards/archive.jpg create mode 100644 img/social_cards/blog.jpg create mode 100644 img/social_cards/blog_comments.jpg create mode 100644 img/social_cards/blog_custom_font_subset.jpg create mode 100644 img/social_cards/blog_customise_tabi.jpg create mode 100644 img/social_cards/blog_faq_languages.jpg create mode 100644 img/social_cards/blog_javascript.jpg create mode 100644 img/social_cards/blog_markdown.jpg create mode 100644 img/social_cards/blog_security.jpg create mode 100644 img/social_cards/blog_shortcodes.jpg create mode 100644 img/social_cards/blog_toc.jpg create mode 100644 img/social_cards/ca.jpg create mode 100644 img/social_cards/ca_archive.jpg create mode 100644 img/social_cards/ca_blog.jpg create mode 100644 img/social_cards/ca_blog_comments.jpg create mode 100644 img/social_cards/ca_blog_custom_font_subset.jpg create mode 100644 img/social_cards/ca_blog_customise_tabi.jpg create mode 100644 img/social_cards/ca_blog_faq_languages.jpg create mode 100644 img/social_cards/ca_blog_javascript.jpg create mode 100644 img/social_cards/ca_blog_markdown.jpg create mode 100644 img/social_cards/ca_blog_security.jpg create mode 100644 img/social_cards/ca_blog_shortcodes.jpg create mode 100644 img/social_cards/ca_blog_toc.jpg create mode 100644 img/social_cards/ca_projects.jpg create mode 100644 img/social_cards/ca_projects_chu.jpg create mode 100644 img/social_cards/ca_projects_nani.jpg create mode 100644 img/social_cards/ca_projects_spectro.jpg create mode 100644 img/social_cards/ca_projects_tabi.jpg create mode 100644 img/social_cards/es.jpg create mode 100644 img/social_cards/es_archive.jpg create mode 100644 img/social_cards/es_blog.jpg create mode 100644 img/social_cards/es_blog_comments.jpg create mode 100644 img/social_cards/es_blog_custom_font_subset.jpg create mode 100644 img/social_cards/es_blog_customise_tabi.jpg create mode 100644 img/social_cards/es_blog_faq_languages.jpg create mode 100644 img/social_cards/es_blog_javascript.jpg create mode 100644 img/social_cards/es_blog_markdown.jpg create mode 100644 img/social_cards/es_blog_security.jpg create mode 100644 img/social_cards/es_blog_shortcodes.jpg create mode 100644 img/social_cards/es_blog_toc.jpg create mode 100644 img/social_cards/es_projects.jpg create mode 100644 img/social_cards/es_projects_chu.jpg create mode 100644 img/social_cards/es_projects_nani.jpg create mode 100644 img/social_cards/es_projects_spectro.jpg create mode 100644 img/social_cards/es_projects_tabi.jpg create mode 100644 img/social_cards/index.jpg create mode 100644 img/social_cards/projects.jpg create mode 100644 img/social_cards/projects_chu.jpg create mode 100644 img/social_cards/projects_nani.jpg create mode 100644 img/social_cards/projects_spectro.jpg create mode 100644 img/social_cards/projects_tabi.jpg create mode 100644 img/spectro.webp create mode 100644 img/spectrogram.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/x.svg create mode 100644 social_icons/youtube.svg create mode 100644 tags/faq/atom.xml create mode 100644 tags/faq/index.html 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..25ed4dde6 --- /dev/null +++ b/404.html @@ -0,0 +1 @@ +~/tabi • 404

404

The page you've requested seems to be missing or hasn't been translated into your language yet. Check the URL for errors or go back 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/about/index.html b/about/index.html new file mode 100644 index 000000000..6ac475c00 --- /dev/null +++ b/about/index.html @@ -0,0 +1 @@ +~/tabi • About

About

Welcome to the demo of tabi, a theme for Zola, a fast static site generator.

tabi is the creation of Óscar Fernández (welpo on GitHub), initially designed for his personal site. It is a feature-rich, modern theme that provides sane (and safe) defaults.

Looking for detailed instructions or tips on using tabi? The blog and archive sections feature the theme's documentation, offering a variety of articles from feature overviews to step-by-step guides.

Features

tabi supports multiple languages, customisable appearance, comment integrations, and much more, all with an emphasis on performance (all JavaScript is optional) and security.

Contributing

Contributions are much appreciated! We appreciate bug reports, improvements to translations or documentation (however minor), feature requests… Check out the Contributing Guidelines to learn how you can help. Thank you!

License

The code is available under the MIT license.

\ No newline at end of file diff --git a/archive/index.html b/archive/index.html new file mode 100644 index 000000000..7c98a4024 --- /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..9704cf7f8 --- /dev/null +++ b/atom.xml @@ -0,0 +1,114 @@ + + + + + This is a web feed, also known as an Atom feed. Subscribe by copying the URL from the address bar into your newsreader. Visit About Feeds to learn more and get started. It's free. + Visit 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/atom.xml + + Lost in Translation? Not with tabi's Multilingual Capabilities + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/blog/faq-languages/ + Master the art of serving a global audience through tabi's built-in multilingual features. Learn how to change the default language, add multilingual support, and contribute your own translations. + + + 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-09-01T00: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-09-01T00: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-09-08T00: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..0b80713e6 --- /dev/null +++ b/blog/comments/index.html @@ -0,0 +1,54 @@ +~/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..ee51a499d --- /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..7a6efa052 --- /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/faq-languages/index.html b/blog/faq-languages/index.html new file mode 100644 index 000000000..da5effaa0 --- /dev/null +++ b/blog/faq-languages/index.html @@ -0,0 +1,13 @@ +~/tabi • Lost in Translation? Not with tabi's Multilingual Capabilities

Lost in Translation? Not with tabi's Multilingual Capabilities

To broaden your reach to a global audience, tabi streamlines the process of building multilingual websites. In this guide, we'll walk you through everything you need to know—from setting a default language for your site to contributing your own translations. Let's get started!

Frequently Asked Questions

What languages does tabi support?

tabi supports the following languages:

  • Catalan
  • Chinese (Simplified)
  • English
  • French
  • German
  • Hindi
  • Italian
  • Japanese
  • Korean
  • Portuguese (European)
  • Russian
  • Spanish
  • Ukranian

For an always up to date list of supported languages, refer to the i18n directory in the tabi repository.

How do I set a default language for my site?

You can set the default language for your site by defining the default_language variable in your config.toml file.

For instance, if you want (Simplified) Chinese to be the primary language, simply add this line to config.toml:

base_url = "https://welpo.github.io/tabi"
+title = "~/tabi"
+default_language = "zh"
+

All of tabi's text strings will be translated to that language, if supported.

How does tabi handle multilingual support?

Zola automatically generates URLs for each non-default language like this: {base_url}/{language_code}/{post}.

tabi facilitates the navigation between languages by adding a language switcher to the navigation bar (only shown when there's more than one language enabled).

If you scroll up to the navigation bar, you'll see the language switcher (the globe icon). Hovering over it will display a dropdown with the available languages. Clicking on a language's name will take you to the same page in that language.

If a specific page is not available in a language, tabi will display a 404 page with the text:

The page you've requested seems to be missing or hasn't been translated into your language yet. Check the URL for errors or go back to the homepage.

This text will be shown once for each language enabled on your site. You can see this page in action here.

How do I enable multilingual support?

To enable multilingual support, you need to set the languages variable in your config.toml file. For example, if want an English-default site with support for Hindi and Spanish, you can set up your config.toml like so:

base_url = "https://example.com"
+title = "My Site"
+default_language = "en"
+
+[languages.hi]
+title = "मेरी वेबसाइट"
+
+[languages.es]
+title = "Mi web"
+

On each language's section, you can set other variables like taxonomies, description, whether to generate a feed… Refer to Zola's multilingual support documentation for more information.

What are these two letter codes?

The two letter codes are ISO 639-1 language codes. They are used to identify languages in a standardised way.

tabi uses these codes to allow navigation between languages and translate the theme.

How do I customise or override a specific text string on my website?

tabi looks for the strings files in the following order. $base_directory is where your Zola site resides (where config.toml is stored):

  1. $base_directory + "i18n"
  2. $base_directory + "themes/tabi/i18n"

So if you create i18n/en.toml in your base directory, tabi will read the strings from that file instead of the default English strings. You can do this for any language, supported or not.

Make sure to copy the entire file for that language first, or the theme will fall back to the default English strings.

What happens if a translation is missing or incomplete?

If a string is not found in the language file, tabi will fall back to the default English string.

My language is not supported. Can I contribute a translation?

Please do! We are always looking to add support for more languages. You can contribute a translation by creating a pull request in the tabi repository.

You can use the English file as a base to translate the strings to your language. Please make sure to follow the same structure.

The file should be named after the two letter code of your language, and should be a TOML file. For example, if you want to add support for Swahili, you can create a file named sw.toml in the i18n directory.

Note: when testing your translation, you might need to restart zola serve to see the changes, as Zola doesn't always detect changes in the TOML files.

I've found an error in a translation. How do I fix it?

If you find an error in a translation, you can create an issue or a pull request in the tabi repository.

How do I update the translations after a theme update?

If you didn't customise the translations, simply updating the theme will update the translations.

If you did, you will need to manually update the translations. You can do this by copying the new strings from the corresponding files, and pasting them in your custom file.

Does tabi translate my content?

No. tabi only translates the theme's text strings. You will need to translate your content yourself.

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

Blog

12 September 2023

Lost in Translation? Not with tabi's Multilingual Capabilities

Master the art of serving a global audience through tabi's built-in multilingual features. Learn how to change the default language, add multilingual support, and contribute your own translations.

Read more →
09 August 2023

Customise tabi with skins and a default theme

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

Read more →
14 July 2023

Add comments to your posts with these 4 comment systems

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

Optimise loading times with a custom font subset

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

Read more →
22 February 2023

Secure by default

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

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..9d6956ffb --- /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 with hierarchical override capability

The following settings can be specified for posts, sections and globally, following the hierarchy of page > section > config.toml:

To specify these settings:

  • Globally: Add them under the [extra] section in your config.toml file.
  • For a section: Add them under the [extra] section in the front matter of the section's _index.md.
  • For an individual post: Set the corresponding variables in the [extra] section of the post's front matter.

Settings that can be enabled globally or for individual posts

  • 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..20c949343 --- /dev/null +++ b/blog/markdown/index.html @@ -0,0 +1,9 @@ +~/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 or an entire section, include katex = true within the [extra] section of the 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..f825c993e --- /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..92cebd0b8 --- /dev/null +++ b/blog/page/2/index.html @@ -0,0 +1 @@ +~/tabi • Blog

Blog

19 February 2023

Custom 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.

Read more →
31 January 2023

Markdown examples

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

Read more →
06 January 2023

No mandatory JavaScript

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

Read more →
01 November 2022

Table of Contents

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..e2fff22bb --- /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..a8428f996 --- /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..6343a7052 --- /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/about/index.html b/ca/about/index.html new file mode 100644 index 000000000..1475bf2e0 --- /dev/null +++ b/ca/about/index.html @@ -0,0 +1 @@ +~/tabi • Sobre mi

Sobre mi

Benvingut a la demo de tabi, un tema per a Zola, un generador de llocs web estàtics rapidíssim.

tabi és una obra d'Óscar Fernández (welpo a GitHub), inicialment creat per al seu lloc personal. És un tema modern i ple de funcionalitats que ofereix configuracions predefinides raonables i segures.

Busques instruccions detallades o consells sobre com utilitzar tabi? Les seccions del blog i de l'arxiu contenen la documentació del tema, que inclou des de mostres de funcions fins a guies detallades.

Característiques

tabi ofereix suport per a diversos idiomes, aparença personalitzable, integració de comentaris, i molt més, tot amb un enfocament en el rendiment (tot el JavaScript és opcional) i la seguretat.

Contribucions

Tota aportació és benvinguda! Agraïm els informes d'errors, millores en traduccions o documentació (per mínimes que siguin), sol·licituds de noves funcions… Consulta les Pautes de Contribució per saber com pots contribuir. Gràcies!

Llicència

El codi està disponible sota la llicència MIT.

\ No newline at end of file diff --git a/ca/archive/index.html b/ca/archive/index.html new file mode 100644 index 000000000..533d95efb --- /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..479ee7d54 --- /dev/null +++ b/ca/atom.xml @@ -0,0 +1,114 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/ca/atom.xml + + Lost in Translation? Explora les capacitats multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/faq-languages/ + Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions. + + + 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-09-01T00: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-09-01T00: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-09-08T00: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..70d135678 --- /dev/null +++ b/ca/blog/comments/index.html @@ -0,0 +1,54 @@ +~/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..2f1a6a1ec --- /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..e06f0ce4c --- /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/faq-languages/index.html b/ca/blog/faq-languages/index.html new file mode 100644 index 000000000..72ebdd191 --- /dev/null +++ b/ca/blog/faq-languages/index.html @@ -0,0 +1,13 @@ +~/tabi • Lost in Translation? Explora les capacitats multilingües de tabi

Lost in Translation? Explora les capacitats multilingües de tabi

tabi simplifica el procés de creació de llocs web multilingües perquè puguis connectar amb una audiència global. En aquesta guia, t'explicarem tot el que necessites saber, des de com configurar la llengua principal en el teu lloc fins a com contribuir amb les teves pròpies traduccions. Comencem!

Preguntes Freqüents

Quines llengües admet tabi?

tabi admet les següents llengües:

  • Alemany
  • Anglès
  • Català
  • Coreà
  • Espanyol
  • Francès
  • Hindi
  • Italià
  • Japonès
  • Portuguès (Europeu)
  • Rus
  • Ucraïnès
  • Xinès (Simplificat)

Per a una llista sempre actualitzada de llengües suportades, consulta la carpeta i18n en el repositori de tabi.

Com estableixo la llengua predeterminada del meu lloc?

Pots definir la llengua principal del teu lloc configurant la variable default_language a config.toml.

Per exemple, si vols que la llengua principal sigui el Xinès, simplement afegeix aquesta línia a l'arxiu config.toml:

base_url = "https://welpo.github.io/tabi"
+title = "~/tabi"
+default_language = "zh"
+

tabi es traduirà a aquesta llengua, si està suportada.

Com gestiona tabi el suport multilingüe?

Zola genera automàticament URLs per a cada llengua que no sigui la predeterminada de la següent manera: {base_url}/{codi_idioma}/{post}.

tabi facilita la navegació entre llengües afegint un commutador de llengua en la barra de navegació (que només es mostra quan hi ha més d'una llengua habilitada).

Si pujes a la barra de navegació, veuràs el commutador de llengua. En passar el cursor sobre ell, es mostrarà un desplegable amb les llengües disponibles. Si fas clic en el nom d'una llengua, et portarà a la mateixa pàgina en aquesta llengua.

Si una pàgina específica no està disponible en una llengua, tabi mostrarà una pàgina 404 amb el text:

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.

Aquest text es mostrarà una vegada per cada llengua activada en el teu lloc. Pots veure aquesta pàgina en acció aquí.

Com activo el suport multilingüe?

Per habilitar el suport per a diverses llengües, necessites configurar la variable languages a config.toml. Per exemple, si vols un lloc amb anglès com a llengua principal que també admeti hindi i espanyol, pots configurar el teu config.toml de la següent manera:

base_url = "https://example.com"
+title = "My Site"
+default_language = "en"
+
+[languages.hi]
+title = "मेरी वेबसाइट"
+
+[languages.es]
+title = "El meu web"
+

En cada secció de llengua pots establir altres variables com taxonomies, description… Consulta la documentació de suport multilingüe de Zola per a més informació.

Què són aquests codis de dues lletres?

Els codis de dues lletres són codis d'idioma ISO 639-1, que serveixen per identificar idiomes d'una manera estandarditzada.

tabi utilitza aquests codis per permetre la navegació entre idiomes i traduir el tema.

Com personalitzo o reemplaço una cadena de text específica al meu lloc web?

tabi cerca els fitxers de cadenes en el següent ordre. $base_directory és on resideix el teu lloc Zola (allà on està config.toml):

  1. $base_directory + "i18n"
  2. $base_directory + "themes/tabi/i18n"

Per tant, si crees i18n/ca.toml al teu directori base, tabi llegirà les cadenes de text d'aquest fitxer en lloc de les cadenes predeterminades en català. Pots fer això per a qualsevol idioma, suportat o no.

Assegura't de copiar tot el fitxer per a aquest idioma primer, o el tema utilitzarà l'anglès per les claus que faltin.

Què passa si falta una traducció o està incompleta?

Si una cadena no es troba en el fitxer d'idioma, tabi recorrerà a la cadena predeterminada en català.

El meu idioma no està suportat. Puc contribuir amb una traducció?

És clar! Sempre estem buscant afegir suport per a més idiomes. Pots contribuir amb una traducció creant una Pull Request al repositori de tabi.

Pots utilitzar el fitxer en català com a base per traduir les cadenes al teu idioma. Assegura't de mantenir la mateixa estructura.

El fitxer ha de portar el nom del codi de dues lletres del teu idioma i ha de ser un fitxer TOML. Per exemple, si vols afegir suport per al suahili, pots crear un fitxer anomenat sw.toml al directori i18n.

Nota: quan provis la teva traducció, és possible que necessitis reiniciar zola serve per veure els canvis, ja que Zola no sempre detecta canvis en els fitxers TOML.

He trobat un error en una traducció. Com el corregeixo?

Si trobes un error en una traducció, pots crear un problema o una sol·licitud d'extracció al repositori de tabi.

Com actualitzo les traduccions després d'una actualització del tema?

Si no vas personalitzar les traduccions, simplement actualitza el tema.

Si ho vas fer, hauràs d'actualitzar manualment les traduccions. Pots fer-ho copiant les noves cadenes dels fitxers corresponents i enganxant-les al teu fitxer personalitzat.

tabi tradueix el meu contingut?

No. tabi només tradueix les cadenes de text del tema. Hauràs de traduir el teu contingut tu mateix.

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

Blog

12 de setembre 2023

Lost in Translation? Explora les capacitats multilingües de tabi

Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions.

Llegir més →
09 d’agost 2023

Personalitza el color de tabi i el tema per defecte

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

Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes

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

Optimitza la càrrega amb un subconjunt de font personalitzat

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

Llegir més →
22 de febrer 2023

Seguretat per defecte

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/blog/javascript/index.html b/ca/blog/javascript/index.html new file mode 100644 index 000000000..48bcd542a --- /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 es pot habilitar configurant theme_switcher = true a la secció [extra] del teu config.toml (~900 bytes de JavaScript).

  • Decodificació de correu electrònic (~400 bytes). Per protegir contra robots de correu brossa, pots configurar encode_plaintext_email = true. Si el teu lloc web està en un repositori públic, considera utilitzar el teu email com una cadena codificada en base641.

Opcions que es poden sobreescriure de forma jeràrquica

Les següents opcions es poden especificar per a publicacions, seccions i globalment, seguint la jerarquia de pàgina > secció > config.toml:

Per especificar aquestes opcions:

  • Globalment: Afegeix-les sota la secció [extra] al teu config.toml.
  • Per a una secció: Afegeix-les sota la secció [extra] al front matter de l'_index.md de la secció.
  • Per a una publicació individual: Configura les variables corresponents a la secció [extra] del front matter de la publicació.

Opcions que es poden habilitar globalment o per a publicacions individuals

  • 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 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..7d5c4c1c3 --- /dev/null +++ b/ca/blog/markdown/index.html @@ -0,0 +1,9 @@ +~/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ó o secció sencera, inclou katex = true dins de la secció [extra] de les metadades. 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..6e9655471 --- /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..7f0bb5316 --- /dev/null +++ b/ca/blog/page/2/index.html @@ -0,0 +1 @@ +~/tabi • Blog

Blog

19 de febrer 2023

Shortcodes personalitzats

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

Exemples de 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.

Llegir més →
06 de gener 2023

Sense JavaScript obligatori

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

Llegir més →
01 de novembre 2022

Taula de contingut

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..dfbe095d7 --- /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..69596dc96 --- /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..ba01615a9 --- /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..b204110e4 --- /dev/null +++ b/ca/index.html @@ -0,0 +1 @@ +~/tabi

Publicacions recents

12 de setembre 2023

Lost in Translation? Explora les capacitats multilingües de tabi

Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions.

Llegir més →
09 d’agost 2023

Personalitza el color de tabi i el tema per defecte

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

Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes

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

Optimitza la càrrega amb un subconjunt de font personalitzat

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

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..6585a780d --- /dev/null +++ b/ca/projects/chu/index.html @@ -0,0 +1 @@ +~/tabi • chu

chu

    chu és una aplicació per pujar arxius creada amb Python, Flask i uWSGI. Aquest projecte integra diverses tècniques d'optimització per fer que la pujada d'arxius sigui no només més senzilla, sinó també més intel·ligent.

    Veure a GitHub

    Característiques tècniques

    • Eficiència a través de la compressió: Utilitza compressió Lepton JPEG i optipng per assolir un estalvi d'espai d'fins al 22%.

    • Mesures de seguretat: Implementa límits de grandària de pujada, controls d'extensió i autenticació amb contrasenya.

    • Facilitat d'ús: Genera una URL per a cada arxiu pujat amb èxit, permetent noms d'arxiu aleatoris o definits per l'usuari.

    • Eliminació de metadades: Elimina les metadades dels arxius per millorar la privacitat.

    • Grandària de pujada configurable: Ofereix la possibilitat d'establir límits a la grandària dels arxius pujats.

    • Controls específics d'extensió: Proporciona configuracions per restringir les pujades a extensions d'arxiu específiques.

    • Resposta d'URL directa: Després de cada pujada exitosa, retorna una URL que apunta a l'arxiu.

    \ No newline at end of file diff --git a/ca/projects/index.html b/ca/projects/index.html new file mode 100644 index 000000000..cf36701b9 --- /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 suport multilingüe.
    img/chu.webp

    chu

    Aplicació Flask per pujar arxius de manera segura, amb eliminació de metadades, compressió, protecció amb contrasenya i més.
    img/nani.webp

    nani

    Script Bash per crear URLs públiques a partir d'arxius o text en servidors remots.
    img/spectro.webp

    spectro

    Script en Bash per generar espectrogrames, comparar-los, pujar-los a Imgur i proporcionar les URL corresponents per compartir.
    \ 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..57a56f864 --- /dev/null +++ b/ca/projects/nani/index.html @@ -0,0 +1,35 @@ +~/tabi • nani

    nani

      Si treballes en un servidor remot, saps que compartir arxius amb altres persones pot ser un procés feixuc. nani és un script en Bash dissenyat per simplificar aquesta tasca. Amb una sola comanda, pots convertir arxius locals o URLs en enllaços accessibles, facilitant el procés de compartir directament des del teu servidor.

      Veure a GitHub

      Característiques clau

      • Tot tipus d'arxius: gestiona directoris, arxius FLAC, arxius de text i fins i tot URLs a vídeos.

      • Personalitzable: adapta els ajustos editant l'script o un arxiu de configuració.

      • Notificacions: notificacions a l'escriptori i integració amb el portaretrats per a una millor experiència.

      Inici ràpid

      1. Col·loca nani en un directori dins del teu PATH.
      2. Fes que l'script sigui executable.

      Per a passos d'instal·lació més detallats, consulta la documentació completa.

      Ús

      nani Ruta/A/foto.png
      +https://example.com/nani/hjRGLZB.png
      +

      Compartir un directori mantenint el seu nom original:

      nani -o Ruta/A/Directori
      +https://example.com/nani/Directori.zip
      +

      Pots configurar diverses opcions a través dels paràmetres. Aquí tens la sortida de nani --help:

      Usage: nani [options] <infile>
      +Provides public URL from input.
      +
      +Input handling:
      +    Directory                       Will be stored using zip (or symbolic link)
      +    FLAC                            Can be transcoded to MP3
      +    Text (html, php...)             Extension can be set to .txt
      +    Other files                     New copy/hard link/symbolic link at output directory
      +    URL to video (e.g: youtube)     Downloaded using yt-dlp
      +    Other URLs                      Downloaded using wget
      +
      +Modify the first lines of the script to change how nani behaves: quiet mode,
      +enabling/disabling transcoding, length of the string, extension truncation...
      +
      +Settings and options:
      +    -a, --alias      Revert the hard link setting
      +    -c, --cleanup    Remove all files on /nani/ except index.html
      +    -h, --help       Display this help and exit
      +    -i, --insert     Open nano to enter text. Saved in output directory as .txt
      +    -k, --keep       Output dir becomes /nani/k/, to set different cleanup rules
      +    -l, --list       List files in output directory /nani/
      +    -n, --name       Use custom name (e.g. nani -n DesiredName <file>)
      +    -N, --notify     Revert the notify option
      +    -o, --original   Preserve original file name
      +    -p, --push       Send push notification
      +    -q, --quiet      Revert the quiet setting
      +    -s, --string     Force a certain string length (e.g. nani -s 32 <file>)
      +    -t, --transcode  Revert the transcode setting
      +    -x, --xclip      Revert the xclip setting
      +    -y, --symbolic   Create a symbolic link for files and directories
      +
      \ 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..e820e69ec --- /dev/null +++ b/ca/projects/spectro/index.html @@ -0,0 +1,24 @@ +~/tabi • spectro

      spectro

        Transforma fitxers d'àudio en espectrogrames amb format BBCode de manera senzilla amb spectro. Aquest script en Bash suporta una àmplia varietat de formats d'àudio com Ogg, MP3, FLAC, AAC i més.

        Espectrograma de Jardin du Sommeil Chant d'Amour Sur La Nuit Grandissante, de Tourette

        Veure a GitHub

        Característiques

        • Suport de múltiples formats: Ogg, MP3, FLAC, AAC, ape, WMA, MP4 i WAV.
        • Sortida en BBCode: Genera automàticament BBCode per a fòrums o llocs web.
        • Processament per lots: Pot gestionar directoris sencers o fitxers específics.
        • Extensible: Opcions per a personalització, incloent l'emmagatzemament local i la pujada a Imgur.

        Inici ràpid

        1. Descarrega spectro en un directori dins del teu PATH, per exemple, ~/bin.
        2. Atorga permisos d'execució: chmod +x spectro.

        Ús

        Generar BBCode per a un directori complet:

        spectro Path/To/Directory/
        +

        Sortida:

        [hide=Spectrograms][size=3]
        +[url=https://i.imgur.com/ClzzbP8.png]01. Jardin Du Sommeil.flac[/url]
        +[/size][/hide]
        +

        Generar BBCode per a fitxers específics:

        spectro arxiu1.flac arxiu2.mp3
        +

        Opcions addicionals i configuracions estan disponibles. Consulta spectro --help:

        Usage: spectro [options] <audio_files>
        +Generate BBCode-formatted spectrograms from audio files.
        +
        +Options:
        +    -c, --compare     Create a .gif comparison of spectrograms (requires ImageMagick)
        +    -d, --double      Create both zoomed and full spectrograms
        +    -h, --help        Display this help and exit
        +    -l, --local       Save spectrograms locally
        +    -o, --optipng     Reverse optipng setting
        +    -p, --parallel    Compatible with 'parallel'
        +    -q, --quiet       Suppress 'Uploading' text
        +    -s, --sha         Display SHA value
        +    -t, --text        Use [url] or [img] tags
        +    -z, --zoom        Create zoomed-in spectrogram
        +
        +Examples:
        +    spectro -ol DirectoryWithMusic/
        +    printf "[hide=Spectrograms][size=3]" && ls | parallel -k spectro -p; printf "[/size][/hide]"
        +
        \ 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..078fc2cfc --- /dev/null +++ b/ca/projects/tabi/index.html @@ -0,0 +1 @@ +~/tabi • tabi

        tabi

          tabi és un tema modern i ric en característiques per a Zola, un generador de llocs web estàtics molt ràpid.

          Modes clar i fosc de tabi

          Veure a GitHub

          Característiques

          Pràctiques de desenvolupament

          • Conventional Commits i Gitmoji: els missatges de commit segueixen formats estandarditzats per facilitar la llegibilitat.

          • Seguiment d'incidències: cada error o nova funcionalitat té el seu propi tiquet, que s'enllaça amb els commits de codi i PRs o problemes relacionats.

          • Comentaris detallats: els tiquets es documenten amb imatges, vídeos i descripcions detallades per facilitar una comunicació i resolució de problemes efectives.

          • Referències creuades: enllacem tots els tiquets amb els commits de codi, pull requests o problemes relacionats per a una traçabilitat completa.

          Evolució del projecte

          tabi va néixer com a disseny per al meu lloc web personal, osc.garden. Malgrat les seves arrels personals, des del principi es van implementar bones pràctiques per assegurar la qualitat i la mantenibilitat. Des d'aleshores, el tema ha aconseguit atraure una comunitat activa de col·laboradors a GitHub.

          Inicia el teu recorregut com a escriptor amb tabi

          Tens alguna cosa a dir. Potser vols parlar sobre com els lingüistes encara no han acordat una definició de "paraula", o sobre la teva experiència explorant els diferents palos del flamenc, o de com vas aconseguir resoldre un error d'un projecte de codi obert popular.

          tabi t'ofereix la base ideal per al teu espai d'escriptura, permetent-te centrar-te en les teves paraules mentre Zola i tabi s'encarreguen de l'aspecte tècnic. Submergeix-te en el món dels blogs amb un sistema que fa que cada publicació sigui un plaer escriure i llegir. La teva veu té valor; comparteix-la amb el món.

          \ 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..57b869974 --- /dev/null +++ b/ca/tags/funcionalitat/atom.xml @@ -0,0 +1,114 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/funcionalitat/atom.xml + + Lost in Translation? Explora les capacitats multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/faq-languages/ + Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions. + + + 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-09-01T00: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-09-01T00: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-09-08T00: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..dd0165b52 --- /dev/null +++ b/ca/tags/funcionalitat/index.html @@ -0,0 +1 @@ +~/tabi • funcionalitat

          funcionalitat

          12 September 2023

          Lost in Translation? Explora les capacitats multilingües de tabi

          Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions.

          Read more →
          09 August 2023

          Personalitza el color de tabi i el tema per defecte

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

          Read more →
          14 July 2023

          Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes

          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.

          Read more →
          29 April 2023

          Optimitza la càrrega amb un subconjunt de font personalitzat

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

          Read more →
          22 February 2023

          Seguretat per defecte

          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.

          Read more →
          19 February 2023

          Shortcodes personalitzats

          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.

          Read more →
          31 January 2023

          Exemples de 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.

          Read more →
          06 January 2023

          Sense JavaScript obligatori

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

          Read more →
          01 November 2022

          Taula de contingut

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

          Read more →
          \ No newline at end of file diff --git a/ca/tags/index.html b/ca/tags/index.html new file mode 100644 index 000000000..1f920c40a --- /dev/null +++ b/ca/tags/index.html @@ -0,0 +1 @@ +~/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..78fd9e6c0 --- /dev/null +++ b/ca/tags/markdown/atom.xml @@ -0,0 +1,37 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita 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-09-08T00: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-09-01T00: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-09-08T00: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..a9c98335b --- /dev/null +++ b/ca/tags/markdown/index.html @@ -0,0 +1 @@ +~/tabi • markdown

          markdown

          31 January 2023

          Exemples de 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.

          Read more →
          01 November 2022

          Taula de contingut

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

          Read more →
          \ No newline at end of file diff --git a/ca/tags/preguntes-frequents/atom.xml b/ca/tags/preguntes-frequents/atom.xml new file mode 100644 index 000000000..138c2ae07 --- /dev/null +++ b/ca/tags/preguntes-frequents/atom.xml @@ -0,0 +1,26 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita la web + Publicacions recents + ~/tabi - Preguntes Freqüents + tabi és un tema de Zola ràpid, lleuger i modern amb JavaScript opcional i una puntuació perfecta a Lighthouse. + + + Zola + 2023-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/preguntes-frequents/atom.xml + + Lost in Translation? Explora les capacitats multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/faq-languages/ + Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions. + + diff --git a/ca/tags/preguntes-frequents/index.html b/ca/tags/preguntes-frequents/index.html new file mode 100644 index 000000000..a4646a73a --- /dev/null +++ b/ca/tags/preguntes-frequents/index.html @@ -0,0 +1 @@ +~/tabi • Preguntes Freqüents

          Preguntes Freqüents

          12 September 2023

          Lost in Translation? Explora les capacitats multilingües de tabi

          Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions.

          Read more →
          \ 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..5fbff7913 --- /dev/null +++ b/ca/tags/seguretat/atom.xml @@ -0,0 +1,26 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita 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..3e08209d7 --- /dev/null +++ b/ca/tags/seguretat/index.html @@ -0,0 +1 @@ +~/tabi • seguretat

          seguretat

          22 February 2023

          Seguretat per defecte

          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.

          Read more →
          \ 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..21d76e87f --- /dev/null +++ b/ca/tags/shortcodes/atom.xml @@ -0,0 +1,26 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita 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..d484b7102 --- /dev/null +++ b/ca/tags/shortcodes/index.html @@ -0,0 +1 @@ +~/tabi • shortcodes

          shortcodes

          19 February 2023

          Shortcodes personalitzats

          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.

          Read more →
          \ 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..e5d765e3a --- /dev/null +++ b/ca/tags/tutorial/atom.xml @@ -0,0 +1,81 @@ + + + + + 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 About Feeds per aprendre més i començar. És gratuït. + Visita 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/ca/tags/tutorial/atom.xml + + Lost in Translation? Explora les capacitats multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/ca/blog/faq-languages/ + Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions. + + + 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-09-01T00: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-09-08T00: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..eceb612d5 --- /dev/null +++ b/ca/tags/tutorial/index.html @@ -0,0 +1 @@ +~/tabi • tutorial

          tutorial

          12 September 2023

          Lost in Translation? Explora les capacitats multilingües de tabi

          Descobreix com tabi t'ajuda a connectar amb una audiència global gràcies a les seves funcions multilingües. Aprèn a canviar la llengua per defecte, afegir més llengües i aportar les teves pròpies traduccions.

          Read more →
          09 August 2023

          Personalitza el color de tabi i el tema per defecte

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

          Read more →
          14 July 2023

          Afegeix comentaris a les teves publicacions amb aquestes 4 plataformes

          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.

          Read more →
          29 April 2023

          Optimitza la càrrega amb un subconjunt de font personalitzat

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

          Read more →
          06 January 2023

          Sense JavaScript obligatori

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

          Read more →
          01 November 2022

          Taula de contingut

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

          Read more →
          \ No newline at end of file diff --git a/custom_subset.css b/custom_subset.css new file mode 100644 index 000000000..6234dc193 --- /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/about/index.html b/es/about/index.html new file mode 100644 index 000000000..81f22cc66 --- /dev/null +++ b/es/about/index.html @@ -0,0 +1 @@ +~/tabi • Sobre mí

          Sobre mí

          Bienvenido a la demo de tabi, un tema para Zola, un rapidísimo generador de sitios estáticos.

          tabi es obra de Óscar Fernández (welpo en GitHub), inicialmente creado para su página personal. Es un tema moderno y lleno de funcionalidades que ofrece configuraciones predeterminadas sensatas y seguras.

          ¿Buscas instrucciones detalladas o consejos sobre cómo utilizar tabi? Las secciones del blog y del archivo contienen la documentación del tema, que incluye desde muestras de funciones hasta guías detalladas.

          Características

          tabi ofrece soporte para varios idiomas, apariencia personalizable, integración de comentarios, y mucho más, todo con un enfoque en el rendimiento (todo el JavaScript es opcional) y la seguridad.

          Contribuciones

          ¡Toda aportación es bienvenida! Agradecemos los reportes de errores, mejoras en traducciones o documentación (por mínimas que sean), solicitudes de nuevas funciones… Consulta las Pautas de Contribución para saber cómo puedes contribuir. ¡Gracias!

          Licencia

          El código está disponible bajo la licencia MIT.

          \ No newline at end of file diff --git a/es/archive/index.html b/es/archive/index.html new file mode 100644 index 000000000..f8c523d86 --- /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..e3ef2ca01 --- /dev/null +++ b/es/atom.xml @@ -0,0 +1,114 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/es/atom.xml + + ¿Lost in Translation? Explora las capacidades multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/faq-languages/ + Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones. + + + 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-09-01T00: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-09-01T00: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-09-08T00: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..edfd4e3f4 --- /dev/null +++ b/es/blog/comments/index.html @@ -0,0 +1,54 @@ +~/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..f2fb7221f --- /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..ea8877f6d --- /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/faq-languages/index.html b/es/blog/faq-languages/index.html new file mode 100644 index 000000000..53796852b --- /dev/null +++ b/es/blog/faq-languages/index.html @@ -0,0 +1,13 @@ +~/tabi • ¿Lost in Translation? Explora las capacidades multilingües de tabi

          ¿Lost in Translation? Explora las capacidades multilingües de tabi

          tabi simplifica el proceso de crear sitios web multilingües para que puedas conectar con una audiencia global. En esta guía, te explicaremos todo lo que necesitas saber, desde cómo configurar el idioma principal en tu sitio hasta cómo contribuir con tus propias traducciones. ¡Empecemos!

          Preguntas Frecuentes

          ¿Qué idiomas admite tabi?

          tabi admite los siguientes idiomas:

          • Alemán
          • Catalán
          • Chino (Simplificado)
          • Coreano
          • Español
          • Francés
          • Hindi
          • Inglés
          • Italiano
          • Japonés
          • Portugués (Europeo)
          • Ruso
          • Ucraniano

          Para una lista siempre actualizada de idiomas soportados, consulta la carpeta i18n en el repositorio de tabi.

          ¿Cómo establezco el idioma predeterminado de mi sitio?

          Puedes definir el idioma principal de tu sitio configurando la variable default_language en tu archivo config.toml.

          Por ejemplo, si deseas que el idioma principal sea el Chino, simplemente añade esta línea al archivo config.toml:

          base_url = "https://welpo.github.io/tabi"
          +title = "~/tabi"
          +default_language = "zh"
          +

          tabi se traducirá a ese idioma, si está soportado.

          ¿Cómo gestiona tabi el soporte multilingüe?

          Zola genera automáticamente URLs para cada idioma que no sea el predeterminado de la siguiente manera: {base_url}/{código_idioma}/{post}.

          tabi facilita la navegación entre idiomas añadiendo un conmutador de idioma en la barra de navegación (que sólo se muestra cuando hay más de un idioma habilitado).

          Si subes a la barra de navegación, verás el conmutador de idioma. Al pasar el cursor sobre él, se mostrará un desplegable con los idiomas disponibles. Si haces clic en el nombre de un idioma, te llevará a la misma página en ese idioma.

          Si una página específica no está disponible en un idioma, tabi mostrará una página 404 con el texto:

          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.

          Este texto se mostrará una vez por cada idioma activado en tu sitio. Puedes ver esta página en acción aquí.

          ¿Cómo activo el soporte multilingüe?

          Para habilitar el soporte para varios idiomas, necesitas configurar la variable languages en config.toml. Por ejemplo, si quieres un sitio con inglés como idioma principal que también admita hindi y español, puedes configurar tu config.toml de la siguiente manera:

          base_url = "https://example.com"
          +title = "My Site"
          +default_language = "en"
          +
          +[languages.hi]
          +title = "मेरी वेबसाइट"
          +
          +[languages.es]
          +title = "Mi web"
          +

          En cada sección de idioma puedes establecer otras variables como taxonomies, description… Consulta la documentación de soporte multilingüe de Zola para más información.

          ¿Qué son estos códigos de dos letras?

          Los códigos de dos letras son códigos de idioma ISO 639-1, que sirven para identificar idiomas de una manera estandarizada.

          tabi utiliza estos códigos para permitir la navegación entre idiomas y traducir el tema.

          ¿Cómo personalizo o reemplazo una cadena de texto específica en mi sitio web?

          tabi busca los archivos de cadenas en el siguiente orden. $base_directory es donde reside tu sitio Zola (donde se guarda config.toml):

          1. $base_directory + "i18n"
          2. $base_directory + "themes/tabi/i18n"

          Por lo tanto, si creas i18n/en.toml en tu directorio base, tabi leerá las cadenas de texto de ese archivo en lugar de las cadenas predeterminadas en inglés. Puedes hacer esto para cualquier idioma, soportado o no.

          Asegúrate de copiar todo el archivo para ese idioma primero, o el tema usará el inglés para las claves faltantes.

          ¿Qué pasa si falta una traducción o está incompleta?

          Si una cadena no se encuentra en el archivo de idioma, tabi recurrirá a la cadena predeterminada en inglés.

          Mi idioma no está soportado. ¿Puedo contribuir con una traducción?

          ¡Por supuesto! Siempre estamos buscando añadir soporte para más idiomas. Puedes contribuir con una traducción creando una Pull Request en el repositorio de tabi.

          Puedes usar el archivo en inglés como base para traducir las cadenas a tu idioma. Asegúrate de mantener la misma estructura.

          El archivo debe llevar el nombre del código de dos letras de tu idioma y debe ser un archivo TOML. Por ejemplo, si quieres añadir soporte para el suajili, puedes crear un archivo llamado sw.toml en el directorio i18n.

          Nota: cuando pruebes tu traducción, es posible que necesites reiniciar zola serve para ver los cambios, ya que Zola no siempre detecta cambios en los archivos TOML.

          He encontrado un error en una traducción. ¿Cómo lo corrijo?

          Si encuentras un error en una traducción, puedes crear un problema o una solicitud de extracción en el repositorio de tabi.

          ¿Cómo actualizo las traducciones después de una actualización del tema?

          Si no personalizaste las traducciones, basta con actualizar el tema.

          Si lo hiciste, tendrás que actualizar manualmente las traducciones. Puedes hacerlo copiando las nuevas cadenas de los archivos correspondientes y pegándolas en tu archivo personalizado.

          ¿tabi traduce el contenido de mi sitio?

          No. tabi sólo traduce el tema. Los posts deberás traducirlos tú mismo.

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

          Blog

          12 septiembre 2023

          ¿Lost in Translation? Explora las capacidades multilingües de tabi

          Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones.

          Leer más →
          09 agosto 2023

          Personaliza el color de tabi y el tema predeterminado

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

          Leer más →
          14 julio 2023

          Añade comentarios a tus publicaciones con estas 4 plataformas

          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

          Optimiza la carga con un subconjunto de fuente personalizado

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

          Leer más →
          22 febrero 2023

          Seguro por defecto

          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/blog/javascript/index.html b/es/blog/javascript/index.html new file mode 100644 index 000000000..43247b876 --- /dev/null +++ b/es/blog/javascript/index.html @@ -0,0 +1 @@ +~/tabi • Sin JavaScript obligatorio

          Sin JavaScript obligatorio

          Este tema no requiere JavaScript de manera obligatoria. Opcionalmente, puede cargar una cantidad mínima de JavaScript para añadir algunas características que son imposibles de lograr con solo 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).

          • Descodificación de correo electrónico (~400 bytes). Para proteger contra bots que recopilan correos electrónicos desde tu sitio web, puedes configurar encode_plaintext_email = true. Si tu sitio está en un repositorio público, para mayor protección, considera configurar tu email como una cadena codificada en base641.

          Opciones que se pueden sobreescribir de forma jerárquica

          Las siguientes opciones pueden especificarse para publicaciones, secciones y a nivel global, siguiendo la jerarquía de página > sección > config.toml:

          Para especificar estas opciones:

          • Globalmente: Añádelas en la sección [extra] de tu config.toml.
          • Para una sección: Añádelas en la sección [extra] del front matter del _index.md de la sección.
          • Para una publicación individual: Configura las variables correspondientes en la sección [extra] del front matter de la publicación.

          Opciones que pueden habilitarse globalmente o para publicaciones individuales

          • Comentarios. giscus (2 KB), utterances (1 KB), Hyvor Talk (~800 bytes) o Isso (1KB) pueden habilitarse globalmente configurando enabled_for_all_posts = true en la sección apropiada de tu 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 de la publicación.

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


          1

          Para codificar tu correo electrónico en base64 puedes usar herramientas en línea o, en tu terminal, ejecutar: printf 'mail@example.com' | base64.

          \ 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..f43817bf6 --- /dev/null +++ b/es/blog/markdown/index.html @@ -0,0 +1,9 @@ +~/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 o sección entera, incluye katex = true dentro de la sección [extra] del encabezado. 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..0be7b5ac2 --- /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..9a4e26311 --- /dev/null +++ b/es/blog/page/2/index.html @@ -0,0 +1 @@ +~/tabi • Blog

          Blog

          19 febrero 2023

          Shortcodes personalizados

          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

          Ejemplos de 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.

          Leer más →
          06 enero 2023

          Sin JavaScript obligatorio

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

          Leer más →
          01 noviembre 2022

          Tabla de contenido

          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..1d5cc35e6 --- /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..274aa9829 --- /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..0fe8b5b37 --- /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..ec0cc86bc --- /dev/null +++ b/es/index.html @@ -0,0 +1 @@ +~/tabi

          Publicaciones recientes

          12 septiembre 2023

          ¿Lost in Translation? Explora las capacidades multilingües de tabi

          Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones.

          Leer más →
          09 agosto 2023

          Personaliza el color de tabi y el tema predeterminado

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

          Leer más →
          14 julio 2023

          Añade comentarios a tus publicaciones con estas 4 plataformas

          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

          Optimiza la carga con un subconjunto de fuente personalizado

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

          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..d92082f7a --- /dev/null +++ b/es/projects/chu/index.html @@ -0,0 +1 @@ +~/tabi • chu

          chu

            chu es un subidor de archivos creado con Python, Flask y uWSGI. Este proyecto integra diversas técnicas de optimización para hacer que la subida de archivos sea no solo más sencilla, sino también más inteligente.

            Ver en GitHub

            Características técnicas

            • Eficiencia a través de la compresión: Utiliza compresión Lepton JPEG y optipng para lograr un ahorro de espacio de hasta el 22%.

            • Medidas de seguridad: Implementa límites de tamaño de subida, controles de extensión y autenticación con contraseña.

            • Facilidad de uso: Genera una URL para cada archivo subido con éxito, permitiendo nombres de archivo aleatorios o definidos por el usuario.

            • Eliminación de metadatos: Elimina los metadatos de los archivos por privacidad.

            • Tamaño de subida configurable: Ofrece la posibilidad de establecer límites al tamaño de los archivos subidos.

            • Controles específicos de extensión: Proporciona configuraciones para restringir las subidas a extensiones de archivo específicas.

            • Respuesta de URL directa: Tras cada subida exitosa, devuelve una URL que apunta al archivo.

            \ No newline at end of file diff --git a/es/projects/index.html b/es/projects/index.html new file mode 100644 index 000000000..ff72716c5 --- /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 soporte multilingüe.
            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 URLs públicas a partir de archivos o texto en servidores remotos.
            img/spectro.webp

            spectro

            Script en Bash para generar espectrogramas, compararlos, subirlos a Imgur y proporcionar las URL correspondientes 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..c597484eb --- /dev/null +++ b/es/projects/nani/index.html @@ -0,0 +1,35 @@ +~/tabi • nani

            nani

              Si trabajas en un servidor remoto, sabrás que compartir archivos con otras personas puede ser un proceso tedioso. nani es un script en Bash diseñado para simplificar esta tarea. Con un solo comando, puedes convertir archivos locales en enlaces públicos, facilitando el proceso de compartir directamente desde tu servidor.

              Ver en GitHub

              Características clave

              • Todo tipo de archivos: maneja directorios, archivos FLAC, archivos de texto e incluso URLs a vídeos.

              • Personalizable: adapta los ajustes editando el script o un archivo de configuración.

              • Notificaciones: notificaciones en el escritorio e integración con el portapapeles para una mejor experiencia.

              Inicio rápido

              1. Coloca nani en un directorio dentro de tu PATH.
              2. Haz el script ejecutable.

              Para pasos de instalación más detallados, consulta la documentación completa.

              Uso

              nani Ruta/A/foto.png
              +https://example.com/nani/hjRGLZB.png
              +

              Compartir un directorio manteniendo su nombre original:

              nani -o Ruta/A/Directorio
              +https://example.com/nani/Directorio.zip
              +

              Puedes configurar varias opciones a través de los parámetros. Aquí tienes la salida de nani --help:

              Usage: nani [options] <infile>
              +Provides public URL from input.
              +
              +Input handling:
              +    Directory                       Will be stored using zip (or symbolic link)
              +    FLAC                            Can be transcoded to MP3
              +    Text (html, php...)             Extension can be set to .txt
              +    Other files                     New copy/hard link/symbolic link at output directory
              +    URL to video (e.g: youtube)     Downloaded using yt-dlp
              +    Other URLs                      Downloaded using wget
              +
              +Modify the first lines of the script to change how nani behaves: quiet mode,
              +enabling/disabling transcoding, length of the string, extension truncation...
              +
              +Settings and options:
              +    -a, --alias      Revert the hard link setting
              +    -c, --cleanup    Remove all files on /nani/ except index.html
              +    -h, --help       Display this help and exit
              +    -i, --insert     Open nano to enter text. Saved in output directory as .txt
              +    -k, --keep       Output dir becomes /nani/k/, to set different cleanup rules
              +    -l, --list       List files in output directory /nani/
              +    -n, --name       Use custom name (e.g. nani -n DesiredName <file>)
              +    -N, --notify     Revert the notify option
              +    -o, --original   Preserve original file name
              +    -p, --push       Send push notification
              +    -q, --quiet      Revert the quiet setting
              +    -s, --string     Force a certain string length (e.g. nani -s 32 <file>)
              +    -t, --transcode  Revert the transcode setting
              +    -x, --xclip      Revert the xclip setting
              +    -y, --symbolic   Create a symbolic link for files and directories
              +
              \ 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..e07307a5c --- /dev/null +++ b/es/projects/spectro/index.html @@ -0,0 +1,24 @@ +~/tabi • spectro

              spectro

                Transforma archivos de audio en espectrogramas con formato BBCode de manera sencilla con spectro. Este script en Bash soporta una amplia variedad de formatos de audio como Ogg, MP3, FLAC, AAC y más.

                Espectrograma de Jardin du Sommeil Chant d'Amour Sur La Nuit Grandissante, de Tourette

                Ver en GitHub

                Características

                • Soporte de múltiples formatos: Ogg, MP3, FLAC, AAC, ape, WMA, MP4 y WAV.
                • Salida en BBCode: Genera automáticamente BBCode para foros o sitios web.
                • Procesamiento por lotes: Puede manejar directorios enteros o archivos específicos.
                • Extensible: Opciones para personalización, incluido el almacenamiento local y la subida a Imgur.

                Inicio rápido

                1. Descarga spectro en un directorio dentro de tu PATH, por ejemplo, ~/bin.
                2. Otorga permisos de ejecución: chmod +x spectro.

                Para una guía completa de instalación, lee la documentación completa.

                Uso

                Generar BBCode para un directorio completo:

                spectro Path/To/Directory/
                +

                Salida:

                [hide=Spectrograms][size=3]
                +[url=https://i.imgur.com/ClzzbP8.png]01. Jardin Du Sommeil.flac[/url]
                +[/size][/hide]
                +

                Generar BBCode para archivos específicos:

                spectro archivo1.flac archivo2.mp3
                +

                Opciones adicionales y configuraciones están disponibles. Consulta spectro --help:

                Usage: spectro [options] <audio_files>
                +Generate BBCode-formatted spectrograms from audio files.
                +
                +Options:
                +    -c, --compare     Create a .gif comparison of spectrograms (requires ImageMagick)
                +    -d, --double      Create both zoomed and full spectrograms
                +    -h, --help        Display this help and exit
                +    -l, --local       Save spectrograms locally
                +    -o, --optipng     Reverse optipng setting
                +    -p, --parallel    Compatible with 'parallel'
                +    -q, --quiet       Suppress 'Uploading' text
                +    -s, --sha         Display SHA value
                +    -t, --text        Use [url] or [img] tags
                +    -z, --zoom        Create zoomed-in spectrogram
                +
                +Examples:
                +    spectro -ol DirectoryWithMusic/
                +    printf "[hide=Spectrograms][size=3]" && ls | parallel -k spectro -p; printf "[/size][/hide]"
                +
                \ 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..f73c40dfa --- /dev/null +++ b/es/projects/tabi/index.html @@ -0,0 +1 @@ +~/tabi • tabi

                tabi

                  tabi es un tema moderno y rico en funcionalidad para Zola, un generador de sitios web estáticos muy rápido.

                  Modos claro y oscuro de tabi

                  Ver en GitHub

                  Características

                  Prácticas de desarrollo

                  • Conventional Commits y Gitmoji: los mensajes de commit siguen formatos estandarizados para mejorar la legibilidad.

                  • Seguimiento de problemas: cada error o nueva funcionalidad tiene su propio ticket, que se vincula a los commits de código y PRs o problemas relacionados.

                  • Comentarios detallados: los tickets se documentan con imágenes, vídeos y descripciones detalladas para facilitar una comunicación y resolución de problemas efectivas.

                  • Referencias cruzadas: enlazamos todos los tickets con los commits de código, pull requests o problemas relacionados para una rastreabilidad completa.

                  Evolución del proyecto

                  tabi nació como diseño para mi sitio personal, osc.garden. A pesar de sus raíces personales, desde el principio se implementaron buenas prácticas para asegurar la calidad y mantenibilidad. Desde entonces, el tema ha logrado atraer a una comunidad activa de contribuyentes en GitHub.

                  Empieza tu aventura escribiendo con tabi

                  Tienes algo que decir. Tal vez se trate de cómo los lingüistas aún no han acordado una definición de "palabra", o sobre tu experiencia explorando los diferentes palos del flamenco, o de cómo lograste resolver un fallo de un proyecto de código abierto popular.

                  tabi te ofrece la base ideal para tu espacio de escritura, permitiéndote centrarte en tus palabras mientras Zola y tabi se encargan del aspecto técnicos. Sumérgete en el mundo de los blogs con un sistema que hace que cada publicación sea un placer escribir y leer. Tu voz tiene valor; compártela con el mundo.

                  \ 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..8bd2af9ec --- /dev/null +++ b/es/tags/funcionalidad/atom.xml @@ -0,0 +1,114 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/funcionalidad/atom.xml + + ¿Lost in Translation? Explora las capacidades multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/faq-languages/ + Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones. + + + 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-09-01T00: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-09-01T00: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-09-08T00: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..9a66be310 --- /dev/null +++ b/es/tags/funcionalidad/index.html @@ -0,0 +1 @@ +~/tabi • funcionalidad

                  funcionalidad

                  12 September 2023

                  ¿Lost in Translation? Explora las capacidades multilingües de tabi

                  Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones.

                  Read more →
                  09 August 2023

                  Personaliza el color de tabi y el tema predeterminado

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

                  Read more →
                  14 July 2023

                  Añade comentarios a tus publicaciones con estas 4 plataformas

                  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.

                  Read more →
                  29 April 2023

                  Optimiza la carga con un subconjunto de fuente personalizado

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

                  Read more →
                  22 February 2023

                  Seguro por defecto

                  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.

                  Read more →
                  19 February 2023

                  Shortcodes personalizados

                  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.

                  Read more →
                  31 January 2023

                  Ejemplos de 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.

                  Read more →
                  06 January 2023

                  Sin JavaScript obligatorio

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

                  Read more →
                  01 November 2022

                  Tabla de contenido

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

                  Read more →
                  \ No newline at end of file diff --git a/es/tags/index.html b/es/tags/index.html new file mode 100644 index 000000000..dd7e2d8b9 --- /dev/null +++ b/es/tags/index.html @@ -0,0 +1 @@ +~/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..19d5bb9da --- /dev/null +++ b/es/tags/markdown/atom.xml @@ -0,0 +1,37 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita 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-09-08T00: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-09-01T00: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-09-08T00: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..0b690f2a9 --- /dev/null +++ b/es/tags/markdown/index.html @@ -0,0 +1 @@ +~/tabi • markdown

                  markdown

                  31 January 2023

                  Ejemplos de 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.

                  Read more →
                  01 November 2022

                  Tabla de contenido

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

                  Read more →
                  \ No newline at end of file diff --git a/es/tags/preguntas-frecuentes/atom.xml b/es/tags/preguntas-frecuentes/atom.xml new file mode 100644 index 000000000..4efbc7a68 --- /dev/null +++ b/es/tags/preguntas-frecuentes/atom.xml @@ -0,0 +1,26 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita la web + Publicaciones recientes + ~/tabi - Preguntas Frecuentes + tabi es un tema de Zola rápido, liviano y moderno con JavaScript opcional y una puntuación perfecta en Lighthouse. + + + Zola + 2023-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/preguntas-frecuentes/atom.xml + + ¿Lost in Translation? Explora las capacidades multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/faq-languages/ + Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones. + + diff --git a/es/tags/preguntas-frecuentes/index.html b/es/tags/preguntas-frecuentes/index.html new file mode 100644 index 000000000..f378c016e --- /dev/null +++ b/es/tags/preguntas-frecuentes/index.html @@ -0,0 +1 @@ +~/tabi • Preguntas Frecuentes

                  Preguntas Frecuentes

                  12 September 2023

                  ¿Lost in Translation? Explora las capacidades multilingües de tabi

                  Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones.

                  Read more →
                  \ 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..b127b1402 --- /dev/null +++ b/es/tags/seguridad/atom.xml @@ -0,0 +1,26 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita 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..862bf9e9d --- /dev/null +++ b/es/tags/seguridad/index.html @@ -0,0 +1 @@ +~/tabi • seguridad

                  seguridad

                  22 February 2023

                  Seguro por defecto

                  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.

                  Read more →
                  \ 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..b805104c6 --- /dev/null +++ b/es/tags/shortcodes/atom.xml @@ -0,0 +1,26 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita 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..bc652d3ac --- /dev/null +++ b/es/tags/shortcodes/index.html @@ -0,0 +1 @@ +~/tabi • shortcodes

                  shortcodes

                  19 February 2023

                  Shortcodes personalizados

                  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.

                  Read more →
                  \ 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..b084c4b17 --- /dev/null +++ b/es/tags/tutorial/atom.xml @@ -0,0 +1,81 @@ + + + + + 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 About Feeds para aprender más y empezar. Es gratis. + Visita 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-09-12T00:00:00+00:00 + https://welpo.github.io/tabi/es/tags/tutorial/atom.xml + + ¿Lost in Translation? Explora las capacidades multilingües de tabi + 2023-09-12T00:00:00+00:00 + 2023-09-12T00:00:00+00:00 + + welpo + + + https://welpo.github.io/tabi/es/blog/faq-languages/ + Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones. + + + 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-09-01T00: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-09-08T00: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..1f9f4b054 --- /dev/null +++ b/es/tags/tutorial/index.html @@ -0,0 +1 @@ +~/tabi • tutorial

                  tutorial

                  12 September 2023

                  ¿Lost in Translation? Explora las capacidades multilingües de tabi

                  Descubre cómo tabi te ayuda a conectar con una audiencia global gracias a sus funciones multilingües. Aprende a cambiar el idioma por defecto, añadir más idiomas y aportar tus propias traducciones.

                  Read more →
                  09 August 2023

                  Personaliza el color de tabi y el tema predeterminado

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

                  Read more →
                  14 July 2023

                  Añade comentarios a tus publicaciones con estas 4 plataformas

                  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.

                  Read more →
                  29 April 2023

                  Optimiza la carga con un subconjunto de fuente personalizado

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

                  Read more →
                  06 January 2023

                  Sin JavaScript obligatorio

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

                  Read more →
                  01 November 2022

                  Tabla de contenido

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

                  Read more →
                  \ No newline at end of file diff --git a/feed_style.xsl b/feed_style.xsl new file mode 100644 index 000000000..a53c20dfd --- /dev/null +++ b/feed_style.xsl @@ -0,0 +1,83 @@ + + + + + + + + <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 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