Skip to content
Snippets Groups Projects
Verified Commit fa8d16c5 authored by Jake :3's avatar Jake :3 :speech_balloon:
Browse files

render tables

parent bc5cb448
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,7 @@
{%- endif -%}
{%- endmacro -%}
{%- macro render_attr(attr, lang, extra_classes = [], extra = {}) -%}
{%- 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({}) -%}
......@@ -34,9 +34,12 @@
{%- endfor -%}
{%- if style.items()|length %} style="
{%- 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 -%}
......@@ -118,6 +121,8 @@
{{ render_block_rawblock(block, lang) }}
{%- elif etype == "orderedlist" -%}
{{ render_block_orderedlist(block, lang) }}
{%- elif etype == "table" -%}
{{ render_block_table(block, lang) }}
{%- elif etype == "definitionlist" -%}
{{ render_block_definitionlist(block, lang) }}
{%- else -%}
......@@ -196,6 +201,95 @@
{%- endif -%}
{%- endmacro -%}
{%- macro render_block_table_cell(cell, lang, is_header, column_spec) -%}
{%- set attr = cell['attr'] -%}
{%- set cell_alignment = cell['alignment'] -%}
{%- set row_span = cell['row_span'] -%}
{%- set column_span = cell['column_span'] -%}
{%- set content = cell['content'] -%}
{%- set column_alignment = column_spec.alignment -%}
{%- set ns = namespace(alignment=column_alignment,classes=[],extra_style={}) -%}
{%- if cell_alignment != "default" -%}
{%- set ns.alignment=cell_alignment -%}
{%- endif -%}
{%- set alignment_class = ["align", ns.alignment]|join('_') -%}
{%- if column_spec.has_width-%}
{%- set ns.classes = [alignment_class, "has_recommended_width"] -%}
{%- set ns.extra_style = {"--recommended_width": [column_spec.width.percentage, "%"]|join('')} -%}
{#- set ns.extra_style = {"width": [column_spec.width.percentage, "%"]|join('')} -#}
{%- else -%}
{%- 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) }}>
{{ render_blocks(content, lang) }}
</{% if is_header %}th{% else %}td{% endif %}>
{%- endmacro -%}
{%- macro render_block_table_rows(rows, lang, num_headers,column_specs) -%}
{%- for row in rows -%}
{{ render_block_table_row(row,lang,num_headers=num_headers,column_specs=column_specs) }}
{%- endfor -%}
{%- endmacro -%}
{%- macro render_block_table_row(row, lang, num_headers, column_specs) -%}
{%- set attr = row['attr'] -%}
{%- set cells = row['cells'] -%}
<tr {{ 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]) }}
{%- else -%}
{{ render_block_table_cell(cell,lang,is_header=false,column_spec=column_specs[loop.index0]) }}
{%- endif -%}
{%- endfor -%}
</tr>
{%- endmacro -%}
{%- macro render_block_table(block, lang) -%}
{#- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table -#}
{%- set attr = block['attr'] -%}
{%- set caption = block['caption'] -%}
{%- set column_specs = block['column_specs'] -%}
{%- set head = block['head'] -%}
{%- set bodies = block['bodies'] -%}
{%- set foot = block['foot'] -%}
<table>
{%- if caption|length -%}
<caption>{{ render_blocks(caption, lang) }}</caption>
{%- endif -%}
{#- TODO: Maybe add colgroup? -#}
{%- if head.rows|length -%}
<thead {{ 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) }}>
{%- if body.intermediate_head|length -%}
{{ render_block_table_rows(body.intermediate_head,lang,num_headers=-1,column_specs=column_specs) }}
{%- endif -%}
{{ render_block_table_rows(body.intermediate_body,lang,num_headers=body.row_head_columns,column_specs=column_specs) }}
</tbody>
{%- endfor -%}
{%- if foot.rows|length -%}
<tfoot {{ 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 -%}
</table>
{%- endmacro -%}
{%- macro render_block_orderedlist(block, lang) -%}
{%- set items = block['items'] -%}
{%- set count = block['count'] -%}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment