{# The table, its pagination and its empty states. Rendered on its own when the list updates live, and included by list.html otherwise, so both paths render exactly the same markup from exactly the same context. A separate "partial" template is how the two quietly drift apart. #} {% if page.items %}
| {% endif %} {% for column in columns %} | {% if column.sort_url %} {{ column.label }} {% else %} {{ column.label }} {% endif %} | {% endfor %}{{ _("Actions") }} |
|---|---|---|
| {% endif %} {% for cell in row.cells %} | {% if cell.boolean %} {{ cell.value|ff_bool }} {% elif cell.url %} {{ cell.value|ff_display }} {% else %} {{ cell.value|ff_display }} {% endif %} | {% endfor %}
{# Icon buttons, always drawn. Text links revealed on hover meant
the actions were invisible until the mouse found them, and
invisible altogether on a touch screen. #}
{{ ff_icon("edit", size=15) }}
{{ _("Edit {name}", name=row.label) }}
{# `data-ff-method="post"` makes the confirmed answer delete
the row, rather than following the link to the confirmation
page and asking a second time. Without script the link is
what it has always been: a GET to that page. #}
{{ ff_icon("trash", size=15) }}
{{ _("Delete {name}", name=row.label) }}
|
{{ _("Nothing matches the current search and filters.") }}
{{ ff_icon("filter-off", size=15) }} {{ _("Clear search and filters") }} {% else %}{{ _("Nothing has been added to {name} yet.", name=model_title|lower) }}
{% if add_url %} {{ ff_icon("plus", size=15) }} {{ _("Add the first {name}", name=model_singular|lower) }} {% endif %} {% endif %}