{# Autodoc Members Partial Renders collapsible member cards for methods, attributes, etc. With status dots, counts, return types, and internal method separation. Required: members (list of DocElements) Optional: title (str), member_type (str), first_open (bool, default true) #} {% set title = title | default('Members') %} {% set member_type = member_type | default('method') %} {% set first_open = first_open | default(true) %} {# Separate public and internal members #} {% set public_members = members | rejectattr('name', 'match', '^_') | list if members else [] %} {% set internal_members = members | selectattr('name', 'match', '^_') | list if members else [] %} {% if members %}

{{ title }}

{# Public members #} {% if public_members %}
{% for member in public_members %} {% set member_return = member.metadata.return_type or member.metadata.returns or '' %} {% set member_params = member.metadata.args or member.metadata.parameters or (member.children or []) | selectattr('element_type', 'eq', 'parameter') | list %} {% set member_signature = member.metadata.signature or '' %} {% set param_count = member_params | length %}
{# Status dot #} {# Content wrapper #}
{{ member.name }} {# Parameter count badge #} {{ param_count }} {# Return type with arrow #} {% if member_return %} {{ member_return | truncate(25, True, '…') }} {% endif %} {# Toggle indicator #}
{# Description preview (for scanning) #} {% if member.description %} {{ member.description | striptags | truncate(80, True, '…') }} {% endif %}
{# Badges #} {% set member_badges = [] %} {% if member.metadata.is_async %}{% set _ = member_badges.append('async') %}{% endif %} {% if member.metadata.is_classmethod %}{% set _ = member_badges.append('classmethod') %}{% endif %} {% if member.metadata.is_staticmethod %}{% set _ = member_badges.append('staticmethod') %}{% endif %} {% if member.metadata.is_property %}{% set _ = member_badges.append('property') %}{% endif %} {% if member.metadata.is_abstract %}{% set _ = member_badges.append('abstract') %}{% endif %} {% if member.metadata.is_deprecated %}{% set _ = member_badges.append('deprecated') %}{% endif %} {% if member_badges %} {% for badge in member_badges %} {{ badge }} {% endfor %} {% endif %}
{# Signature (copy-paste ready) #} {% if member_signature %}
{{ member_signature }}
{% endif %} {# Full description - only show if truncated in header #} {% set desc_stripped = member.description | striptags | trim if member.description else '' %} {% if member.description and desc_stripped | length > 77 %}
{{ member.description | markdownify | safe }}
{% endif %} {# Member parameters - args is a list of dicts with name, type, docstring, default #} {% if member_params %}
Parameters
{% for param in member_params %} {# Handle both dict and object access patterns #} {% set param_name = param.get('name', '') if param.get else (param.name if param.name is defined else '') %} {% set param_type_val = param.get('type', '') if param.get else (param.type if param.type is defined else '') %} {# docstring is the description from parsed docstring #} {% set param_desc = param.get('docstring', '') if param.get else (param.docstring if param.docstring is defined else '') %} {% set param_default = param.get('default') if param.get else (param.default if param.default is defined else none) %} {% endfor %}
Name Type Description
{{ param_name }} {{ param_type_val or '—' }} {{ param_desc | markdownify | safe }} {% if param_default is not none and param_default != '' %} Default: {{ param_default }} {% endif %}
{% endif %} {# Member return type (detailed) - only show if has description OR non-trivial type #} {# Trivial types (None) are already visible in header badge + signature #} {% set has_return_desc = member.metadata.return_description %} {% set is_nontrivial_return = member_return and member_return not in ('None', 'none', 'void', '') %} {% if has_return_desc or is_nontrivial_return %}
Returns
{{ member_return }} {% if has_return_desc %} {{ has_return_desc }} {% endif %}
{% endif %}
{% endfor %}
{% endif %} {# Internal members (collapsed by default) #} {% if internal_members %}
Internal Methods {{ internal_members | length }}
{% for member in internal_members %} {% set member_return = member.metadata.return_type or member.metadata.returns or '' %} {% set member_params = member.metadata.args or member.metadata.parameters or [] %} {% set member_signature = member.metadata.signature or '' %} {% set param_count = member_params | length %}
{# Status dot #} {# Content wrapper #}
{{ member.name }} {# Parameter count badge #} {{ param_count }} {# Return type with arrow #} {% if member_return %} {{ member_return | truncate(25, True, '…') }} {% endif %} {# Toggle indicator #}
{# Description preview (for scanning) #} {% if member.description %} {{ member.description | striptags | truncate(80, True, '…') }} {% endif %}
{# Badges #} {% set member_badges = [] %} {% if member.metadata.is_async %}{% set _ = member_badges.append('async') %}{% endif %} {% if member.metadata.is_classmethod %}{% set _ = member_badges.append('classmethod') %}{% endif %} {% if member.metadata.is_staticmethod %}{% set _ = member_badges.append('staticmethod') %}{% endif %} {% if member.metadata.is_property %}{% set _ = member_badges.append('property') %}{% endif %} {% if member.metadata.is_abstract %}{% set _ = member_badges.append('abstract') %}{% endif %} {% if member.metadata.is_deprecated %}{% set _ = member_badges.append('deprecated') %}{% endif %} {% if member_badges %} {% for badge in member_badges %} {{ badge }} {% endfor %} {% endif %}
{# Signature (copy-paste ready) #} {% if member_signature %}
{{ member_signature }}
{% endif %} {# Full description - only show if truncated in header #} {% set desc_stripped = member.description | striptags | trim if member.description else '' %} {% if member.description and desc_stripped | length > 77 %}
{{ member.description | markdownify | safe }}
{% endif %} {# Member parameters #} {% if member_params %}
Parameters
{% for param in member_params %} {% set param_name = param.get('name', '') if param.get else (param.name if param.name is defined else '') %} {% set param_type_val = param.get('type', '') if param.get else (param.type if param.type is defined else '') %} {% set param_desc = param.get('docstring', '') if param.get else (param.docstring if param.docstring is defined else '') %} {% set param_default = param.get('default') if param.get else (param.default if param.default is defined else none) %} {% endfor %}
Name Type Description
{{ param_name }} {{ param_type_val or '—' }} {{ param_desc }} {% if param_default is not none and param_default != '' %} Default: {{ param_default }} {% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}