{% load i18n %} {% comment %} The name is the way into the vocabulary (T004, FR-013). Given as a slot rather than the card's `title` attribute, which renders as escaped text and so cannot carry an anchor. The row renders in an isolated context holding only the object, so the address is built from the route's name and reaches for nothing else. {% endcomment %} {{ object.name }} {% if object.static_uri %} {% trans "Imported" %} {% else %} {% trans "Held here" %} {% endif %} {% if object.description %} {% comment %} Truncated in the template rather than clamped in CSS (decisions.md D14). A `line-clamp-*` class would be the tidier answer, but this package ships no stylesheet of its own and django-mvp's prebuilt one is generated from django-mvp's own templates — a utility class that upstream does not already use is absent from the build, so the class would render and do nothing, with no error to say so. A description running to several paragraphs must not push every other vocabulary off the screen (spec.md Edge Cases), and the filter holds that regardless of which stylesheet a project loads. {% endcomment %} {{ object.description|truncatewords:40 }} {% endif %} {% if object.static_uri %} {% comment %} The identifier is an outbound link (T003 reverses #140's D6): nothing is marked safe and nothing is interpolated into any attribute besides href. It points at an address this site does not control, hence rel="noopener". Which vocabularies show an identifier at all here is unchanged from #140 (decisions.md D8) — a locally authored vocabulary shows none on this page. A bare anchor, not the text component used elsewhere in this row, which always renders a paragraph element. {% endcomment %} {{ object.static_uri }} {% endif %} {% blocktrans count counter=object.concept_count %}{{ counter }} concept{% plural %}{{ counter }} concepts{% endblocktrans %}