diff --git a/tests/data/html/dynamic_table.html b/tests/data/html/dynamic_table.html index e585f17..198a629 100644 --- a/tests/data/html/dynamic_table.html +++ b/tests/data/html/dynamic_table.html @@ -1 +1,94 @@ -
Name Email Company Date of contact Deal Status Mode of Payment Agreement
Life Meditech l@gmail.com Life Meditech Pvt Ltd 2024-11-05 In progress Cash true
Genios genios@email.io Genio Inc. Corp 2024-11-22 Complete Bank Transfer false
Smart MediTech Device Manufacturer smart@gmail.com Smart MediTech Device Manufacturer GmbH 2024-11-29 On hold Bitcoin false
microsoft microsoft@gmail.com microsoft 2024-11-06 In progress Cash true
google google@gmail.com google 2024-11-20 Complete Bank Transfer true
MTech mtech@yahoo.com Mtech 2024-11-04 In progress Cash true
CertHub certhub@certhub.de certhub 2024-11-05 In progress Bank Transfer true
\ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameEmailCompanyDate of contactDeal StatusMode of PaymentAgreement
Life Meditechl@gmail.comLife Meditech Pvt Ltd2024-11-05In progressCashtrue
Geniosgenios@email.ioGenio Inc. Corp2024-11-22CompleteBank Transferfalse
Smart MediTech Device Manufacturersmart@gmail.comSmart MediTech Device Manufacturer GmbH2024-11-29On holdBitcoinfalse
microsoftmicrosoft@gmail.commicrosoft2024-11-06In progressCashtrue
googlegoogle@gmail.comgoogle2024-11-20CompleteBank Transfertrue
MTechmtech@yahoo.comMtech2024-11-04In progressCashtrue
CertHubcerthub@certhub.decerthub2024-11-05In progressBank Transfertrue
diff --git a/tests/data/html/table.html b/tests/data/html/table.html index 63d5440..27c09a6 100644 --- a/tests/data/html/table.html +++ b/tests/data/html/table.html @@ -1 +1,195 @@ -

Name

Email

Company

Date of contact

Deal Status

Mode of Payment

Agreement

Life Meditech

l@gmail.com

Life Meditech Pvt Ltd

2024-11-05

In progress

Cash

true

Genios

genios@email.io

Genio Inc. Corp

2024-11-22

Complete

Bank Transfer

false

Smart MediTech Device Manufacturer

smart@gmail.com

Smart MediTech Device Manufacturer GmbH

2024-11-29

On hold

Bitcoin

false

microsoft

microsoft@gmail.com

microsoft

2024-11-06

In progress

Cash

true

google

google@gmail.com

google

2024-11-20

Complete

Bank Transfer

true

MTech

mtech@yahoo.com

Mtech

2024-11-04

In progress

Cash

true

CertHub

certhub@certhub.de

certhub

2024-11-05

In progress

Bank Transfer

true

\ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Name

+
+

Email

+
+

Company

+
+

Date of contact

+
+

Deal Status

+
+

Mode of Payment

+
+

Agreement

+
+

Life Meditech

+
+

l@gmail.com

+
+

Life Meditech Pvt Ltd

+
+

2024-11-05

+
+

In progress

+
+

Cash

+
+

true

+
+

Genios

+
+

genios@email.io

+
+

Genio Inc. Corp

+
+

2024-11-22

+
+

Complete

+
+

Bank Transfer

+
+

false

+
+

Smart MediTech Device Manufacturer

+
+

smart@gmail.com

+
+

Smart MediTech Device Manufacturer GmbH

+
+

2024-11-29

+
+

On hold

+
+

Bitcoin

+
+

false

+
+

microsoft

+
+

microsoft@gmail.com

+
+

microsoft

+
+

2024-11-06

+
+

In progress

+
+

Cash

+
+

true

+
+

google

+
+

google@gmail.com

+
+

google

+
+

2024-11-20

+
+

Complete

+
+

Bank Transfer

+
+

true

+
+

MTech

+
+

mtech@yahoo.com

+
+

Mtech

+
+

2024-11-04

+
+

In progress

+
+

Cash

+
+

true

+
+

CertHub

+
+

certhub@certhub.de

+
+

certhub

+
+

2024-11-05

+
+

In progress

+
+

Bank Transfer

+
+

true

+
diff --git a/tiptapy/templates/dynamicTable.html b/tiptapy/templates/dynamicTable.html index dda3326..65fb5f0 100644 --- a/tiptapy/templates/dynamicTable.html +++ b/tiptapy/templates/dynamicTable.html @@ -1,83 +1,131 @@ +{%- set MAX_TABLE_WIDTH = 670 -%} +{%- set FLEX_COL_WEIGHT = 25 -%} {%- set visible_columns = [] -%} -{%- set rows = node.attrs.content.rows if node.attrs.content and node.attrs.content.rows else [] -%} +{%- set rows = node.attrs.content.rows if node.attrs.content and node.attrs.content.rows is iterable and +node.attrs.content.rows is not string else [] -%} {%- set grid_columns = node.attrs.gridState.columns if node.attrs.gridState and node.attrs.gridState.columns else {} -%} -{%- set visibility_model = grid_columns.columnVisibilityModel if grid_columns and grid_columns.columnVisibilityModel else {} -%} +{%- set grid_dimensions = grid_columns.dimensions if grid_columns and grid_columns.dimensions else {} -%} +{%- set visibility_model = grid_columns.columnVisibilityModel if grid_columns and grid_columns.columnVisibilityModel +else {} -%} {%- set ordered_fields = grid_columns.orderedFields if grid_columns and grid_columns.orderedFields else [] -%} {%- set configured_columns = node.attrs.columns if node.attrs.columns else {} -%} +{%- set table_settings = node.attrs.tableSettings if node.attrs.tableSettings else {} -%} +{%- set column_font_size = table_settings.columnFontSize if table_settings.columnFontSize else '12px' -%} +{%- set row_font_size = table_settings.rowFontSize if table_settings.rowFontSize else '12px' -%} {%- if rows|length == 0 -%} No content found {%- else -%} - - {%- if node.attrs.content and node.attrs.content.headers -%} - {%- for header in ordered_fields -%} - {%- if header in node.attrs.content.headers -%} - {%- set props = configured_columns.get(header, {}) -%} - {%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} - {%- if is_visible -%} - {%- set _ = visible_columns.append((header, { - "originalName": props.originalName|default(header), - "alias": props.alias|default(None), - "visible": True, - "order": props.order|default(loop.index0), - "width": props.width|default(None) - })) -%} - {%- endif -%} - {%- endif -%} - {%- endfor -%} - {%- for header in node.attrs.content.headers -%} - {%- if header not in ordered_fields -%} - {%- set props = configured_columns.get(header, {}) -%} - {%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} - {%- if is_visible -%} - {%- set _ = visible_columns.append((header, { - "originalName": props.originalName|default(header), - "alias": props.alias|default(None), - "visible": True, - "order": props.order|default(visible_columns|length), - "width": props.width|default(None) - })) -%} - {%- endif -%} +{%- if node.attrs.content and node.attrs.content.headers -%} +{%- for header in ordered_fields -%} +{%- if header in node.attrs.content.headers -%} +{%- set props = configured_columns.get(header, {}) -%} +{%- set dim_width = grid_dimensions.get(header, {}).get('width') if grid_dimensions else none -%} +{%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} +{%- if is_visible -%} +{%- set col_w = props.width if props.width else dim_width -%} +{%- set _ = visible_columns.append((header, { +"originalName": props.originalName|default(header), +"alias": props.alias|default(None), +"visible": True, +"order": props.order|default(loop.index0), +"width": col_w|int if col_w else none +})) -%} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- for header in node.attrs.content.headers -%} +{%- if header not in ordered_fields -%} +{%- set props = configured_columns.get(header, {}) -%} +{%- set dim_width = grid_dimensions.get(header, {}).get('width') if grid_dimensions else none -%} +{%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} +{%- if is_visible -%} +{%- set col_w = props.width if props.width else dim_width -%} +{%- set _ = visible_columns.append((header, { +"originalName": props.originalName|default(header), +"alias": props.alias|default(None), +"visible": True, +"order": props.order|default(visible_columns|length), +"width": col_w|int if col_w else none +})) -%} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- endif -%} +{%- set sorted_columns = visible_columns|sort(attribute='1.order') -%} +{%- set width_ns = namespace(total=0, defined_count=0) -%} +{%- for header, props in sorted_columns -%} +{%- if props.width -%} +{%- set width_ns.total = width_ns.total + props.width -%} +{%- set width_ns.defined_count = width_ns.defined_count + 1 -%} +{%- endif -%} +{%- endfor -%} +{%- set has_missing = (sorted_columns|length == 0) or (width_ns.defined_count < sorted_columns|length) -%} {%- set + all_defined=(sorted_columns|length> 0) and (width_ns.defined_count == sorted_columns|length) and (width_ns.total > + 0) -%} + {%- set overflows = width_ns.total > MAX_TABLE_WIDTH -%} + {%- if has_missing or (all_defined and overflows) or (sorted_columns|length == 0) -%} + {%- set table_width_css = 'width: 100%; max-width: 100%; table-layout: fixed;' -%} + {%- else -%} + {%- set table_width_css = 'width: ' ~ width_ns.total ~ 'px; max-width: 100%; table-layout: fixed;' -%} {%- endif -%} + {%- set use_percentages = overflows -%} + {%- set pct_ns = namespace(total=0) -%} + {%- if use_percentages -%} + {%- for header, props in sorted_columns -%} + {%- set pct_ns.total = pct_ns.total + (props.width if props.width else FLEX_COL_WEIGHT) -%} {%- endfor -%} {%- endif -%} - - - {%- for header, props in visible_columns|sort(attribute='1.order') -%} - {% set header_text = props.alias if props.alias else props.originalName %} - {% set header_text = props.alias if props.alias else props.originalName|default(header) %} - {% set ns = namespace(text=header_text) %} - {%- for mark in node.marks if node.marks -%} - {%- set ns.text -%} - {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} - {%- include template -%} - {%- endwith -%} - {%- endset -%} - {%- endfor -%} - - {%- endfor -%} - - - - {%- for row in rows -%} - - {%- for header, props in visible_columns|sort(attribute='1.order') -%} - {%- if header in node.attrs.content.headers -%} - {% set cell_index = node.attrs.content.headers.index(header) %} - {% set ns = namespace(text=row[cell_index]) %} +
{{ns.text | safe_html }}
+ + {%- for header, props in sorted_columns -%} + {%- if use_percentages and pct_ns.total > 0 -%} + + {%- elif props.width -%} + {%- else -%} - {% set ns = namespace(text='') %} + {%- endif -%} - {%- for mark in node.marks if node.marks -%} - {%- set ns.text -%} - {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} - {%- include template -%} - {%- endwith -%} - {%- endset -%} {%- endfor -%} - + + + + {%- for header, props in sorted_columns -%} + {% set header_text = props.alias if props.alias else props.originalName %} + {% set header_text = props.alias if props.alias else props.originalName|default(header) %} + {% set ns = namespace(text=header_text) %} + {%- for mark in node.marks if node.marks -%} + {%- set ns.text -%} + {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} + {%- include template -%} + {%- endwith -%} + {%- endset -%} + {%- endfor -%} + + {%- endfor -%} + + + + {%- for row in rows -%} + + {%- for header, props in sorted_columns -%} + {%- if header in node.attrs.content.headers -%} + {% set cell_index = node.attrs.content.headers.index(header) %} + {% set ns = namespace(text=row[cell_index]) %} + {%- else -%} + {% set ns = namespace(text='') %} + {%- endif -%} + {%- for mark in node.marks if node.marks -%} + {%- set ns.text -%} + {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} + {%- include template -%} + {%- endwith -%} + {%- endset -%} + {%- endfor -%} + + {%- endfor -%} + {%- endfor -%} - - {%- endfor -%} - -
{{ns.text | safe_html }}
{{ns.text | safe_html }}
{{ns.text | safe_html }}
-{%- endif -%} + + + {%- endif -%} diff --git a/tiptapy/templates/dynamic_table.html b/tiptapy/templates/dynamic_table.html index dda3326..65fb5f0 100644 --- a/tiptapy/templates/dynamic_table.html +++ b/tiptapy/templates/dynamic_table.html @@ -1,83 +1,131 @@ +{%- set MAX_TABLE_WIDTH = 670 -%} +{%- set FLEX_COL_WEIGHT = 25 -%} {%- set visible_columns = [] -%} -{%- set rows = node.attrs.content.rows if node.attrs.content and node.attrs.content.rows else [] -%} +{%- set rows = node.attrs.content.rows if node.attrs.content and node.attrs.content.rows is iterable and +node.attrs.content.rows is not string else [] -%} {%- set grid_columns = node.attrs.gridState.columns if node.attrs.gridState and node.attrs.gridState.columns else {} -%} -{%- set visibility_model = grid_columns.columnVisibilityModel if grid_columns and grid_columns.columnVisibilityModel else {} -%} +{%- set grid_dimensions = grid_columns.dimensions if grid_columns and grid_columns.dimensions else {} -%} +{%- set visibility_model = grid_columns.columnVisibilityModel if grid_columns and grid_columns.columnVisibilityModel +else {} -%} {%- set ordered_fields = grid_columns.orderedFields if grid_columns and grid_columns.orderedFields else [] -%} {%- set configured_columns = node.attrs.columns if node.attrs.columns else {} -%} +{%- set table_settings = node.attrs.tableSettings if node.attrs.tableSettings else {} -%} +{%- set column_font_size = table_settings.columnFontSize if table_settings.columnFontSize else '12px' -%} +{%- set row_font_size = table_settings.rowFontSize if table_settings.rowFontSize else '12px' -%} {%- if rows|length == 0 -%} No content found {%- else -%} - - {%- if node.attrs.content and node.attrs.content.headers -%} - {%- for header in ordered_fields -%} - {%- if header in node.attrs.content.headers -%} - {%- set props = configured_columns.get(header, {}) -%} - {%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} - {%- if is_visible -%} - {%- set _ = visible_columns.append((header, { - "originalName": props.originalName|default(header), - "alias": props.alias|default(None), - "visible": True, - "order": props.order|default(loop.index0), - "width": props.width|default(None) - })) -%} - {%- endif -%} - {%- endif -%} - {%- endfor -%} - {%- for header in node.attrs.content.headers -%} - {%- if header not in ordered_fields -%} - {%- set props = configured_columns.get(header, {}) -%} - {%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} - {%- if is_visible -%} - {%- set _ = visible_columns.append((header, { - "originalName": props.originalName|default(header), - "alias": props.alias|default(None), - "visible": True, - "order": props.order|default(visible_columns|length), - "width": props.width|default(None) - })) -%} - {%- endif -%} +{%- if node.attrs.content and node.attrs.content.headers -%} +{%- for header in ordered_fields -%} +{%- if header in node.attrs.content.headers -%} +{%- set props = configured_columns.get(header, {}) -%} +{%- set dim_width = grid_dimensions.get(header, {}).get('width') if grid_dimensions else none -%} +{%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} +{%- if is_visible -%} +{%- set col_w = props.width if props.width else dim_width -%} +{%- set _ = visible_columns.append((header, { +"originalName": props.originalName|default(header), +"alias": props.alias|default(None), +"visible": True, +"order": props.order|default(loop.index0), +"width": col_w|int if col_w else none +})) -%} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- for header in node.attrs.content.headers -%} +{%- if header not in ordered_fields -%} +{%- set props = configured_columns.get(header, {}) -%} +{%- set dim_width = grid_dimensions.get(header, {}).get('width') if grid_dimensions else none -%} +{%- set is_visible = props.visible if props.visible is defined else visibility_model.get(header, True) -%} +{%- if is_visible -%} +{%- set col_w = props.width if props.width else dim_width -%} +{%- set _ = visible_columns.append((header, { +"originalName": props.originalName|default(header), +"alias": props.alias|default(None), +"visible": True, +"order": props.order|default(visible_columns|length), +"width": col_w|int if col_w else none +})) -%} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- endif -%} +{%- set sorted_columns = visible_columns|sort(attribute='1.order') -%} +{%- set width_ns = namespace(total=0, defined_count=0) -%} +{%- for header, props in sorted_columns -%} +{%- if props.width -%} +{%- set width_ns.total = width_ns.total + props.width -%} +{%- set width_ns.defined_count = width_ns.defined_count + 1 -%} +{%- endif -%} +{%- endfor -%} +{%- set has_missing = (sorted_columns|length == 0) or (width_ns.defined_count < sorted_columns|length) -%} {%- set + all_defined=(sorted_columns|length> 0) and (width_ns.defined_count == sorted_columns|length) and (width_ns.total > + 0) -%} + {%- set overflows = width_ns.total > MAX_TABLE_WIDTH -%} + {%- if has_missing or (all_defined and overflows) or (sorted_columns|length == 0) -%} + {%- set table_width_css = 'width: 100%; max-width: 100%; table-layout: fixed;' -%} + {%- else -%} + {%- set table_width_css = 'width: ' ~ width_ns.total ~ 'px; max-width: 100%; table-layout: fixed;' -%} {%- endif -%} + {%- set use_percentages = overflows -%} + {%- set pct_ns = namespace(total=0) -%} + {%- if use_percentages -%} + {%- for header, props in sorted_columns -%} + {%- set pct_ns.total = pct_ns.total + (props.width if props.width else FLEX_COL_WEIGHT) -%} {%- endfor -%} {%- endif -%} - - - {%- for header, props in visible_columns|sort(attribute='1.order') -%} - {% set header_text = props.alias if props.alias else props.originalName %} - {% set header_text = props.alias if props.alias else props.originalName|default(header) %} - {% set ns = namespace(text=header_text) %} - {%- for mark in node.marks if node.marks -%} - {%- set ns.text -%} - {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} - {%- include template -%} - {%- endwith -%} - {%- endset -%} - {%- endfor -%} - - {%- endfor -%} - - - - {%- for row in rows -%} - - {%- for header, props in visible_columns|sort(attribute='1.order') -%} - {%- if header in node.attrs.content.headers -%} - {% set cell_index = node.attrs.content.headers.index(header) %} - {% set ns = namespace(text=row[cell_index]) %} +
{{ns.text | safe_html }}
+ + {%- for header, props in sorted_columns -%} + {%- if use_percentages and pct_ns.total > 0 -%} + + {%- elif props.width -%} + {%- else -%} - {% set ns = namespace(text='') %} + {%- endif -%} - {%- for mark in node.marks if node.marks -%} - {%- set ns.text -%} - {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} - {%- include template -%} - {%- endwith -%} - {%- endset -%} {%- endfor -%} - + + + + {%- for header, props in sorted_columns -%} + {% set header_text = props.alias if props.alias else props.originalName %} + {% set header_text = props.alias if props.alias else props.originalName|default(header) %} + {% set ns = namespace(text=header_text) %} + {%- for mark in node.marks if node.marks -%} + {%- set ns.text -%} + {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} + {%- include template -%} + {%- endwith -%} + {%- endset -%} + {%- endfor -%} + + {%- endfor -%} + + + + {%- for row in rows -%} + + {%- for header, props in sorted_columns -%} + {%- if header in node.attrs.content.headers -%} + {% set cell_index = node.attrs.content.headers.index(header) %} + {% set ns = namespace(text=row[cell_index]) %} + {%- else -%} + {% set ns = namespace(text='') %} + {%- endif -%} + {%- for mark in node.marks if node.marks -%} + {%- set ns.text -%} + {%- with template='marks/' + mark.type + '.html', text=ns.text, mark=mark -%} + {%- include template -%} + {%- endwith -%} + {%- endset -%} + {%- endfor -%} + + {%- endfor -%} + {%- endfor -%} - - {%- endfor -%} - -
{{ns.text | safe_html }}
{{ns.text | safe_html }}
{{ns.text | safe_html }}
-{%- endif -%} + + + {%- endif -%} diff --git a/tiptapy/templates/table.html b/tiptapy/templates/table.html index 0bf2aa4..84c13a6 100644 --- a/tiptapy/templates/table.html +++ b/tiptapy/templates/table.html @@ -1,25 +1,81 @@ - - {%- for row in node.content -%} - - {%- for cell in row.content -%} - {%- if cell.type == 'tableHeader' -%} - - {%- else -%} - +{#- TipTap table column widths (editor px). Cap matches ~A4 content width. -#} +{%- set MAX_TABLE_WIDTH = 670 -%} +{%- set FLEX_COL_WEIGHT = 25 -%} +{%- set first_row = node.content[0] if node.content else none -%} +{%- set col_widths = [] -%} +{%- if first_row -%} +{%- for cell in first_row.content -%} +{%- set colspan = cell.attrs.colspan if cell.attrs.colspan else 1 -%} +{%- for col_index in range(colspan) -%} +{%- set col_width = none -%} +{%- if cell.attrs.colwidth and (cell.attrs.colwidth|length) > col_index and cell.attrs.colwidth[col_index] -%} +{%- set col_width = cell.attrs.colwidth[col_index]|int -%} +{%- endif -%} +{%- set _ = col_widths.append(col_width) -%} +{%- endfor -%} +{%- endfor -%} +{%- endif -%} +{%- set width_ns = namespace(total=0, defined_count=0) -%} +{%- for w in col_widths -%} +{%- if w -%} +{%- set width_ns.total = width_ns.total + w -%} +{%- set width_ns.defined_count = width_ns.defined_count + 1 -%} +{%- endif -%} +{%- endfor -%} +{%- set has_missing = (col_widths|length == 0) or (width_ns.defined_count < col_widths|length) -%} {%- set + all_defined=(col_widths|length> 0) and (width_ns.defined_count == col_widths|length) and (width_ns.total > 0) -%} + {%- set overflows = width_ns.total > MAX_TABLE_WIDTH -%} + {#- + 1. Any missing col width → table 100%; fixed cols keep px (or % if fixed sum overflows). + 2. All cols have width → table = sum px (or 100% + % cols if sum overflows). + -#} + {%- if has_missing or (all_defined and overflows) or (col_widths|length == 0) -%} + {%- set table_width_css = 'width: 100%; max-width: 100%; table-layout: fixed;' -%} + {%- else -%} + {%- set table_width_css = 'width: ' ~ width_ns.total ~ 'px; max-width: 100%; table-layout: fixed;' -%} + {%- endif -%} + {%- set use_percentages = overflows -%} + {%- set pct_ns = namespace(total=0) -%} + {%- if use_percentages -%} + {%- for w in col_widths -%} + {%- set pct_ns.total = pct_ns.total + (w if w else FLEX_COL_WEIGHT) -%} + {%- endfor -%} + {%- endif -%} +
1 %}colspan="{{ cell.attrs.colspan }}"{% endif %}> - {%- for content in cell.content -%} - {%- with template=content.type + '.html', node=content -%} - {%- include template -%} - {%- endwith -%} - {%- endfor %} - 1 %}colspan="{{ cell.attrs.colspan }}"{% endif %}> - {%- for content in cell.content -%} - {%- with template=content.type + '.html', node=content -%} - {%- include template -%} - {%- endwith -%} - {%- endfor %} -
+ {%- if col_widths -%} + + {%- for w in col_widths -%} + {%- if use_percentages and pct_ns.total > 0 -%} + + {%- elif w -%} + + {%- else -%} + + {%- endif -%} + {%- endfor -%} + {%- endif -%} + {%- for row in node.content -%} + + {%- for cell in row.content -%} + {%- if cell.type == 'tableHeader' -%} + + {%- else -%} + + {%- endif -%} + {%- endfor -%} + {%- endfor -%} - - {%- endfor -%} -
1 %}colspan="{{ cell.attrs.colspan }}"{% endif %}> + {%- for content in cell.content -%} + {%- with template=content.type + '.html', node=content -%} + {%- include template -%} + {%- endwith -%} + {%- endfor %} + 1 %}colspan="{{ cell.attrs.colspan }}"{% endif %}> + {%- for content in cell.content -%} + {%- with template=content.type + '.html', node=content -%} + {%- include template -%} + {%- endwith -%} + {%- endfor %} +
+