{% from '_status_cue.html' import status_cue %} {% from '_series.html' import spark, summary %} {% set page_title = 'Series' %} {% include '_header.html' %}
{% include '_page_band.html' %} {#- The Series index (ADR-0097 decision 4): an index and not a page of curves — every node a series is kept on, grouped under its root node, with its status, the checks keeping it, what it draws, how many readings it holds and when the newest was taken. A node's name opens its Status page, as a path does everywhere else, and its row says in words where else it leads: *curves*, its Series view, where a curve stands at or beneath it; *readings*, its History page (ADR-0103 decision 1). The Curves column counts the curves the node's own series draw, the labels folded behind the count, which a browser's find still opens (decision 2) — and beside each label the curve seen small, with its newest, lowest and highest value (ADR-0114 decisions 1 and 2). A root appears once: its heading is its own row, empty where it keeps nothing itself, and the nodes beneath it follow, indented (decision 3). *curves* and *readings* stand in a column each, so each word reads down the page, and where the page is narrower than the table the table scrolls inside its card, in a box that is positioned so its visually hidden headings, absolutely placed, scroll with it rather than widening the page. On a phone it is no table to the eye: each row is laid out as a block of its own — the node, then what keeps it, its fold, what it holds and where it leads, each saying what it is (`data-label`), since the headings are out of sight there — so a fold and its control are on the screen and nothing is scrolled sideways (ADR-0114 decision 3). -#} {%- macro cells(row) -%} {{ row.kinds | join(" · ") }} {%- if row.sparks %}
{{ row.sparks | length }} {{ "curve" if row.sparks | length == 1 else "curves" }}
{%- else %}—{% endif -%} {{ row.kept }} {{ row.newest }} {%- endmacro %}

Where this instance keeps series: every node a check keeps them on, what it draws and how much it holds.

{%- if index %}
{%- for top in index %} {%- if top.own %}{{ cells(top.own) }}{% else %}{% endif -%} {%- for row in top.rows %} {{- cells(row) -}} {%- endfor %} {%- endfor %}
StatusNodeKept byCurvesReadingsNewestViews
{% if top.node %}{{ status_cue(top.node.code, labeled=true) }}{% endif %}{{ top.name }}{% if top.curves %}curves{% endif %}{% if top.own %}readings{% endif %}
{% if row.node %}{{ status_cue(row.node.code, labeled=true) }}{% endif %}{{ row.path }}{% if row.curves %}curves{% endif %}readings
{%- else %}

No check keeps a series: series_keep in a check's YAML starts one.

{%- endif %}
{% include '_page_end.html' %}