{# doto-list-email.html - Template for doto task list as a 3-pane email layout #}
{#
Context variables:
- columns: List of (status_value, display_label) pairs, in tree order.
- tree: Dict mapping status_value -> list of DotoTask objects grouped
under that status node (left pane).
- tasks: Flat list of all DotoTask objects (top-right list pane).
- task_links: Dict mapping task.id -> href of the task box (Feature 5).
- icon_mode: Effective icon mode ("icon" | "icon-text" | "text").
- visible_tasks: Resolved number of list rows to keep visible at once in
the scrollable top-right list pane (0 = show all / no cap).
Emitted as data-doto-visible-tasks and the
--doto-visible-tasks CSS custom property so the CSS can
compute the pane's max-height. All tasks still render.
Available filters:
- row_classes: Get CSS classes for a task.
Panes:
1. Left — task tree grouped by status (collapsible status nodes).
2. Top-right — the flat task list.
3. Bottom-right — the selected task's detail payload (one per task; shown
when a tree node or list row is selected).
Client-side nature:
Selecting a tree node filters the list; selecting a list row populates the
detail pane. Both are handled by the vendored, dependency-free
doto-views.js. When JS is unavailable the markup degrades gracefully: all
three panes render statically (the first task's detail is shown by default
via CSS). A child theme can fully re-author this file via
/_doto/templates/html/.
#}
{%- for status, label in columns %}
{%- endfor %}
{%- for task in tasks %}
{{ task.id }}{{ task.title }}{{ task.status }}
{%- endfor %}
{%- for task in tasks %}
{%- set href = (task_links.get(task.id) if task_links is defined else '#' ~ task.id) or ('#' ~ task.id) %}