{% macro govukDateInput(params) %} {% from "govuk_frontend_jinja/components/error-message/macro.html" import govukErrorMessage -%} {% from "govuk_frontend_jinja/components/fieldset/macro.html" import govukFieldset %} {% from "govuk_frontend_jinja/components/hint/macro.html" import govukHint %} {% from "govuk_frontend_jinja/components/input/macro.html" import govukInput %} {#- a record of other elements that we need to associate with the input using aria-describedby – for example hints or error messages -#} {% set describedBy = params.fieldset.describedBy if params.fieldset and params.fieldset.describedBy else "" %} {% if 'items' in params and params['items'] | length %} {% set dateInputItems = params['items'] %} {% else %} {% set dateInputItems = [ { 'name': "day", 'classes': "govuk-input--width-2" }, { 'name': "month", 'classes': "govuk-input--width-2" }, { 'name': "year", 'classes': "govuk-input--width-4" } ] %} {% endif %} {#- Capture the HTML so we can optionally nest it in a fieldset -#} {% set innerHtml %} {% if params.hint %} {% set hintId = params.id + "-hint" %} {% set describedBy = describedBy + " " + hintId if describedBy else hintId %} {{ govukHint({ 'id': hintId, 'classes': (params.hint.classes if params.hint and params.hint.classes), 'attributes': params.hint.attributes, 'html': params.hint.html, 'text': params.hint.text }) | trim }} {% endif %} {% if params.errorMessage %} {% set errorId = params.id + "-error" %} {% set describedBy = describedBy + " " + errorId if describedBy else errorId %} {{ govukErrorMessage({ 'id': errorId, 'classes': params.errorMessage.classes, 'attributes': params.errorMessage.attributes, 'html': params.errorMessage.html, 'text': params.errorMessage.text, 'visuallyHiddenText': params.errorMessage.visuallyHiddenText }) | trim }} {% endif %}
{% for item in dateInputItems %}
{{ govukInput({ 'label': { 'text': item.label if item.label else item.name | capitalize, 'classes': "govuk-date-input__label" }, 'id': item.id if item.id else (params.id + "-" + item.name), 'classes': "govuk-date-input__input " + (item.classes if item.classes else ''), 'name': (params.namePrefix + "-" + item.name) if params.namePrefix else item.name, 'value': item.value, 'type': "text", 'inputmode': "numeric", 'autocomplete': item.autocomplete, 'pattern': item.pattern if item.pattern else "[0-9]*", 'attributes': item.attributes }) | trim }}
{% endfor %}
{% endset %}
{% if params.fieldset %} {#- We override the fieldset's role to 'group' because otherwise JAWS does not announce the description for a fieldset comprised of text inputs, but adding the role to the fieldset always makes the output overly verbose for radio buttons or checkboxes. -#} {% call govukFieldset({ 'describedBy': describedBy, 'classes': params.fieldset.classes, 'role': 'group', 'attributes': params.fieldset.attributes, 'legend': params.fieldset.legend }) %} {{ innerHtml | trim | safe }} {% endcall %} {% else %} {{ innerHtml | trim | safe }} {% endif %}
{% endmacro %}