From a2ea06d513a5802964f8f0ef5795cec7e548ed7b Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sat, 13 Sep 2025 14:55:15 -0600 Subject: Squashed 'themes/tabi-lean/' content from commit 95c8796 git-subtree-dir: themes/tabi-lean git-subtree-split: 95c879696445ede40daa7a30a88dae5dd74d5c0c --- templates/partials/analytics.html | 38 +++++ templates/partials/cards_pages.html | 46 ++++++ templates/partials/comments.html | 95 +++++++++++++ templates/partials/content_security_policy.html | 119 ++++++++++++++++ templates/partials/copyright.html | 39 +++++ templates/partials/extra_features.html | 88 ++++++++++++ templates/partials/filter_card_tags.html | 35 +++++ templates/partials/footer.html | 127 +++++++++++++++++ templates/partials/hcard.html | 75 ++++++++++ templates/partials/hcard_small.html | 26 ++++ templates/partials/header.html | 182 ++++++++++++++++++++++++ templates/partials/history_url.html | 26 ++++ templates/partials/home_banner.html | 20 +++ templates/partials/iine_button.html | 33 +++++ templates/partials/language_switcher.html | 38 +++++ templates/partials/main_page_posts_list.html | 61 ++++++++ templates/partials/main_page_projects_list.html | 16 +++ templates/partials/multilingual_tags.html | 29 ++++ templates/partials/nav.html | 60 ++++++++ templates/partials/paginate.html | 27 ++++ templates/partials/search_modal.html | 31 ++++ templates/partials/social_media_images.html | 50 +++++++ templates/partials/theme_switcher.html | 31 ++++ templates/partials/title.html | 40 ++++++ templates/partials/webmentions.html | 51 +++++++ 25 files changed, 1383 insertions(+) create mode 100644 templates/partials/analytics.html create mode 100644 templates/partials/cards_pages.html create mode 100644 templates/partials/comments.html create mode 100644 templates/partials/content_security_policy.html create mode 100644 templates/partials/copyright.html create mode 100644 templates/partials/extra_features.html create mode 100644 templates/partials/filter_card_tags.html create mode 100644 templates/partials/footer.html create mode 100644 templates/partials/hcard.html create mode 100644 templates/partials/hcard_small.html create mode 100644 templates/partials/header.html create mode 100644 templates/partials/history_url.html create mode 100644 templates/partials/home_banner.html create mode 100644 templates/partials/iine_button.html create mode 100644 templates/partials/language_switcher.html create mode 100644 templates/partials/main_page_posts_list.html create mode 100644 templates/partials/main_page_projects_list.html create mode 100644 templates/partials/multilingual_tags.html create mode 100644 templates/partials/nav.html create mode 100644 templates/partials/paginate.html create mode 100644 templates/partials/search_modal.html create mode 100644 templates/partials/social_media_images.html create mode 100644 templates/partials/theme_switcher.html create mode 100644 templates/partials/title.html create mode 100644 templates/partials/webmentions.html (limited to 'templates/partials') diff --git a/templates/partials/analytics.html b/templates/partials/analytics.html new file mode 100644 index 0000000..6a5d30e --- /dev/null +++ b/templates/partials/analytics.html @@ -0,0 +1,38 @@ +{% set analytics_service = config.extra.analytics.service %} +{% set analytics_id = config.extra.analytics.id | default(value="") %} +{% set self_hosted_url = config.extra.analytics.self_hosted_url | default(value="") %} + +{% if analytics_service == "goatcounter" %} + {# Prevent non-demo sites from using the demo analytics account #} + {% if self_hosted_url == "https://tabi-stats.osc.garden" and config.base_url == "https://welpo.github.io/tabi" or self_hosted_url != "https://tabi-stats.osc.garden" %} + + {% endif %} + +{% elif analytics_service == "umami" %} + + + {% elif analytics_service == "plausible" %} + + +{% endif %} diff --git a/templates/partials/cards_pages.html b/templates/partials/cards_pages.html new file mode 100644 index 0000000..89bdabc --- /dev/null +++ b/templates/partials/cards_pages.html @@ -0,0 +1,46 @@ +{%- set rel_attributes = macros_rel_attributes::rel_attributes() | trim -%} +{%- set max_projects = max_projects | default(value=999999) -%} +
+ {%- for page in show_pages %} + {# Used only in main page #} + {% if loop.index > max_projects %} + {% break %} + {% endif %} + {# Determine which URL to use, default is page.permalink #} + {%- set blank_target = macros_target_attribute::target_attribute(new_tab=config.markdown.external_links_target_blank and page.extra.link_to) -%} + + {% set target_url = page.extra.link_to | default(value=page.permalink) %} + + + {% if page.extra.local_image %} + {% set meta = get_image_metadata(path=page.extra.local_image, allow_missing=true) %} + {{ page.extra.local_image }} + {% elif page.extra.remote_image %} + {{ page.extra.remote_image }} + {% else %} +
+ {% endif %} + +
+

{{ page.title | markdown(inline=true) | safe }}

+
+ {% if page.description %} + {{ page.description | markdown(inline=true) | safe }} + {% endif %} +
+
+
+ {% endfor -%} +
diff --git a/templates/partials/comments.html b/templates/partials/comments.html new file mode 100644 index 0000000..1129055 --- /dev/null +++ b/templates/partials/comments.html @@ -0,0 +1,95 @@ +{% set automatic_loading = config.extra[comment_system].automatic_loading %} + +
+ +{% elif comment_system == "utterances" %} + data-repo="{{ config.extra.utterances.repo }}" + {% if config.extra.utterances.issue_term == "slug" %} + data-issue-term="{{ page.slug }}" + {% else %} + data-issue-term="{{ config.extra.utterances.issue_term }}" + {% endif %} + data-label="{{ config.extra.utterances.label }}" + data-light-theme="{{ config.extra.utterances.light_theme }}" + data-dark-theme="{{ config.extra.utterances.dark_theme }}" + data-lazy-loading="{{ config.extra.utterances.lazy_loading }}" + > + +{% elif comment_system == "hyvortalk" %} + data-website-id="{{ config.extra.hyvortalk.website_id }}" + {% if config.extra.hyvortalk.page_id_is_slug %} + data-page-id="{{ page.slug }}" + {% else %} + data-page-id="{{ current_url }}" + {% endif %} + {% if config.extra.hyvortalk.lang %} + data-page-language="{{ config.extra.hyvortalk.lang }}" + {% else %} + data-page-language="{{ lang }}" + {% endif %} + data-page-author="{{ config.extra.hyvortalk.page_author }}" + {% if config.extra.hyvortalk.lazy_loading %} + data-loading="lazy" + {% else %} + data-loading="default" + {% endif %} + > + +{% elif comment_system == "isso" %} + data-endpoint-url="{{ config.extra.isso.endpoint_url }}" + {% if config.extra.isso.page_id_is_slug %} + {%- set default_lang_url = current_path | replace(from='/' ~ lang ~ '/', to = '/') -%} + data-isso-id="{{ default_lang_url }}" + data-title="{{ default_lang_url }}" + {% endif %} + {% if config.extra.isso.lang %} + data-page-language="{{ config.extra.isso.lang }}" + {% else %} + data-page-language="{{ lang }}" + {% endif %} + data-max-comments-top="{{ config.extra.isso.max_comments_top }}" + data-max-comments-nested="{{ config.extra.isso.max_comments_nested }}" + data-avatar="{{ config.extra.isso.avatar }}" + data-voting="{{ config.extra.isso.voting }}" + data-page-author-hashes="{{ config.extra.isso.page_author_hashes }}" + data-lazy-loading="{{ config.extra.isso.lazy_loading }}" + > +{% endif %} + +{% if automatic_loading %} + +{% else %} + + +{% endif %} + + +
diff --git a/templates/partials/content_security_policy.html b/templates/partials/content_security_policy.html new file mode 100644 index 0000000..e8fa062 --- /dev/null +++ b/templates/partials/content_security_policy.html @@ -0,0 +1,119 @@ + diff --git a/templates/partials/copyright.html b/templates/partials/copyright.html new file mode 100644 index 0000000..b9cfc01 --- /dev/null +++ b/templates/partials/copyright.html @@ -0,0 +1,39 @@ +{%- if config.extra.copyright -%} + {% set copyright = config.extra.copyright %} + {# Try to look for a language-specific copyright notice in the new config setup #} + {%- if config.extra.copyright_translations -%} + {%- if lang in config.extra.copyright_translations -%} + {% set copyright = config.extra.copyright_translations[lang] %} + {%- endif -%} + {%- elif config.extra.translate_copyright -%} + {# Old way to translate the copyright through toml files #} + {{ throw(message="ERROR: The 'translate_copyright' feature has been deprecated. Please set 'copyright_translations' in config.toml. See the documentation: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#copyright") }} + {%- endif -%} + + {# Check for missing variables in the notice #} + {% set copyright_placeholders = ["$AUTHOR", "$TITLE"] %} + {% set missing_vars = [] %} + {% for placeholder in copyright_placeholders %} + {% if placeholder in copyright %} + {# Attempt to retrieve the corresponding variable by trimming the $ sign and converting to lowercase #} + {% set var_name = placeholder | replace(from="$", to="") | lower %} + {% if not config[var_name] %} + {# Append the variable name to the list of missing variables #} + {% set_global missing_vars = missing_vars | concat(with=var_name) %} + {% endif %} + {% endif %} + {% endfor %} + + {% if missing_vars | length > 0 %} + {% set missing_vars_str = missing_vars | join(sep=", ") %} + {{ throw(message="ERROR: The following variables are included in `copyright` but have not been set in the config.toml: " ~ missing_vars_str) }} + {% endif %} + + {# At this point, we know that all variables needed defined, so we can safely override the missing ones #} + {% set author = config.author | default(value="") %} + {% set title = config.title | default(value="") %} + + {# Render the copyright notice, replacing the variables #} + {% set current_year = now() | date(format="%Y") %} +

{{ copyright | replace(from="$AUTHOR", to=author) | replace(from="$TITLE", to=title) | replace(from="$CURRENT_YEAR", to=current_year) | replace(from="$SEPARATOR", to=separator) | markdown | safe }}

+{%- endif -%} diff --git a/templates/partials/extra_features.html b/templates/partials/extra_features.html new file mode 100644 index 0000000..50c3337 --- /dev/null +++ b/templates/partials/extra_features.html @@ -0,0 +1,88 @@ +{%- set page_or_section = page | default(value=section) -%} + +{# prepare parameters for evaluate_setting_priority macro #} +{%- set page_s = page | default(value="") -%} +{%- set section_s = section | default(value="") -%} + +{# Quick navigation buttons #} +{% if macros_settings::evaluate_setting_priority(setting="quick_navigation_buttons", page=page_s, section=section_s, default_global_value=false) == "true" %} +
+ {# Button to go show a floating Table of Contents #} + {% if page_or_section.toc %} +
+ + + +
+ {{ macros_toc::toc(page=page_or_section, header=false, language_strings=language_strings) }} +
+
+ {% endif %} + + {# Button to go to the comment/webmentions section #} + {% if comment_system or config.extra.webmentions.enable %} + {%- if comment_system -%} + {#- Comments are shown above webmentions -#} + {%- set comments_id = "comments" -%} + {%- else -%} + {%- set comments_id = "webmentions" -%} + {%- endif -%} + + + + + {% endif %} + + {# Button to go to the top of the page #} + + + +
+{% endif %} + +{# Add KaTeX functionality #} +{%- if macros_settings::evaluate_setting_priority(setting="katex", page=page_s, section=section_s, default_global_value=false) == "true" -%} + + +{%- endif -%} + +{# Load mermaid.js #} +{%- if macros_settings::evaluate_setting_priority(setting="mermaid", page=page_s, section=section_s, default_global_value=false) == "true" -%} + {%- if config.extra.serve_local_mermaid | default(value=true) -%} + + {%- else -%} + + {%- endif -%} +{%- endif -%} + +{# Add copy button to code blocks #} +{%- if macros_settings::evaluate_setting_priority(setting="copy_button", page=page_s, section=section_s, default_global_value=true) == "true" -%} + {#- Add hidden HTML elements with the translated strings for the button's interactions -#} + + + +{%- endif -%} + +{# JavaScript to make code block names clickable when they are URLs: https://welpo.github.io/tabi/blog/shortcodes/#show-source-or-path #} +{# Note: "add_src_to_code_block" is deprecated in favor of "code_block_name_links". It will be removed in a future release. #} +{# See https://github.com/welpo/tabi/pull/489 #} +{%- if macros_settings::evaluate_setting_priority(setting="code_block_name_links", page=page_s, section=section_s, default_global_value=false) == "true" + or macros_settings::evaluate_setting_priority(setting="add_src_to_code_block", page=page_s, section=section_s, default_global_value=false) == "true" -%} + +{%- endif -%} + +{# Add backlinks to footnotes #} +{%- if macros_settings::evaluate_setting_priority(setting="footnote_backlinks", page=page_s, section=section_s, default_global_value=false) == "true" -%} + +{%- endif -%} + +{# Add iine.js for the like button #} +{%- if macros_settings::evaluate_setting_priority(setting="iine", page=page_s, section=section_s, default_global_value=false) == "true" -%} + +{%- endif -%} diff --git a/templates/partials/filter_card_tags.html b/templates/partials/filter_card_tags.html new file mode 100644 index 0000000..d40ec2d --- /dev/null +++ b/templates/partials/filter_card_tags.html @@ -0,0 +1,35 @@ +{#- Collect all terms. -#} +{#- We don't use `get_taxonomy` so users aren't forced to use 'tags' -#} +{% set all_terms = [] %} +{% for page in show_pages %} + {% if page.taxonomies %} + {% for tax_name, terms in page.taxonomies %} + {% for term in terms %} + {% set_global all_terms = all_terms | concat(with=term) %} + {% endfor %} + {% endfor %} + {% endif %} +{% endfor %} + +{#- Display unique terms -#} +{% set unique_terms = all_terms | unique | sort %} +{%- if unique_terms | length >= 2 -%} + + {#- Load the script -#} + +{% endif %} diff --git a/templates/partials/footer.html b/templates/partials/footer.html new file mode 100644 index 0000000..db4bd85 --- /dev/null +++ b/templates/partials/footer.html @@ -0,0 +1,127 @@ +{%- set separator = config.extra.separator | default(value="•") -%} + +{%- set rel_attributes = macros_rel_attributes::rel_attributes() | trim -%} + +{%- set blank_target = macros_target_attribute::target_attribute(new_tab=config.markdown.external_links_target_blank) -%} + +{#- Feed icon -#} +{%- set feed_url = feed_utils::get_feed_url() -%} +{%- set should_show_feed = feed_utils::should_show_footer_feed_icon() == "true" -%} + +{%- set should_show_footer_icons = should_show_feed or config.extra.socials or config.extra.email -%} + + diff --git a/templates/partials/hcard.html b/templates/partials/hcard.html new file mode 100644 index 0000000..6479da6 --- /dev/null +++ b/templates/partials/hcard.html @@ -0,0 +1,75 @@ +{%- set hcard = config.extra.hcard -%} + +{% set full_name = config.author %} +{% if hcard.full_name %} + {% set full_name = hcard.full_name %} +{% endif %} + +{%- set homepage = config.base_url -%} +{% if hcard.homepage %} + {%- set homepage = hcard.homepage -%} +{% endif %} + +{% if hcard.enable %} + +{% endif %} diff --git a/templates/partials/hcard_small.html b/templates/partials/hcard_small.html new file mode 100644 index 0000000..f30add5 --- /dev/null +++ b/templates/partials/hcard_small.html @@ -0,0 +1,26 @@ +{%- set hcard = config.extra.hcard -%} + +{%- set full_name = config.author -%} +{%- if hcard.full_name -%} + {%- set full_name = hcard.full_name -%} +{%- endif -%} + +{%- set homepage = config.base_url -%} +{%- if hcard.homepage -%} + {%- set homepage = hcard.homepage -%} +{%- endif -%} + +{%- set icon_attr = "" -%} +{%- if hcard.avatar -%} + {%- set icon_attr = "author-icon" -%} +{%- endif -%} + + diff --git a/templates/partials/header.html b/templates/partials/header.html new file mode 100644 index 0000000..ada1f23 --- /dev/null +++ b/templates/partials/header.html @@ -0,0 +1,182 @@ + + + + {%- if macros_settings::evaluate_setting_priority(setting="enable_csp", page=page | default(value=""), section=section | default(value=""), default_global_value="true") == "true" -%} + {%- include "partials/content_security_policy.html" -%} + {%- endif -%} + + + + + {# Site title #} + {%- include "partials/title.html" -%} + + {# Favicon #} + {% if config.extra.favicon %} + + {% endif %} + {% if config.extra.favicon_emoji %} + + {% endif %} + + {# Feeds #} + {% if config.generate_feeds | default(value=config.generate_feed) %} + {% if config.feed_filenames %} + {# Zola 0.19 and newer #} + {% for feed in config.feed_filenames %} + {% if feed == "atom.xml" %} + + {% elif feed == "rss.xml" %} + + {% else %} + + {% endif %} + {% endfor %} + {% else %} + {# Older Zola versions #} + {% set feed_url = config.feed_filename | default(value="atom.xml") %} + + {% endif %} + {% endif %} + + {# CSS #} + {# Load subset of glyphs for header. Avoids flashing issue in Firefox #} + {% if config.extra.enable_subset %} + {% if config.extra.custom_subset == true %} + + {% elif lang == 'en' %} + + {% elif lang == 'es' %} + + {% endif %} + {% endif %} + + {# Define array of CSS files to load. main.css is always loaded. #} + {%- set stylesheets = [ "main.css" ] -%} + + {# Load extra CSS files from config.toml #} + {%- if config.extra.stylesheets -%} + {%- set stylesheets = stylesheets | concat(with=config.extra.stylesheets) -%} + {%- endif -%} + + {# Load extra CSS files from page metadata #} + {%- if page.extra.stylesheets -%} + {%- set stylesheets = stylesheets | concat(with=page.extra.stylesheets) -%} + {%- endif -%} + + {# Load extra CSS for custom skin #} + {%- if config.extra.skin -%} + {%- set stylesheets = stylesheets | concat(with='skins/' ~ config.extra.skin ~ '.css') -%} + {%- endif -%} + + {# Load all stylesheets #} + {%- for stylesheet in stylesheets %} + + {%- endfor %} + + + + {%- if config.extra.browser_theme_color and config.extra.browser_theme_color is iterable -%} + {# Handle array values: theme_color[0] for light mode, theme_color[1] for dark mode #} + + + {%- elif config.extra.browser_theme_color -%} + {# Handle single value #} + + {%- endif -%} + + {%- if page.description %} + + + {%- elif section.description %} + + + {%- elif page.summary %} + + + {%- else %} + + + {%- endif %} + + {% if is_404 %} + + {% endif %} + + + + + {# Image for social media sharing #} + {%- include "partials/social_media_images.html" -%} + + {# Add og:locale and hreflang tags for multilingual sites #} + {%- if config.languages | length > 0 and current_url %} + {%- include "partials/multilingual_tags.html" -%} + {%- else -%} + + {%- endif %} + + {# Set canonical URL #} + {%- if current_url -%} + {%- if page.extra.canonical_url or section.extra.canonical_url -%} + {%- set canonical_url = page.extra.canonical_url | default(value=section.extra.canonical_url) -%} + {%- elif config.extra.base_canonical_url -%} + {%- set canonical_url = current_url | replace(from=config.base_url, to=config.extra.base_canonical_url) -%} + {%- endif -%} + {%- endif -%} + + {# Add canonical URL, if set #} + {%- if canonical_url -%} + + + {%- elif current_url -%} + + {%- endif -%} + + + + {%- if config.extra.theme_switcher and config.extra.theme_switcher == true -%} + {# If JavaScript is disabled, hide the button. #} + + + + {%- endif -%} + + {%- if config.extra.analytics.service -%} + {%- include "partials/analytics.html" -%} + {%- endif -%} + + {# Socials #} + {%- if config.extra.fediverse_creator -%} + + {%- endif -%} + + {# Search #} + {%- if config.build_search_index -%} + {%- if config.search.index_format -%} + {%- set search_index_format = config.search.index_format -%} + {%- elif config.extra.index_format -%} + {# Necessary to support Zola 0.17.X, as it doesn't have access to config.search.index_format #} + {# See: https://github.com/getzola/zola/issues/2165 #} + {%- set search_index_format = config.extra.index_format -%} + {%- else -%} + {%- set search_index_format = "elasticlunr_json" -%} + {%- endif -%} + + {%- if search_index_format == "elasticlunr_javascript" -%} + + {%- endif -%} + + {# Main search script #} + + + {# Support correct stemming and stop word filtering in non-English search #} + {%- if lang != "en" -%} + + + {%- endif -%} + {%- endif -%} + + {# Users can optionally provide this template to add content to the head element. #} + {% include "tabi/extend_head.html" ignore missing %} + diff --git a/templates/partials/history_url.html b/templates/partials/history_url.html new file mode 100644 index 0000000..8327ca3 --- /dev/null +++ b/templates/partials/history_url.html @@ -0,0 +1,26 @@ +{%- set relative_path = page.relative_path -%} +{%- set repository_url = config.extra.remote_repository_url | trim_end_matches(pat='/') -%} +{%- set branch = config.extra.remote_repository_branch | default(value="main") -%} +{%- set git_platform = config.extra.remote_repository_git_platform | default(value="auto") -%} + +{# Auto-detect the git platform based on the URL#} +{%- if git_platform == "auto" %} + {%- if repository_url is containing("github.") -%} + {%- set git_platform = "github" -%} + {%- elif repository_url is containing("gitlab.") -%} + {%- set git_platform = "gitlab" -%} + {%- elif repository_url is matching("(gitea\.|codeberg\.)") -%} + {%- set git_platform = "gitea" -%} + {%- endif -%} +{%- endif -%} + +{# Generate the commit history URL based on the git platform #} +{%- if git_platform == "github" -%} + {{ repository_url ~ '/commits/' ~ branch ~ '/content/' }}{{ relative_path | urlencode }} +{%- elif git_platform == "gitlab" -%} + {{ repository_url ~ '/-/commits/' ~ branch ~ '/content/' }}{{ relative_path | urlencode }} +{%- elif git_platform in ["gitea", "codeberg"] -%} + {{ repository_url ~ '/commits/branch/' ~ branch ~ '/content/' }}{{ relative_path | urlencode }} +{%- else -%} + {{ throw(message="ERROR: Unknown, unsupported, or unspecified git platform. If you're using a custom domain, please specify the 'git_platform' in the config. If you think this is a bug, please report it: https://github.com/welpo/tabi/issues/new?assignees=&labels=bug&template=bug_report.md&title=Unsupported%20Git%20Platform%20Detected") }} +{%- endif -%} diff --git a/templates/partials/home_banner.html b/templates/partials/home_banner.html new file mode 100644 index 0000000..353757b --- /dev/null +++ b/templates/partials/home_banner.html @@ -0,0 +1,20 @@ +{%- set header = section.extra.header-%} + diff --git a/templates/partials/iine_button.html b/templates/partials/iine_button.html new file mode 100644 index 0000000..508fd3a --- /dev/null +++ b/templates/partials/iine_button.html @@ -0,0 +1,33 @@ +{% import "macros/settings.html" as macros_settings %} +{%- set button_icon = button_icon | default(value=macros_settings::evaluate_setting_priority(setting="iine_icon", page=page | default(value=""), section=section | default(value=""), default_global_value="heart")) -%} +{%- if config.extra.iine_unified_languages and lang != config.default_language -%} + {%- set unified_slug = page.path | replace(from='/' ~ lang ~ '/', to='/') -%} + {%- set slug = slug | default(value=unified_slug) -%} +{%- else -%} + {%- set slug = slug | default(value=page.path) -%} +{%- endif -%} +{%- if label -%} + {%- set final_label = label -%} +{%- elif language_strings -%} + {%- set final_label = macros_translate::translate(key="like_this_post", default="Like this post", language_strings=language_strings) -%} +{%- else -%} + {%- set final_label = "Like this post" -%} +{%- endif -%} + +{%- if button_icon == "heart" -%} + {%- set icon_display = "♥️" -%} +{%- elif button_icon == "thumbs_up" -%} + {%- set icon_display = "👍" -%} +{%- elif button_icon == "upvote" -%} + {%- set icon_display = "⬆️" -%} +{%- else -%} + {%- set icon_display = button_icon -%} +{%- endif -%} + +
+ + +
diff --git a/templates/partials/language_switcher.html b/templates/partials/language_switcher.html new file mode 100644 index 0000000..83cf61f --- /dev/null +++ b/templates/partials/language_switcher.html @@ -0,0 +1,38 @@ +
  • + +
  • diff --git a/templates/partials/main_page_posts_list.html b/templates/partials/main_page_posts_list.html new file mode 100644 index 0000000..067e178 --- /dev/null +++ b/templates/partials/main_page_posts_list.html @@ -0,0 +1,61 @@ +{%- if paginator or extra_section -%} +
    +
    + {{ macros_page_header::page_header(title=section.title) }} +
    + + {# Check if both paginate_by and section_path are set #} + {%- set both_settings_set = paginator and extra_section -%} + {%- set paginator_has_no_pages = paginator and paginator.pages | length == 0 -%} + {%- set extra_section_has_pages = extra_section and extra_section.pages | length > 0 -%} + + {# Display warning if both settings are set #} + {%- if both_settings_set and paginator_has_no_pages and extra_section_has_pages -%} +
    +
    +
    + WARNING: Conflicting Configuration +

    + No posts are displayed due to conflicting settings in your _index.md: +

    +
      +
    • paginate_by is set, but there are no posts to paginate in the current section.
    • +
    • section_path is set, and posts are available in that section.
    • +
    +

    + Solution: Remove paginate_by from your _index.md. + To limit the number of displayed posts, use max_posts in the [extra] section instead. +

    +
    +
    + {%- endif -%} + + {# Get all posts for pinning if we're in root section with pagination #} + {%- if paginator and is_root_section -%} + {%- set root_section = get_section(path="_index.md") -%} + {%- set all_posts = root_section.pages -%} + {%- set pages = paginator.pages -%} + {%- elif paginator -%} + {%- set all_posts = paginator.pages -%} + {%- set pages = paginator.pages -%} + {%- else -%} + {%- set all_posts = extra_section.pages -%} + {%- set pages = extra_section.pages -%} + {%- endif -%} + + {% set max_posts = section.extra.max_posts | default(value=999999) %} + {{ macros_list_posts::list_posts( + posts=pages, + all_posts=all_posts, + max=max_posts, + language_strings=language_strings, + section_path=extra_section.path | default(value="blog"), + pinned_first=is_root_section, + current_page=paginator.current_index | default(value=1) + ) }} +
    + + {% if paginator and paginator.pages | length > 0 %} + {%- include "partials/paginate.html" -%} + {% endif %} +{%- endif -%} diff --git a/templates/partials/main_page_projects_list.html b/templates/partials/main_page_projects_list.html new file mode 100644 index 0000000..82f0637 --- /dev/null +++ b/templates/partials/main_page_projects_list.html @@ -0,0 +1,16 @@ +{% if section.extra.projects_path %} + {%- set projects_section = get_section(path=section.extra.projects_path) -%} + {%- if projects_section -%} + + {%- set show_pages = projects_section.pages -%} + {%- set max_projects = section.extra.max_projects | default(value=3) -%} + {%- include "partials/cards_pages.html" -%} + {%- endif -%} + {%- if show_pages | length > max_projects -%} +
    + {{ macros_translate::translate(key="all_projects", default="All projects", language_strings=language_strings) }}  +
    + {%- endif -%} +{% endif %} diff --git a/templates/partials/multilingual_tags.html b/templates/partials/multilingual_tags.html new file mode 100644 index 0000000..fe81e6e --- /dev/null +++ b/templates/partials/multilingual_tags.html @@ -0,0 +1,29 @@ +{%- if section.translations -%} + {%- set current_translations = section.translations -%} +{%- elif page.translations -%} + {%- set current_translations = page.translations -%} +{%- endif -%} + +{%- if current_translations -%} + + {%- for translation in current_translations -%} + {%- set lcode = translation.lang | default(value = config.default_language) -%} + + {#- Dynamically load the language strings for each language -#} + {%- set other_language_strings = load_data(path="i18n/" ~ lcode ~ ".toml", required=false) -%} + {%- if not other_language_strings -%} + {%- set other_language_strings = load_data(path="themes/tabi/i18n/" ~ lcode ~ ".toml", required=false) -%} + {%- endif -%} + + + {# Construct href for hreflang #} + {%- set href = translation.permalink -%} + {%- if lcode == config.default_language -%} + {%- set href = href | replace(from='/' ~ lang ~ '/', to = '/') -%} + {%- else -%} + {%- set href = href | replace(from='/' ~ lang ~ '/', to='/' ~ lcode ~ '/') -%} + {%- endif -%} + + {%- endfor -%} + +{%- endif -%} diff --git a/templates/partials/nav.html b/templates/partials/nav.html new file mode 100644 index 0000000..de55151 --- /dev/null +++ b/templates/partials/nav.html @@ -0,0 +1,60 @@ +
    + +
    diff --git a/templates/partials/paginate.html b/templates/partials/paginate.html new file mode 100644 index 0000000..6502af7 --- /dev/null +++ b/templates/partials/paginate.html @@ -0,0 +1,27 @@ +{% if paginator and paginator.number_pagers > 1 %} + +{% endif %} diff --git a/templates/partials/search_modal.html b/templates/partials/search_modal.html new file mode 100644 index 0000000..a3702d2 --- /dev/null +++ b/templates/partials/search_modal.html @@ -0,0 +1,31 @@ + diff --git a/templates/partials/social_media_images.html b/templates/partials/social_media_images.html new file mode 100644 index 0000000..d6bbcc7 --- /dev/null +++ b/templates/partials/social_media_images.html @@ -0,0 +1,50 @@ +{%- set social_media_card = macros_settings::evaluate_setting_priority(setting="social_media_card", page=page | default(value=""), section=section | default(value=""), default_global_value="") -%} +{% if social_media_card %} + {# Get base path from page/section #} + {% set base_path = "" %} + {% if section and section.path %} + {% set base_path = section.path | trim_end_matches(pat="/_index.md") %} + {% if base_path and not social_media_card is starting_with("/") %} + {% set base_path = base_path ~ "/" %} + {% endif %} + {% else %} + {% set base_path = page.colocated_path | default(value="") %} + {% endif %} + + {% set current_path = base_path ~ social_media_card | trim_start_matches(pat="/") %} + + {# Try parent path by removing the last directory component #} + {% set parent_path = base_path | split(pat="/") | slice(end=-2) | join(sep="/") %} + {% if parent_path and not social_media_card is starting_with("/") %} + {% set parent_path = parent_path ~ "/" %} + {% endif %} + {% set parent_relative_path = parent_path ~ social_media_card | trim_start_matches(pat="/") %} + + {# Check all possible locations #} + {%- set current_meta = get_image_metadata(path=current_path, allow_missing=true) -%} + {%- set parent_meta = get_image_metadata(path=parent_relative_path, allow_missing=true) -%} + {%- set absolute_meta = get_image_metadata(path=social_media_card, allow_missing=true) -%} + + {% if current_meta %} + {% set final_path = current_path %} + {% set meta = current_meta %} + {% elif parent_meta %} + {% set final_path = parent_relative_path %} + {% set meta = parent_meta %} + {% elif absolute_meta %} + {% set final_path = social_media_card %} + {% set meta = absolute_meta %} + {% else %} + {{ throw(message="Could not find social media card image. Tried: + 1. Current page path: '" ~ current_path ~ "' + 2. Parent page path: '" ~ parent_relative_path ~ "' + 3. Absolute path: '" ~ social_media_card ~ "' + Please ensure the file exists at one of these locations.") }} + {% endif %} + + + + + + +{% endif %} diff --git a/templates/partials/theme_switcher.html b/templates/partials/theme_switcher.html new file mode 100644 index 0000000..2e30f90 --- /dev/null +++ b/templates/partials/theme_switcher.html @@ -0,0 +1,31 @@ +
  • + {#- Create the localised strings for the title and aria-label attributes -#} + {%- set toggle_str = macros_translate::translate(key='toggle_mode', default='Toggle $MODE mode', language_strings=language_strings) -%} + {%- set dark_str = macros_translate::translate(key='dark', default='dark', language_strings=language_strings) -%} + {%- set light_str = macros_translate::translate(key='light', default='light', language_strings=language_strings) -%} + + {%- set combined_mode_str = dark_str ~ "/" ~ light_str -%} + {%- set title_label = toggle_str | replace(from="$MODE", to=combined_mode_str) -%} + {%- set aria_label = toggle_str | replace(from="$MODE", to=dark_str) -%} + +
    +
    + + {%- set reset_str = macros_translate::translate(key='reset_mode', default='Reset mode to default', language_strings=language_strings) -%} + + + +
  • diff --git a/templates/partials/title.html b/templates/partials/title.html new file mode 100644 index 0000000..de77d73 --- /dev/null +++ b/templates/partials/title.html @@ -0,0 +1,40 @@ +{#- Setup -#} +{% if not config.title %} +{{ throw(message="ERROR: No `title` set in `config.toml`. tabi requires a title to function.") }} +{% endif %} +{%- set prefix = config.title | safe -%} +{%- set custom_separator = config.extra.separator | default(value="•") -%} +{%- set separator = " " ~ custom_separator ~ " " -%} + +{#- Get the base path for the current language -#} +{%- if lang != config.default_language %} + {%- set base_path = "/" ~ lang ~ "/" %} +{%- else -%} + {%- set base_path = "/" %} +{%- endif %} + +{%- if current_path and current_path == base_path -%} + {%- set suffix = "" -%} + {%- set separator = "" -%} +{% elif title %} + {%- set suffix = title -%} +{% elif section.title -%} + {%- set suffix = section.title -%} +{% elif page.title %} + {%- set suffix = page.title -%} +{% elif term.name %} + {#- Individual tags -#} + {%- set suffix = term.name -%} +{% elif taxonomy.name %} + {#- List of tags -#} + {%- set suffix = macros_translate::translate(key=taxonomy.name, language_strings=language_strings) | capitalize -%} +{% else %} + {%- set suffix = "404" %} +{%- endif -%} + +{#- Return the final concatenated string -#} +{%- if config.extra.invert_title_order -%} + {{- suffix ~ separator ~ prefix -}} +{%- else -%} + {{- prefix ~ separator ~ suffix -}} +{%- endif -%} diff --git a/templates/partials/webmentions.html b/templates/partials/webmentions.html new file mode 100644 index 0000000..e579a04 --- /dev/null +++ b/templates/partials/webmentions.html @@ -0,0 +1,51 @@ +{# Incorporate webmention.io links and script into the page head. +1. Provide the link to the webmention data in the at webmention.io. +2. Link to the stylesheet for styling webmentions on a page. +3. Add and configure the javascript to fetch and display the webmentions collected at webmention.io. #} + + + +{# Calculate the configured data for the script, if any #} + +{% set script_data = "" %} + +{% if config.extra.webmentions.id %} +{% set script_data = script_data ~ "data-id=" ~ config.extra.webmentions.id %} +{% endif %} + +{% if config.extra.webmentions.page_url %} +{% set script_data = script_data ~ " data-page-url=" ~ config.extra.webmentions.page_url %} +{% endif %} + +{% if config.extra.webmentions.add_urls %} +{% set script_data = script_data ~ "data-add-urls=" ~ config.extra.webmentions.add_urls %} +{% endif %} + +{% if config.extra.webmentions.wordcount %} +{% set script_data = script_data ~ " data-wordcount=" ~ config.extra.webmentions.wordcount %} +{% endif %} + +{% if config.extra.webmentions.max_webmentions %} +{% set script_data = script_data ~ "data-max-webmentions=" ~ config.extra.webmentions.max_webmentions %} +{% endif %} + +{% if config.extra.webmentions.prevent_spoofing %} +{% set script_data = script_data ~ "data-prevent-spoofing=" ~ config.extra.webmentions.prevent_spoofing %} +{% endif %} + +{% if config.extra.webmentions.sort_by %} +{% set script_data = script_data ~ "data-sort-by=" ~ config.extra.webmentions.sort_by %} +{% endif %} + +{% if config.extra.webmentions.sort_dir %} +{% set script_data = script_data ~ "data-sort-dir=" ~ config.extra.webmentions.sort_dir %} +{% endif %} + +{% if config.extra.webmentions.comments_are_reactions %} +{% set script_data = script_data ~ " data-comments-are-reactions=" ~ config.extra.webmentions.comments_are_reactions %} +{% endif %} + + + +
    -- cgit v1.2.3