You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.7 KiB
HTML
69 lines
2.7 KiB
HTML
{#
|
|
Evaluates the priority of a particular setting across different scopes.
|
|
|
|
The priority is as follows: page > section > config.
|
|
|
|
Parameters:
|
|
- setting: The name of the setting to evaluate.
|
|
- page: The page object containing settings.
|
|
- default_global_value: The setting's default value.
|
|
#}
|
|
|
|
{% macro evaluate_setting_priority(setting, page, section="", default_global_value="") %}
|
|
|
|
{%- if section -%}
|
|
{%- set current_section = section -%}
|
|
{%- elif page -%}
|
|
{%- set current_section = "" -%}
|
|
{#- Retrieve last ancestor to determine current section, if applicable -#}
|
|
{%- if page.ancestors | length > 0 -%}
|
|
{%- set last_ancestor = page.ancestors | slice(start=-1) -%}
|
|
{%- set_global current_section = get_section(path=last_ancestor.0, metadata_only=true) -%}
|
|
{%- else -%}
|
|
{#- We're likely in a nested page. Try to find the parent page or nearest section. -#}
|
|
{%- set components = page.components -%}
|
|
{%- for i in range(start=1, end=components | length) -%}
|
|
{%- if lang == config.default_language -%}
|
|
{%- set potential_path = components | slice(end=components | length - i) | join(sep="/") -%}
|
|
{%- set potential_page = potential_path ~ "/index.md" -%}
|
|
{%- set potential_section = potential_path ~ "/_index.md" -%}
|
|
{%- else -%}
|
|
{%- set potential_path = components | slice(start=1, end=components | length - i) | join(sep="/") -%}
|
|
{%- set potential_page = potential_path ~ "/index." ~ lang ~ ".md" -%}
|
|
{%- set potential_section = potential_path ~ "/_index." ~ lang ~ ".md" -%}
|
|
{%- endif -%}
|
|
{#- Check for parent page first. -#}
|
|
{%- set page_data = load_data(path=potential_page, required=false) -%}
|
|
{%- if page_data -%}
|
|
{%- set_global current_section = get_page(path=potential_page) -%}
|
|
{%- break -%}
|
|
{%- endif -%}
|
|
{#- No parent page, check for section. -#}
|
|
{%- set section_data = load_data(path=potential_section, required=false) -%}
|
|
{%- if section_data -%}
|
|
{%- set_global current_section = get_section(path=potential_section, metadata_only=true) -%}
|
|
{%- break -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
|
|
{%- set priority_order = [
|
|
page.extra[setting] | default(value=""),
|
|
current_section.extra[setting] | default(value=""),
|
|
config.extra[setting] | default(value="")
|
|
] -%}
|
|
|
|
{%- set output = default_global_value -%}
|
|
|
|
{%- for value in priority_order -%}
|
|
{%- if value != "" -%}
|
|
{%- set_global output = value -%}
|
|
{%- break -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
|
|
{{- output -}}
|
|
|
|
{% endmacro %}
|