{#- ############################# SPAN #################################### -#}
{%- macro encoded_span(content) -%}
{%- set contentsplit = content.split('')-%}
{%- for s in contentsplit -%}
{%- if not loop.first -%}
{%- endif -%}
{{ s|e }}
{%- endfor -%}
{%- endmacro -%}
{#- ############################# ATTR #################################### -#}
{%- macro render_attr_extra(key, value, lang) %}
{%- if value != None -%}
{%- if value is mapping and value['value'] != None -%}
{%- if value['escape'] %} {{ key }}="{{ value['value']|e }}"
{%- else %} {{ key }}="{{ value['value'] }}"
{%- endif -%}
{%- elif value is string %} {{ key }}="{{ value }}"
{%- endif -%}
{%- endif -%}
{%- endmacro -%}
{%- macro render_attr(attr, lang, extra_classes = [], extra = {}, extra_style= {}) -%}
{%- set id = attr['id']|d("") -%}
{%- set classes = attr['classes']|d([]) + extra_classes -%}
{%- set attr_extra = attr['extra']|d({}) -%}
{%- set style = attr['style']|d({}) -%}
{%- if id %} id="{{ id }}"{%- endif -%}
{%- if classes|length %} class="{{ classes|join(' ') }}"{%- endif -%}
{%- for key, value in attr_extra.items() -%}
{%- if key not in extra -%}
{{ render_attr_extra(key, value, lang) }}
{%- endif -%}
{%- endfor -%}
{%- for key, value in extra.items() -%}
{{ render_attr_extra(key, value, lang) }}
{%- endfor -%}
{%- if style.items()|length or extra_style.items()|length %} style="
{%- for key, value in style.items() -%}
{{ key }}: {{ value }};
{%- endfor -%}
{%- for key, value in extra_style.items() -%}
{{ key }}: {{ value }};
{%- endfor -%}"
{%- endif -%}
{%- endmacro -%}
{#- ############################# HEADER ################################## -#}
{%- macro render_header(content, level, attr, lang, visuallyhidden=false, in_footer=false) -%}
{%- call render_header_raw(content, level, attr, lang, visuallyhidden=visuallyhidden, in_footer=in_footer) -%}
{{ encoded_span(content) }}
{%- endcall -%}
{%- endmacro -%}
{%- macro render_header_raw(content, level, attr, lang, visuallyhidden=false, in_footer=false) -%}
{%- set ns = namespace(extra_classes=[], level=level) -%}
{%- if visuallyhidden -%}
{%- set ns.extra_classes = ["visuallyhidden"] -%}
{%- endif -%}
{%- if ns.level < 1 -%}
{%- set ns.level = 1 -%}
{%- elif ns.level > 6 -%}
{%- set ns.level = 6 -%}
{%- endif -%}
{%- if not in_footer -%}
{%- else -%}
{{ caller() }}
{%- endif -%}
{%- endmacro -%}
{#- ############################# LINK #################################### -#}
{%- macro resolve_link(link) -%}
{%- set ns = namespace(alias=link, objtype=link.type, obj=None) -%}
{%- if ns.objtype == "tag" -%}
{%- set ns.obj = link.tag -%}
{%- elif ns.objtype == "slug" -%}
{%- set ns.obj = link.page -%}
{%- elif ns.objtype == "file" -%}
{%- set ns.obj = link.file -%}
{%- endif -%}
{%- if link.alias -%}
{%- call(resolvedlink, objtype, obj) resolve_link(link.alias) -%}
{%- set ns.alias = resolvedlink -%}
{%- if objtype -%}
{%- set ns.objtype = objtype -%}
{%- set ns.obj = obj -%}
{%- endif -%}
{%- endcall -%}
{%- endif -%}
{{- caller(ns.alias, ns.objtype, ns.obj) -}}
{%- endmacro -%}
{%- macro render_link(link, content, lang, attr = None, title = None) -%}
{%- call(objtype, obj) render_link_raw(link, content, lang, attr, title) -%}
{%- if content is string or content is none -%}
{%- if content is string and content|length -%}
{{ encoded_span(content) }}
{%- else -%}
{{ encoded_span(obj.title) }}
{%- endif -%}
{%- else -%}
ERROR: Cannot render link with formatted content here.
{%- endif -%}
{%- endcall -%}
{%- endmacro -%}
{%- macro render_link_raw(link, content, lang, attr, title) -%}
{%- set ns = namespace(relation=None, url=None, objtype=None, obj=None) -%}
{%- call(resolvedlink, objtype, obj) resolve_link(link) -%}
{%- set ns.url = resolvedlink.urlwithanchor -%}
{%- set ns.objtype = objtype -%}
{%- set ns.obj = obj -%}
{%- if resolvedlink.is_external -%}
{%- set ns.relation = "external" -%}
{%- else -%}
{%- set ns.relation = "internal" -%}
{%- if resolvedlink.url|length -%}
{%- set ns.url = [siteurl, ns.url]|join("/") -%}
{%- endif -%}
{%- endif -%}
{%- endcall -%}
{%- set target = config.link_target[ns.relation] -%}
{{- caller(ns.objtype, ns.obj) -}}
{%- endmacro -%}
{%- macro render_link_tag(tag, lang) -%}
{%- set attr = {"classes": ["tag-link"], "style": {"--category-color": tag.color}} -%}
{{ render_link(tag.link,None,lang,attr=attr,title=tag.name) }}
{%- endmacro -%}