{% comment %} The typeahead's results. Each row POSTs the tag it names; the "create" row POSTs a name instead, and only appears when the term matches nothing AND the caller holds manage_crm — creating a tag changes the workspace's vocabulary, while attaching an existing one does not (SPEC §4's edit_contact_fields vs manage_crm). {% endcomment %} {% for tag in suggestions %} {% endfor %} {% if can_create %} {% comment %} hx-vals rather than hx-include: the search box is named `q` because that is what the suggestion GET reads, and including it would post `q` where the add endpoint expects `name`. escapejs is what makes the term safe inside a JSON attribute — it escapes quotes and angle brackets to \uXXXX, so a tag called `">