Switch to side-by-side view

--- a
+++ b/Docs/tools/class-template.md.jinja
@@ -0,0 +1,155 @@
+{% set file_target = (group+"."+topic+"."+filename) | replace(" ","-") %}
+
+({{ file_target }}.any)=
+# {{filename}}
+
+{{filedocstring}}
+
+:::{code-block} AnyScriptDoc
+:caption: Include this file this file to use
+#include "{{include_str}}"`
+::: 
+
+{% for classt in class_templates %}
+{%- set classname = classt['name'] %}
+
+({{ file_target }}.{{classname}})=
+{%- set documented_args = classt.args | selectattr("docs", "ne", "") | list %}
+{%- set undocumented_args = classt.args | selectattr("docs", "eq", "") | list %}
+{%- set expected_undocumented_args = undocumented_args | selectattr("value", "eq", "") | list %}
+{%- set args_in_documentation = (documented_args + expected_undocumented_args) %}
+{%- set expected_members = classt.expected_members %}
+{%- set required_members = classt.members | selectattr("value", "eq", "") | list %}
+{%- set optional_members = classt.members | selectattr("value", "ne", "") | list %}
+
+
+```{raw} html
+<!--  
+```
+% If you get a build error here, most likely your class template documentation is invalid
+[Validate docs section](#{{ file_target }}.{{classname}}.DocsValidationTarget)
+
+```{raw} html
+-->
+```
+
+## #{{classname}}
+
+{{ classt['docs'].strip() }}
+
+
+({{ file_target }}.{{classname}}.DocsValidationTarget )=
+
+:::{rubric} Full signature
+:::
+
+```{code-block} AnyScriptDoc
+{{classname}} <ObjectName>
+{%- if args_in_documentation | length  -%}
+(
+  {%- for arg in args_in_documentation %}
+  {{ arg.name }}={{arg.value or "<required>"}},
+{%- endfor %}
+){% endif %} = {
+{%- for member in expected_members %}
+  {% if member.group %}{{member.group}} = { {{"\n    "}}{%endif%}
+{{- member.type}} {{member.name}} = {{member.value}}
+{% if member.group %}  };{{"\n"}}{%endif%}
+{%- endfor -%}
+{%- for member in required_members %}
+  {{member.name}} = <Required>; {{ "\n" if loop.last}}
+{%- endfor -%}
+};
+```
+
+
+:::{rubric} Arguments
+:::
+
+:\_\_CLASS\_\_: `{{classt.type}}`{l=AnyScriptDoc}
+{% for arg in args_in_documentation %}
+({{ file_target }}.{{classname}}:{{arg.name}})=
+:{{arg.name}}: 
+  {{arg.docs}} {%if arg.value %} (Default: {{arg.value}}) {%else%} (Required) {%endif%}
+{% endfor %}
+
+{%- if expected_members | length  %}
+
+:::{rubric} Expected members
+:::
+  
+:::::{grid} 1
+{% for member in expected_members %}
+::::{grid-item-card} 
+```{code-block} AnyScriptDoc
+{% if member.group %}{{member.group}} = { {{"\n  "}}{%endif%}
+{{- member.type}} {{member.name}} = {{member.value}}
+{% if member.group %}};{%endif%}
+```
+
+
+{{member.docs}}
+
+::::
+{% endfor %}
+:::::
+
+{% endif %}
+
+
+
+{%- if required_members | length  %}
+
+:::{rubric} Required initialization members
+:::
+  
+:::::{grid} 1
+{% for member in required_members %}
+
+::::{grid-item-card} 
+({{ file_target }}.{{classname}}.{{member.name}})=
+```{code-block} AnyScriptDoc
+{{member.name}} = §<Required>§;
+```
+
+{%if member.type != ""%}:class type: `{{member.type}}`{l=AnyScriptDoc}{%endif%}
+
+{{member.docs}}
+::::
+{% endfor %}
+:::::
+
+{% endif %}
+
+{%- if optional_members | length  %}
+
+:::{rubric} Optional initialization members
+:::
+
+  
+:::::{grid} 1
+{% for member in optional_members %}
+::::{grid-item}
+({{ file_target }}.{{classname}}.{{member.name}})=
+:::{dropdown} `{{member.name}} = {{member.value}};`{l=AnyScriptDoc}
+:margin: 0
+:color: white
+
+{%if member.type != ""%}:class type: `{{member.type}}`{l=AnyScriptDoc}{%endif%}
+
+{{member.docs}}
+:::
+::::
+{% endfor %}
+:::::
+{% endif %}
+
+
+
+
+
+
+
+
+{% endfor %}
+