{%- import 'macros/content_renderer.html' as content_renderer with context -%} {%- import 'macros/getters.html' as get with context -%} {%- macro render(url, content, lang, attr = None, title = None) -%} {%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor) parse_url(url, lang) -%} {%- set ns = namespace(relation=None, fullurl=parsedurl) -%} {%- if anchor -%} {%- set ns.fullurl = [parsedurl, anchor]|join('#') -%} {%- endif -%} {%- if is_external -%} {%- set ns.relation = "external" -%} {%- else -%} {%- set ns.relation = "internal" -%} {%- endif -%} {%- set target = config.theme.link_target[ns.relation] -%} {%- if content is string or content is none -%} {%- if content is string and content|length -%} {{ content|e }} {%- else -%} {%- if reftype == "tag" -%} {{ tagcattitle|e }} {%- elif reftype == "slug" -%} {{ refpage.title|e }} {%- endif -%} {%- endif -%} {%- else -%} {{ content_renderer.render_blocks_or_inlines(content, lang) }} {%- endif -%} {%- endcall -%} {%- endmacro -%} {#- returns: (url, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor)-#} {%- macro parse_url(rawurl, lang) -%} {%- set urlsplit = rawurl.split('#') -%} {%- set ns = namespace(anchor=urlsplit[1]|d(None), url=None, page=None, tagcattitle=None, tagcatcolor=None, tagpage=None, reftype=None, refid=None, reflang=None, is_external = False) -%} {%- set urlwoa = urlsplit[0] -%} {#- url without ns.anchor -#} {%- if not urlwoa|length -%} {{- caller("", ns.anchor, lang, False, None, None, None, None, None) -}} {%- else -%} {%- set components = urlwoa.split(':') -%} {%- if components|length == 1 -%} {%- set ns.url = ['https://', urlwoa]|join('') -%} {{- caller(ns.url, ns.anchor, lang, True, None, None, None, None, None) -}} {%- else -%} {%- set ns.reftype = components[0] -%} {%- set ns.refid = components[1] -%} {%- set ns.reflang = components[2]|d(lang) -%} {%- if ns.reftype == "slug" -%} {%- call(page) get.page_by_slug(ns.refid, ns.reflang) -%} {%- set ns.url = [siteurl, page.url]|join('/') -%} {%- set ns.page = page -%} {%- call(tagcattitle, tagcatcolor, caturl, catpage, catpages) get.tag_by_name(page.category, ns.reflang) -%} {%- set ns.tagcattitle = tagcattitle -%} {%- set ns.tagcatcolor = tagcatcolor -%} {%- endcall -%} {%- endcall -%} {%- if 'link' in ns.page.metadata -%} {%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor) parse_url(ns.page.metadata['link'], ns.reflang) -%} {%- set ns.url = parsedurl -%} {%- set ns.anchor = anchor -%} {%- set ns.reflang = reflang -%} {%- set ns.is_external = is_external -%} {%- if not is_external -%} {%- set ns.reftype = reftype -%} {%- set ns.refid = refid -%} {%- set ns.page = refpage -%} {%- set ns.tagcattitle = tagcattitle -%} {%- set ns.tagcatcolor = tagcatcolor -%} {%- endif -%} {%- endcall -%} {%- endif -%} {{- caller(ns.url, ns.anchor, ns.reflang, ns.is_external, ns.reftype, ns.refid, ns.page, ns.tagcattitle, ns.tagcatcolor) -}} {%- elif ns.reftype == "tag" -%} {%- call(tagcattitle, tagcatcolor, tagurl, tagpage, tagpages) get.tag_by_name(ns.refid, ns.reflang) -%} {%- set ns.url = [siteurl, tagurl]|join('/') -%} {%- set ns.tagcattitle = tagcattitle -%} {%- set ns.tagcatcolor = tagcatcolor -%} {%- set ns.tagpage = tagpage -%} {%- endcall -%} {{- caller(ns.url, ns.anchor, ns.reflang, False, ns.reftype, ns.refid, ns.tagpage, ns.tagcattitle, ns.tagcatcolor) -}} {%- else -%} {{- caller(urlwoa, ns.anchor, ns.reflang, True, None, None, None, None, None) -}} {%- endif -%} {%- endif -%} {%- endif -%} {%- endmacro -%}