{# Машины: карточка на каждую — состояние и рассказ о последнем рабочем дне. #} {% set o = card.data.o %} {% if o.cards %} {# С 08.09 (владелец) карточка — главное на сводке: она рассказывает про день машины словами (когда началась работа, сколько идёт, перерывы, чем занят), а не только показывает часы за сегодня. Дорожка внутри — в масштабе самого дня, ось суток по людям остаётся в «Рабочем периоде». #} {# Два вида одних и тех же машин: плитками (видно ленту дня и рассказ) и таблицей (видно всех разом и удобно сравнивать). Выбор — за человеком, и он помнится: одному важнее «что происходит», другому «сколько у кого». #} {# Машины и их панель — одним блоком-карточкой (просьба владельца 18.08): слева «+ Подключить машину» словами (голый плюс не разгадывался), справа пара «плитки/строки». Внутренние карточки держатся рамкой, без второй тени — тень на тени делала блок мутным. #} {# Больше шести машин — по умолчанию строки, а не плитки (владелец, 06.09): на парке в два десятка плитки превращаются в простыню на два экрана, где каждая повторяет одно и то же. Это только ПОДСКАЗКА: свой выбор человека браузер помнит и она его не перебивает. #}
{{ tr('Машины') }}{{ o.cards|length }} {{ tr('на связи') }} {{ tr('{a} из {b}').format(a=o.live, b=o.cards|length) }} {% if connect_code %} {% endif %}
{# Карточка машины — рассказ о её последнем рабочем дне (владелец, 08.09): состояние, когда началась работа и сколько идёт (или когда кончилась), работа крупно, перерывы числом и суммой, дорожка дня в масштабе дня, чем человек занят сейчас и чем занимался. Молчащая машина рассказывает про свой последний день с датой — вместо крупного «0 мин», который ни на что не отвечал. Числа те же, что в ведомости: работа + перерывы = от начала до конца. data-n — сколько машин: одна занимает всю ширину и раскладывается в две колонки, две-три не растягиваются шире 640px, от четырёх — сетка. #}
{% for c in o.cards %} {% set s = c.story %}
{# чья машина, платформа; способ съёмки — только когда он не очевиден из платформы. Пояс — в .tznote: браузер прячет его, когда он совпадает с поясом смотрящего #}
{% if c.person %}{{ c.person }} · {% endif %}{{ c.platform }}{% if c.backend != c.platform and c.backend != '—' %} · {{ c.backend }}{% endif %} · {{ c.tz_label }}, {{ tr('{t} у них').format(t=c.local_time) }}{% if not c.enabled %} · {{ tr('отключена') }}{% endif %}{% if c.mstate == 'off' and not c.paused %} · {{ tr('агент: {t}').format(t=tr(c.seen_key).format(**c.seen_params)) }}{% endif %}
{# пилюля говорит языком счётчиков сводки: работа / перерыв / недоступна (просьба владельца 18.08); пауза остаётся паузой. «агент: N дн назад» — в подписи, только у пропавших: часы пилюли молчат дольше двух суток, а машине на связи хвастаться агентом незачем (замечание 19.08) #} {% if c.paused %}{{ tr(c.pause_key).format(**c.pause_params) }} {% elif c.mstate == 'work' %}{{ tr('идёт работа') }} {% elif c.mstate == 'quiet' %}{{ tr('перерыв') }} {% else %}{{ tr('недоступна') }}{% endif %}
{% if s %}
{# одна фраза о дне: какой день и его рамки. У идущей работы конца нет — «с 13:26, идёт 4 ч 32 мин»; на перерыве — с какого времени #}
{% if s.is_today %}{{ tr('сегодня') }}{% elif s.is_yesterday %}{{ tr('вчера') }}{% else %}{{ s.label }}{% endif %} {% if s.live %}· {{ tr('с {t}, идёт {d}').format(t=s.first, d=s.span_human) }} {% elif s.quiet %}· {{ tr('с {t}, перерыв с {u}').format(t=s.first, u=s.last) }} {% else %}· {{ s.first }}–{{ s.last }} · {{ s.span_human }}{% endif %}
{# работа крупно + ритм недели; перерывы строкой под ними: работа и перерывы вместе дают «идёт N» из фразы выше #}
{{ s.work_human }} {{ tr('работа') }}
{% for sp in c.spark %} {% endfor %}
{% if s.breaks %}{{ tr('перерывы') }} {{ s.breaks }} · {{ s.break_human }}{% else %}{{ tr('без перерывов') }}{% endif %}
{# дорожка дня в масштабе самого дня: работа — перерыв — работа #}
{% if s.live and c.now_title %}

{{ tr('сейчас') }} {{ c.now_title }}

{% endif %} {% if s.text %}

{{ s.text }}

{% endif %}
{% else %} {# работы ещё не было ни в один день: ни цифры, ни спарклайна (пустое не показываем) — только слово о том, что с агентом #}
{{ tr('работы ещё не было') }}
{% if c.paused %}

{{ tr('сбор на паузе') }}{% if c.pause_params %}, {{ tr(c.pause_key).format(**c.pause_params) }}{% endif %}

{% endif %}
{% endif %} {# Дверь внутрь — вся карточка: ссылка имени растянута на карточку (см. .mcard .nm a::after). Стрелка в углу появляется на наведении. #}
{% endfor %}
{% else %}
{{ tr('Ни одна машина ещё не подключилась.') }}
{{ tr('Поставьте агента и укажите ему адрес этого сервера и ключ регистрации —') }} {{ tr('инструкция на странице «Машины»') }}.
{% endif %}