119 lines
5.2 KiB
Twig
119 lines
5.2 KiB
Twig
{% macro input_hidden(name, value) %}
|
|
{% apply spaceless %}
|
|
<input type="hidden" name="{{ name }}" value="{{ value }}">
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_csrf(name) %}
|
|
{% from _self import input_hidden %}
|
|
{% apply spaceless %}
|
|
{{ input_hidden(name|default('_csrf'), csrf_token()) }}
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_text(name, class, value, type, placeholder, required, attributes, tabindex, autofocus, raw) %}
|
|
{% apply spaceless %}
|
|
<input type="{{ type|default('text') }}" {% if name|length > 0 %}name="{{ name }}"{% else %}readonly{% endif %}
|
|
class="{% if not raw|default(false) %}input__text{% if name|length < 1 %} input__text--readonly{% endif %}{% endif %}{{ class|length > 0 ? ' ' ~ class : '' }}"
|
|
{% if placeholder|length > 0 %}placeholder="{{ placeholder }}"{% endif %}
|
|
{% if value|length > 0 %}value="{{ value }}"{% endif %} {% if required|default(false) %}required{% endif %}
|
|
{% if tabindex > 0 %}tabindex="{{ tabindex }}"{% endif %} {% if autofocus|default(false) %}autofocus{% endif %}
|
|
{% for name, value in attributes|default([]) %}
|
|
{{ name }}{% if value|length > 0 %}="{{ value }}"{% endif %}
|
|
{% endfor %}>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_checkbox_raw(name, checked, class, value, radio, attributes, disabled) %}
|
|
{% apply spaceless %}
|
|
<input type="{{ radio ? 'radio' : 'checkbox' }}" class="{{ class|length > 0 ? class : 'input__checkbox__input' }}"
|
|
{% if name|length > 0 %}name="{{ name }}"{% endif %}
|
|
{% if checked %}checked{% endif %}
|
|
{% if disabled %}disabled{% endif %}
|
|
{% if value|length > 0 %}value="{{ value }}"{% endif %}
|
|
{% for name, value in attributes|default([]) %}
|
|
{{ name }}{% if value|length > 0 %}="{{ value }}"{% endif %}
|
|
{% endfor %}>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_checkbox(name, text, checked, class, value, radio, attributes, disabled) %}
|
|
{% from _self import input_checkbox_raw %}
|
|
{% apply spaceless %}
|
|
<label class="input__checkbox{% if radio %} input__checkbox--radio{% endif %}{% if disabled %} input__checkbox--disabled{% endif %}{{ class|length > 0 ? ' ' ~ class : '' }}">
|
|
{{ input_checkbox_raw(name, checked, '', value, radio, attributes, disabled) }}
|
|
<div class="input__checkbox__display">
|
|
<div class="input__checkbox__display__icon"></div>
|
|
</div>
|
|
{% if text|length > 0 %}
|
|
<div class="input__checkbox__text">
|
|
{{ text }}
|
|
</div>
|
|
{% endif %}
|
|
</label>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_file_raw(name, class, accepts, attributes) %}
|
|
{% apply spaceless %}
|
|
<input type="file" {% if name|length > 0 %}name="{{ name }}"{% endif %}
|
|
class="{{ class|length > 0 ? class : 'input__upload__input' }}"
|
|
{% if accepts|length > 0 %}accept="{{ accepts|join(',') }}"{% endif %}
|
|
{% for name, value in attributes|default([]) %}
|
|
{{ name }}{% if value|length > 0 %}="{{ value }}"{% endif %}
|
|
{% endfor %}>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_file(name, class, accepts, attributes) %}
|
|
{% from _self import input_file_raw %}
|
|
{% apply spaceless %}
|
|
<label class="input__upload">
|
|
{{ input_file_raw(name, class, accepts, attributes) }}
|
|
<div class="input__upload__selection">
|
|
Click here to select a file!
|
|
</div>
|
|
<script>
|
|
const parent = document.currentScript.parentNode,
|
|
input = parent.querySelector('input[type="file"]'),
|
|
display = parent.querySelector('.input__upload__selection');
|
|
input.addEventListener('change', ev => display.textContent = Array.from(ev.target.files).map(f => f.name).join(', '));
|
|
</script>
|
|
</label>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_select_option(value, key, selected) %}
|
|
{% apply spaceless %}
|
|
<option{% if key|length > 0 %} value="{{ key }}"{% endif %}{% if selected %} selected{% endif %}>
|
|
{{ value }}
|
|
</option>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_select(name, options, selected, value_name, key_name, only_values, class, attributes) %}
|
|
{% from _self import input_select_option %}
|
|
{% apply spaceless %}
|
|
<select class="input__select{{ class|length > 0 ? ' ' ~ class : '' }}"
|
|
{% if name|length > 0 %}name="{{ name }}"{% endif %}
|
|
{% for name, value in attributes|default([]) %}
|
|
{{ name }}{% if value|length > 0 %}="{{ value }}"{% endif %}
|
|
{% endfor %}>
|
|
{% for key, value in options %}
|
|
{% set option_value = value_name|length > 0 ? value[value_name] : value %}
|
|
{% set option_key = only_values ? '' : (key_name|length > 0 ? value[key_name] : key) %}
|
|
{{ input_select_option(option_value, option_key, option_key|default(option_value) == selected) }}
|
|
{% endfor %}
|
|
</select>
|
|
{% endapply %}
|
|
{% endmacro %}
|
|
|
|
{% macro input_colour(name, class, value) %}
|
|
{% apply spaceless %}
|
|
<label class="input__colour{% if class %} {{ class }}{% endif %}">
|
|
<div class="input__colour__overlay"></div>
|
|
<input type="color" {% if name|length > 0 %}name="{{ name }}"{% else %}readonly onclick="return false"{% endif %}
|
|
value="{{ value }}" class="input__colour__control">
|
|
</label>
|
|
{% endapply %}
|
|
{% endmacro %}
|