{# Set classes for this component #}
{%- set classNames = "govuk-button" -%}
{%- if params.classes %}
{% set classNames = classNames + " " + params.classes %}
{% endif %}
{% if params.disabled %}
{% set classNames = classNames + " govuk-button--disabled" %}
{% endif -%}
{# Determine type of element to use, if not explicitly set #}
{%- if params.element %}
{% set element = params.element | lower %}
{% else %}
{% if params.href %}
{% set element = 'a' %}
{% else %}
{% set element = 'button' %}
{% endif %}
{% endif -%}
{% if params.isStartButton %}
{% set iconHtml %}
{#- The SVG needs `focusable="false"` so that Internet Explorer does not
treat it as an interactive element - without this it will be
'focusable' when using the keyboard to navigate. #}
{% endset %}
{% set classNames = classNames + " govuk-button--start" %}
{% endif %}
{#- Define common attributes that we can use across all element types #}
{%- set commonAttributes %} class="{{ classNames }}" data-module="govuk-button"{% for attribute, value in params.attributes %} {{attribute}}="{{value}}"{% endfor %}{% endset %}
{#- Define common attributes we can use for both button and input types #}
{%- set buttonAttributes %}{% if params.name %} name="{{ params.name }}"{% endif %}{% if params.disabled %} disabled="disabled" aria-disabled="true"{% endif %}{% if params.preventDoubleClick %} data-prevent-double-click="true"{% endif %}{% endset %}
{#- Actually create a button... or a link! #}
{%- if element == 'a' %}
{{ params.html | safe if params.html else params.text }}
{# Indentation is intentional to output HTML nicely #}
{{- iconHtml | safe | trim | indent(2, true) if iconHtml -}}
{%- elseif element == 'button' %}
{%- elseif element == 'input' %}
{%- endif %}