{#- ############################# SPAN #################################### -#} {%- macro encoded_span(content) -%} {%- set shysplit = content.split('­')-%} {%- for curshy in shysplit -%} {%- if not loop.first -%} ­ {%- endif -%} {%- set nbspsplit = curshy.split(' ')-%} {%- for curnbsp in nbspsplit -%} {%- if not loop.first -%}   {%- endif -%} {{ curnbsp|e }} {%- endfor -%} {%- 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 -%}
{{ caller() }}
{%- 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, url, relation) 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) }} {%- elif obj -%} {{ encoded_span(obj.title) }} {%- else -%} {{ encoded_span(url) }} {%- 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, rel=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 -%} {%- if ns.objtype == "slug" -%} {%- set ns.rel = ns.obj.link.rel -%} {%- endif -%} {%- set target = config.link_target[ns.relation] -%} {{- caller(ns.objtype, ns.obj,ns.url,ns.relation) -}} {%- 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 -%}