{# Vendor assets via asset() helper. Default mode = CDN (jsDelivr) with SRI; #} {# when `ntasker assets fetch` ran and `assets_mode=local|auto`, they come from #} {# the user-data dir under /static/vendor instead. SRI is emitted in both modes #} {# (local mode: tamper detection). `crossorigin` is only required for CDN loading. #} {% for tpl in plugin_slots['head'] %}{% include tpl %}{% endfor %} {# Frontend i18n bridge: js_strings is built server-side per request. #} {# Alpine magic property `$i18n('key')` is registered just below. #} {# Sidebar section heading: a button that folds the section's body. #} {# `key` is a name in settings.SIDEBAR_SECTIONS; the open state lives in #} {# `sectionOpen` and is persisted to the `sidebar_sections` setting. #} {% macro section_toggle(key, icon, label) %} {% endmacro %} {# One sidebar project row. `p` is the Alpine expression yielding the #} {# project ({name, label, open_count}); the same markup serves flat rows, #} {# family heads and indented children. `after_badge` is extra markup that #} {# follows the open-count badge (the folded-family pill on head rows). #} {% macro project_row(p, after_badge='') %} {% endmacro %} {# Folded-family pill on a head row: how many children hide behind the #} {# chevron; lit up when one of them is part of the active filter. #} {% macro fold_pill() %} {% endmacro %}
{{ t('No tasks') }}