From c05a70a79051c5b968fc7afd758c81e9cbf173a4 Mon Sep 17 00:00:00 2001 From: Jake <j.vondoemming@stud.uni-goettingen.de> Date: Sun, 2 Oct 2022 21:54:35 +0200 Subject: [PATCH] some refactoring for easier development of some other features --- theme/templates/base.html | 5 +- theme/templates/index.html | 2 +- theme/templates/macros/cards.html | 4 +- theme/templates/macros/common.html | 51 +++++++++++++++ theme/templates/macros/content_renderer.html | 69 +++++++------------- theme/templates/macros/link.html | 38 ++++++----- theme/templates/macros/nav.html | 2 - theme/templates/macros/renderers.html | 20 +----- theme/templates/page.html | 4 +- theme/templates/tag.html | 2 +- 10 files changed, 105 insertions(+), 92 deletions(-) create mode 100644 theme/templates/macros/common.html diff --git a/theme/templates/base.html b/theme/templates/base.html index afead3a..79ecefc 100644 --- a/theme/templates/base.html +++ b/theme/templates/base.html @@ -1,11 +1,12 @@ <!DOCTYPE html> +{%- import 'macros/common.html' as common with context -%} {%- import 'macros/getters.html' as get with context -%} {%- import 'macros/link.html' as linkr with context -%} +{%- import 'macros/nav.html' as nav with context -%} {%- import 'macros/cards.html' as cards with context -%} -{%- import 'macros/renderers.html' as render with context -%} {%- import 'macros/content_renderer.html' as content_renderer with context -%} -{%- import 'macros/nav.html' as nav with context -%} +{%- import 'macros/renderers.html' as render with context -%} <html lang="{{ l }}" xmlns="http://www.w3.org/1999/xhtml"> <head> diff --git a/theme/templates/index.html b/theme/templates/index.html index 2221724..2ec8668 100644 --- a/theme/templates/index.html +++ b/theme/templates/index.html @@ -7,7 +7,7 @@ {% block page_header %} <header class="visuallyhidden"> - <h1>{{ render.softbreak_span(page.title) }}</h1> + <h1>{{ common.softbreak_span(page.title) }}</h1> </header> <hr> {% endblock %} diff --git a/theme/templates/macros/cards.html b/theme/templates/macros/cards.html index 5e8a4fc..1e53b26 100644 --- a/theme/templates/macros/cards.html +++ b/theme/templates/macros/cards.html @@ -1,5 +1,3 @@ -{%- import 'macros/getters.html' as get with context -%} - {%- macro open(id = None, classes = None) -%} <ul {%- if id %} id="{{ id|e }}"{% endif %} class="cards {%- if classes %}{% for class in classes %} {{ class|e }}{% endfor %}{% endif %}"> @@ -29,7 +27,7 @@ {%- endif -%} {%- for page in pages -%} {%- if max is none or loop.index <= max -%} - {{ cards.card_from_page(page, lang) }} + {{ card_from_page(page, lang) }} {%- endif -%} {%- endfor -%} {%- if standalone -%} diff --git a/theme/templates/macros/common.html b/theme/templates/macros/common.html new file mode 100644 index 0000000..1fdaeb3 --- /dev/null +++ b/theme/templates/macros/common.html @@ -0,0 +1,51 @@ +{%- macro softbreak_span(content) -%} + {%- set contentsplit = content.split('­')-%} + <span> + {%- for s in contentsplit -%} + {%- if not loop.first -%} + ­ + {%- endif -%} + {{ s|e }} + {%- endfor -%} + </span> +{%- endmacro -%} + +{%- 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 -%} + diff --git a/theme/templates/macros/content_renderer.html b/theme/templates/macros/content_renderer.html index 24cfb8a..ba7fa1d 100644 --- a/theme/templates/macros/content_renderer.html +++ b/theme/templates/macros/content_renderer.html @@ -5,43 +5,18 @@ {{ render_blocks(content, lang) }} {%- endmacro -%} -{%- 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'] }}" +{%- macro render_link(link, content, lang, attr = None, title = None) -%} + {%- call(objtype, obj) linkr.render_raw(link, content, lang, attr, title) -%} + {%- if content is string or content is none -%} + {%- if content is string and content|length -%} + {{ common.softbreak_span(content) }} + {%- else -%} + {{ common.softbreak_span(obj.title) }} {%- endif -%} - {%- elif value is string %} {{ key }}="{{ value }}" + {%- else -%} + {{ render_blocks_or_inlines(content, lang) }} {%- 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 -%} + {%- endcall -%} {%- endmacro -%} {%- macro render_orderedlist_type(style, delim) -%} @@ -64,7 +39,7 @@ {%- set ns.url = [siteurl, ns.url]|join("/") -%} {%- endif -%} {%- endif -%} - <img {{ render_attr(attr, lang, extra={"src": ns.url, "title": {"value":title, "escape": true}, "loading": "lazy"}) }} alt=" + <img {{ common.render_attr(attr, lang, extra={"src": ns.url, "title": {"value":title, "escape": true}, "loading": "lazy"}) }} alt=" {%- if alt is string -%} {{ alt|e }} {%- else -%} @@ -134,7 +109,7 @@ {%- set level = block['level'] -%} {%- set attr = block['attr'] -%} {%- set content = block['content'] -%} - <header {{ render_attr(attr, lang) }}> + <header {{ common.render_attr(attr, lang) }}> <h{{ level }}>{{ render_inlines(content, lang) }}</h{{ level }}> </header> {%- endmacro -%} @@ -163,7 +138,7 @@ {%- set attr = block['attr'] -%} {%- set code = block['code'] -%} {%- set code_lines = block['code_lines'] -%} - <pre {{ render_attr(attr, lang, extra_classes=["codeblock"]) }}>{{ code|e }}</pre> + <pre {{ common.render_attr(attr, lang, extra_classes=["codeblock"]) }}>{{ code|e }}</pre> {%- endmacro -%} {%- macro render_block_blockquote(block, lang) -%} @@ -176,7 +151,7 @@ {%- macro render_block_blockcontainer(block, lang) -%} {%- set attr = block['attr'] -%} {%- set content = block['content'] -%} - <div {{ render_attr(attr, lang) }}> + <div {{ common.render_attr(attr, lang) }}> {{ render_blocks(content, lang) }} </div> {%- endmacro -%} @@ -221,7 +196,7 @@ {%- set ns.classes = [alignment_class] -%} {%- endif -%} - <{% if is_header %}th{% else %}td{% endif %} {{ render_attr(attr, lang, extra_classes=ns.classes, extra={"rowspan": row_span, "colspan": column_span}, extra_style=ns.extra_style) }}> + <{% if is_header %}th{% else %}td{% endif %} {{ common.render_attr(attr, lang, extra_classes=ns.classes, extra={"rowspan": row_span, "colspan": column_span}, extra_style=ns.extra_style) }}> {{ render_blocks(content, lang) }} </{% if is_header %}th{% else %}td{% endif %}> {%- endmacro -%} @@ -235,7 +210,7 @@ {%- macro render_block_table_row(row, lang, num_headers, column_specs) -%} {%- set attr = row['attr'] -%} {%- set cells = row['cells'] -%} - <tr {{ render_attr(attr, lang) }}> + <tr {{ common.render_attr(attr, lang) }}> {%- for cell in cells -%} {%- if loop.index <= num_headers or num_headers == -1 -%} {{ render_block_table_cell(cell,lang,is_header=true,column_spec=column_specs[loop.index0]) }} @@ -263,13 +238,13 @@ {#- TODO: Maybe add colgroup? -#} {%- if head.rows|length -%} - <thead {{ render_attr(head.attr, lang) }}> + <thead {{ common.render_attr(head.attr, lang) }}> {{ render_block_table_rows(head.rows,lang,num_headers=-1,column_specs=column_specs) }} </thead> {%- endif -%} {%- for body in bodies -%} - <tbody {{ render_attr(body.attr, lang) }}> + <tbody {{ common.render_attr(body.attr, lang) }}> {%- if body.intermediate_head|length -%} {{ render_block_table_rows(body.intermediate_head,lang,num_headers=-1,column_specs=column_specs) }} {%- endif -%} @@ -279,7 +254,7 @@ {%- if foot.rows|length -%} - <tfoot {{ render_attr(foot.attr, lang) }}> + <tfoot {{ common.render_attr(foot.attr, lang) }}> {{ render_block_table_rows(foot.rows,lang,num_headers=bodies[0].row_head_columns,column_specs=column_specs) }} </tfoot> {%- endif -%} @@ -390,7 +365,7 @@ {%- macro render_inline_inlinecontainer(inline, lang) -%} {%- set attr = inline['attr'] -%} {%- set content = inline['content'] -%} - <span {{ render_attr(attr, lang) }}>{{ render_inlines(content, lang) }}</span> + <span {{ common.render_attr(attr, lang) }}>{{ render_inlines(content, lang) }}</span> {%- endmacro -%} {%- macro render_inline_rawinline(inline, lang) -%} @@ -409,7 +384,7 @@ {%- set attr = inline['attr'] -%} {%- set code = inline['code'] -%} {%- set code_lines = inline['code_lines'] -%} - <code {{ render_attr(attr, lang, extra_classes=["codeinline"]) }}>{{ code|e }}</code> + <code {{ common.render_attr(attr, lang, extra_classes=["codeinline"]) }}>{{ code|e }}</code> {%- endmacro -%} {%- macro render_inline_quoted(inline, lang) -%} @@ -434,7 +409,7 @@ {%- set content = inline['content'] -%} {%- set link = inline['link'] -%} {%- set title = inline['title'] -%} - {{ linkr.render(link, content, lang, attr, title) }} + {{ render_link(link, content, lang, attr, title) }} {%- endmacro -%} {%- macro render_inline_image(inline, lang) -%} diff --git a/theme/templates/macros/link.html b/theme/templates/macros/link.html index 19a4cb4..2d143d7 100644 --- a/theme/templates/macros/link.html +++ b/theme/templates/macros/link.html @@ -1,6 +1,3 @@ -{%- import 'macros/content_renderer.html' as content_renderer with context -%} -{%- import 'macros/renderers.html' as renderm with context -%} - {%- macro resolve(link) -%} {%- set ns = namespace(alias=link, objtype=link.type, obj=None) -%} @@ -30,8 +27,25 @@ {%- macro render(link, content, lang, attr = None, title = None) -%} + {%- call(objtype, obj) render_raw(link, content, lang, attr, title) -%} + {%- if content is string or content is none -%} + {%- if content is string and content|length -%} + {{ common.softbreak_span(content) }} + {%- else -%} + {{ common.softbreak_span(obj.title) }} + {%- endif -%} + {%- else -%} + <strong>ERROR: Cannot render link with formatted content here.</strong> + {%- endif -%} + {%- endcall -%} +{%- endmacro -%} + +{%- macro render_raw(link, content, lang, attr, title) -%} + {%- set ns = namespace(relation=None, url=None, objtype=None, obj=None) -%} {%- call(resolvedlink, objtype, obj) resolve(link) -%} - {%- set ns = namespace(relation=None, url=resolvedlink.urlwithanchor) -%} + {%- set ns.url = resolvedlink.urlwithanchor -%} + {%- set ns.objtype = objtype -%} + {%- set ns.obj = obj -%} {%- if resolvedlink.is_external -%} {%- set ns.relation = "external" -%} {%- else -%} @@ -40,19 +54,11 @@ {%- set ns.url = [siteurl, ns.url]|join("/") -%} {%- endif -%} {%- endif -%} - {%- set target = config.link_target[ns.relation] -%} - <a {{ content_renderer.render_attr(attr, lang, extra_classes=[ns.relation], extra={"href": ns.url, "title": {"value":title, "escape": true}, "target": target}) }}> - {%- if content is string or content is none -%} - {%- if content is string and content|length -%} - {{ renderm.softbreak_span(content) }} - {%- else -%} - {{ renderm.softbreak_span(obj.title) }} - {%- endif -%} - {%- else -%} - {{ content_renderer.render_blocks_or_inlines(content, lang) }} - {%- endif -%} - </a> {%- endcall -%} + {%- set target = config.link_target[ns.relation] -%} + <a {{ common.render_attr(attr, lang, extra_classes=[ns.relation], extra={"href": ns.url, "title": {"value":title, "escape": true}, "target": target}) }}> + {{- caller(ns.objtype, ns.obj) -}} + </a> {%- endmacro -%} {%- macro render_tag(tag, lang) -%} diff --git a/theme/templates/macros/nav.html b/theme/templates/macros/nav.html index f4dd2c0..e01d3e6 100644 --- a/theme/templates/macros/nav.html +++ b/theme/templates/macros/nav.html @@ -1,5 +1,3 @@ -{%- import 'macros/link.html' as linkr with context -%} - {%- macro render_menu(items, lang) -%} <nav> <ul> diff --git a/theme/templates/macros/renderers.html b/theme/templates/macros/renderers.html index a328ffd..7bf4d29 100644 --- a/theme/templates/macros/renderers.html +++ b/theme/templates/macros/renderers.html @@ -1,19 +1,3 @@ -{%- import 'macros/getters.html' as get with context -%} -{%- import 'macros/cards.html' as cards with context -%} -{%- import 'macros/content_renderer.html' as content_renderer with context -%} - -{%- macro softbreak_span(content) -%} - {%- set contentsplit = content.split('­')-%} - <span> - {%- for s in contentsplit -%} - {%- if not loop.first -%} - ­ - {%- endif -%} - {{ s|e }} - {%- endfor -%} - </span> -{%- endmacro -%} - {%- macro section_news(s, lang) -%} {{ cards.cards_from_pages(pages_modified[lang], max=s.num|d(None)) }} @@ -30,7 +14,7 @@ {%- macro section_tag(s, lang) -%} {%- if s.title is not defined -%} <header> - <h2 {% if s.id is defined -%}id="{{ s.id }}"{%- endif %}>{{ softbreak_span(s.tag.title) }}</h2> + <h2 {% if s.id is defined -%}id="{{ s.id }}"{%- endif %}>{{ common.softbreak_span(s.tag.title) }}</h2> </header> {%- endif -%} {{ cards.cards_from_pages(s.tag.pages, lang, max=s.num|d(None)) }} @@ -43,7 +27,7 @@ {%- macro section(s, lang) -%} {%- if s.title is defined -%} <header> - <h2 {% if s.id is defined -%}id="{{ s.id }}"{%- endif %}>{{ softbreak_span(s.title[lang]) }}</h2> + <h2 {% if s.id is defined -%}id="{{ s.id }}"{%- endif %}>{{ common.softbreak_span(s.title[lang]) }}</h2> </header> {%- endif -%} {%- if s.type == "news" -%} diff --git a/theme/templates/page.html b/theme/templates/page.html index cf7e1c9..14f9953 100644 --- a/theme/templates/page.html +++ b/theme/templates/page.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}{{ t[l].title_prefix }}{{ render.softbreak_span(page.title)|striptags }}{{ t[l].title_seperator }}{{ render.softbreak_span(page.category.title)|striptags }}{{ t[l].title_seperator }}{{ t[l].sitename }}{{ t[l].title_suffix }}{% endblock %} +{% block title %}{{ t[l].title_prefix }}{{ common.softbreak_span(page.title)|striptags }}{{ t[l].title_seperator }}{{ common.softbreak_span(page.category.title)|striptags }}{{ t[l].title_seperator }}{{ t[l].sitename }}{{ t[l].title_suffix }}{% endblock %} {% block extra_head %} {% endblock %} @@ -13,7 +13,7 @@ <article> {% block page_header %} <header> - <h1>{{ render.softbreak_span(page.title) }}</h1> + <h1>{{ common.softbreak_span(page.title) }}</h1> </header> {% endblock %} {% block page_content %} diff --git a/theme/templates/tag.html b/theme/templates/tag.html index ddeabb9..1ee3be5 100644 --- a/theme/templates/tag.html +++ b/theme/templates/tag.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}{{ t[l].title_prefix }}{{ render.softbreak_span(tag.title)|striptags }}{{ t[l].title_seperator }}{{ t[l].sitename }}{{ t[l].title_suffix }}{% endblock %} +{% block title %}{{ t[l].title_prefix }}{{ common.softbreak_span(tag.title)|striptags }}{{ t[l].title_seperator }}{{ t[l].sitename }}{{ t[l].title_suffix }}{% endblock %} {% block breadcrumb %} {{ nav.render_breadcrumb_menu(tag, l) }} -- GitLab