{# Those macros deal with introduction and navigation for series pages. Using macros have been prefered over partial inclusion or inline code to make sure series_ordered_pages is forced to be used. A section's pages natural order is invalid in case of reversed pagination which would lead to invalid series' pages order. To prevent this, pages are ordered correctly in a separate variable which must be used instead of the series section pages. #} {# Computes the introduction of a series's page. Parameters: - `page`: The page object being part of the series. - `series_section`: The series' section the page belongs to. - `series_ordered_pages`: The series' pages properly ordered (see at the top of this file for an explanation). - `language_strings`: A dictionary containing the translation strings. #} {% macro get_introduction(page, series_section, series_ordered_pages, language_strings) %} {%- if "series" in series_section.extra and series_section.extra.series -%} {%- set allowed_series_page_introduction = ["none", "link", "summary", "custom"] -%} {%- set series_page_introduction = macros_settings::evaluate_setting_priority(setting="series_page_introduction", page=page, section=series_section, default_global_value="link") -%} {%- if series_page_introduction not in allowed_series_page_introduction -%} {{ throw(message="ERROR: Invalid value for series_page_description. Allowed values are 'none', 'link', 'summary' or 'custom' (defaults to 'link').") }} {%- endif -%} {# Prepare variables for substitution #} {%- set series_title = series_section.title -%} {%- set series_permalink = series_section.permalink -%} {%- set series_html_link = '' ~ series_section.title ~ '' -%} {%- set series_pages_list = [] -%} {%- set series_pages_number = 0 -%} {%- set series_page_index = 0 -%} {%- for series_page in series_ordered_pages -%} {%- set_global series_pages_number = series_pages_number + 1 -%} {%- if series_page.relative_path == page.relative_path -%} {%- set_global series_page_index = series_pages_number -%} {%- set series_pages_list_item = '
  • ' ~ series_page.title ~ '
  • ' -%} {%- else -%} {%- set series_pages_list_item = '
  • ' ~ series_page.title ~ '
  • ' -%} {%- endif -%} {%- set_global series_pages_list = series_pages_list | concat(with=series_pages_list_item) -%} {%- endfor -%} {%- set series_pages_number = series_pages_number | as_str -%} {%- set series_page_index = series_page_index | as_str -%} {%- set series_pages_list = series_pages_list | join(sep="") -%} {%- if macros_settings::evaluate_setting_priority(setting="post_listing_index_reversed", page=series_section, default_global_value=false) == "true" -%} {%- set series_pages_ordered_list = '
      ' ~ series_pages_list ~ '
    ' -%} {%- else -%} {%- set series_pages_ordered_list = '
      ' ~ series_pages_list ~ '
    ' -%} {%- endif -%} {%- set series_pages_unordered_list = '' -%} {# Define headline #} {%- set series_page_headline = macros_translate::translate(key="series_page_headline", default="This article is part of the series: $SERIES_HTML_LINK", language_strings=language_strings) -%} {%- set series_page_headline = series_section.extra.series_page_headline | default(value=series_page_headline) -%} {%- set series_page_headline = series_page_headline | replace(from="$SERIES_TITLE", to=series_title) | replace(from="$SERIES_PERMALINK", to=series_permalink) | replace(from="$SERIES_HTML_LINK", to=series_html_link) -%} {%- set series_page_headline = series_page_headline | replace(from="$SERIES_PAGES_NUMBER", to=series_pages_number) | replace(from="$SERIES_PAGE_INDEX", to=series_page_index) | replace(from="$SERIES_PAGES_OLIST", to=series_pages_ordered_list) | replace(from="$SERIES_PAGES_ULIST", to=series_pages_unordered_list) -%} {# Define description #} {%- set series_page_description = series_section.extra.series_page_description | default(value=series_section.description) -%} {%- set series_page_description = series_page_description | replace(from="$SERIES_TITLE", to=series_title) | replace(from="$SERIES_PERMALINK", to=series_permalink) | replace(from="$SERIES_HTML_LINK", to=series_html_link) -%} {%- set series_page_description = series_page_description | replace(from="$SERIES_PAGES_NUMBER", to=series_pages_number) | replace(from="$SERIES_PAGE_INDEX", to=series_page_index) | replace(from="$SERIES_PAGES_OLIST", to=series_pages_ordered_list) | replace(from="$SERIES_PAGES_ULIST", to=series_pages_unordered_list) -%} {# Replace introduction custom placeholders #} {%- if series_section.extra.series_page_introduction_placeholders is defined -%} {%- set missing_vars = [] -%} {%- for placeholder in series_section.extra.series_page_introduction_placeholders -%} {%- if placeholder in series_page_headline or placeholder in series_page_description -%} {# Attempt to retrieve the corresponding variable by trimming the $ sign and converting to lowercase #} {%- set var_name = placeholder | replace(from="$", to="") | lower -%} {%- if page.extra.series_page_introduction_variables[var_name] -%} {%- set_global series_page_headline = series_page_headline | replace(from=placeholder, to=page.extra.series_page_introduction_variables[var_name]) -%} {%- set_global series_page_description = series_page_description | replace(from=placeholder, to=page.extra.series_page_introduction_variables[var_name]) -%} {%- else -%} {# 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 this page's series introduction (`series_page_introduction_placeholders`) but have not been set in the `series_page_introduction_variables` of this page: " ~ missing_vars_str) }} {%- endif -%} {%- endif -%} {%- if series_page_introduction == "link" -%}

    {{ series_page_headline | markdown | safe }}

    {%- elif series_page_introduction == "summary" -%}
    {{ series_page_headline | markdown | replace(from="

    ", to="") | safe }}

    {{ series_page_description | markdown | safe }}
    {%- elif series_page_introduction == "custom" -%}
    {{ series_page_description | markdown | safe }}
    {%- endif -%} {%- endif -%} {% endmacro %} {# Computes the series navigation of a series's page. Parameters: - `page`: The page object being part of the series. - `series_section`: The series' section the page belongs to. - `series_ordered_pages`: The series' pages properly ordered (see at the top of this file for an explanation). - `language_strings`: A dictionary containing the translation strings. #} {% macro get_navigation(page, series_section, series_ordered_pages, language_strings) %} {%- if macros_settings::evaluate_setting_priority(setting="show_previous_next_series_article_links", page=page, default_global_value=false) == "true" -%} {%- if series_ordered_pages | length > 1 -%} {% set next_series_label = macros_translate::translate(key="next_series", default="Next (series)", language_strings=language_strings) %} {% set prev_series_label = macros_translate::translate(key="prev_series", default="Prev (series)", language_strings=language_strings) %} {% set is_previous = true %} {% set is_next = false %} {%- for series_page in series_ordered_pages -%} {%- if series_page.relative_path == page.relative_path -%} {%- set_global is_previous = false -%} {%- set_global is_next = true -%} {%- else -%} {%- if is_previous -%} {%- set_global prev_series_page = series_page -%} {%- endif -%} {%- if is_next -%} {%- set_global next_series_page = series_page -%} {%- set_global is_next = false-%} {%- endif -%} {%- endif -%} {%- endfor -%} {% if macros_settings::evaluate_setting_priority(setting="invert_previous_next_article_links", page=page, default_global_value=true) == "true" %} {% if prev_series_page %} {% set left_series_link = prev_series_page.permalink %} {% set left_series_label = prev_series_label %} {% set left_series_title = prev_series_page.title %} {% endif %} {% if next_series_page %} {% set right_series_link = next_series_page.permalink %} {% set right_series_label = next_series_label %} {% set right_series_title = next_series_page.title %} {% endif %} {% else %} {% if next_series_page %} {% set left_series_link = next_series_page.permalink %} {% set left_series_label = next_series_label %} {% set left_series_title = next_series_page.title %} {% endif %} {% if prev_series_page %} {% set right_series_link = prev_series_page.permalink %} {% set right_series_label = prev_series_label %} {% set right_series_title = prev_series_page.title %} {% endif %} {% endif %} {% if macros_settings::evaluate_setting_priority(setting="previous_next_article_links_full_width", page=page, default_global_value=true) == "true" %} {%- set full_width_class = "full-width" -%} {% endif %} {%- endif -%} {%- endif -%} {% endmacro %}