205 lines
7.1 KiB
Twig
205 lines
7.1 KiB
Twig
|
{% if form is null %}
|
||
|
{% set form = grav.session.getFlashObject('form') %}
|
||
|
{% endif %}
|
||
|
|
||
|
{# Keep here for Backwards Compatibility #}
|
||
|
{% include 'partials/form-messages.html.twig' %}
|
||
|
|
||
|
{% set scope = scope ?: form.scope is defined ? form.scope : 'data.' %}
|
||
|
{% set multipart = '' %}
|
||
|
{% set blueprints = blueprints ?? form.blueprint() %}
|
||
|
{% set method = form.method|upper|default('POST') %}
|
||
|
{% set client_side_validation = form.client_side_validation is not null ? form.client_side_validation : config.plugins.form.client_side_validation|defined(true) %}
|
||
|
{% set inline_errors = form.inline_errors is not null ? form.inline_errors : config.plugins.form.inline_errors(false) %}
|
||
|
|
||
|
{% set data = data ?? form.data %}
|
||
|
{% set context = context ?? data %}
|
||
|
|
||
|
{% for field in form.fields %}
|
||
|
{% if (method == 'POST' and field.type == 'file') %}
|
||
|
{% set multipart = ' enctype="multipart/form-data"' %}
|
||
|
{% endif %}
|
||
|
{% endfor %}
|
||
|
|
||
|
{% set action = action ?? (form.action ?: page.route ~ uri.params) %}
|
||
|
{% set action = (action starts with 'http') or (action starts with '#') ? action : base_url ~ action %}
|
||
|
{% set action = action|trim('/', 'right') %}
|
||
|
|
||
|
{% if (action == base_url_relative) %}
|
||
|
{% set action = base_url_relative ~ '/' %}
|
||
|
{% endif %}
|
||
|
|
||
|
{% if form.keep_alive %}
|
||
|
{% if grav.browser.browser == 'msie' and grav.browser.version < 12 %}
|
||
|
{% do assets.addJs('plugin://form/assets/object.assign.polyfill.js') %}
|
||
|
{% endif %}
|
||
|
{% do assets.addJs('plugin://form/assets/form.vendor.js', { 'group': 'bottom', 'loading': 'defer' }) %}
|
||
|
{% do assets.addJs('plugin://form/assets/form.min.js', { 'group': 'bottom', 'loading': 'defer' }) %}
|
||
|
{% endif %}
|
||
|
|
||
|
{% do assets.addInlineJs("
|
||
|
window.GravForm = window.GravForm || {};
|
||
|
window.GravForm.config = {
|
||
|
current_url: '" ~ uri.route(true) ~"',
|
||
|
base_url_relative: '" ~ base_url_relative ~ "',
|
||
|
param_sep: '"~ config.system.param_sep ~ "',
|
||
|
form_nonce: '" ~ form.getNonce() ~ "',
|
||
|
session_timeout: " ~ config.system.session.timeout ~ "
|
||
|
};
|
||
|
window.GravForm.translations = Object.assign({}, window.GravForm.translations || {}, { PLUGIN_FORM: {} });
|
||
|
", {'group': 'bottom', 'position': 'before', 'priority': 100}) %}
|
||
|
|
||
|
{# Backwards Compatibility for block overrides #}
|
||
|
{% set override_form_classes %}
|
||
|
{% block form_classes -%}
|
||
|
{{ form_outer_classes }} {{ form.classes }}
|
||
|
{%- endblock %}
|
||
|
{% endset %}
|
||
|
|
||
|
{% set override_inner_markup_fields_start %}
|
||
|
{% block inner_markup_fields_start %}{% endblock %}
|
||
|
{% endset %}
|
||
|
|
||
|
{% set override_inner_markup_fields_end %}
|
||
|
{% block inner_markup_fields_end %}{% endblock %}
|
||
|
{% endset %}
|
||
|
|
||
|
{% set override_inner_markup_fields %}
|
||
|
{% block inner_markup_fields %}
|
||
|
{% for field_name, field in form.fields %}
|
||
|
{% set field_name = field.name ?? field_name %}
|
||
|
{% if field_name and not field.validate.ignore %}
|
||
|
{%- if field_name starts with '.' -%}
|
||
|
{% set field_name = field_name[1:] %}
|
||
|
{% set field = field|merge({ name: field_name }) %}
|
||
|
{% endif %}
|
||
|
|
||
|
{% set value = form ? form.value(field_name) : data.value(field_name) %}
|
||
|
{% block inner_markup_field_open %}{% endblock %}
|
||
|
{% block field %}
|
||
|
{% include "forms/fields/#{field.type}/#{field.type}.html.twig" ignore missing %}
|
||
|
{% endblock %}
|
||
|
{% block inner_markup_field_close %}{% endblock %}
|
||
|
{% endif %}
|
||
|
{% endfor %}
|
||
|
{% endblock %}
|
||
|
{% endset %}
|
||
|
|
||
|
{% set override_inner_markup_buttons_start %}
|
||
|
{% block inner_markup_buttons_start %}
|
||
|
<div class="{{ form_button_outer_classes ?: 'buttons'}}">
|
||
|
{% endblock %}
|
||
|
{% endset %}
|
||
|
|
||
|
{% set override_inner_markup_buttons_end %}
|
||
|
{% block inner_markup_buttons_end %}
|
||
|
</div>
|
||
|
{% endblock %}
|
||
|
{% endset %}
|
||
|
|
||
|
{# Embed for HTML layout #}
|
||
|
{% embed 'forms/layouts/form.html.twig' %}
|
||
|
|
||
|
{% block embed_form_core %}
|
||
|
name="{{ form.name }}"
|
||
|
action="{{ action }}"
|
||
|
method="{{ method }}"{{ multipart|raw }}
|
||
|
{% if form.id %}id="{{ form.id }}"{% endif %}
|
||
|
{% if form.novalidate %}novalidate{% endif %}
|
||
|
{% if form.keep_alive %}data-grav-keepalive="true"{% endif %}
|
||
|
{% if form.attributes is defined %}
|
||
|
{% for key,attribute in form.attributes %}
|
||
|
{% if attribute|of_type('array') %}
|
||
|
{{ attribute.name }}="{{ attribute.value|e('html_attr') }}"
|
||
|
{% else %}
|
||
|
{{ key }}="{{ attribute|e('html_attr') }}"
|
||
|
{% endif %}
|
||
|
{% endfor %}
|
||
|
{% endif %}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block embed_form_classes -%}
|
||
|
class="{{ parent() }} {{ override_form_classes|trim }}"
|
||
|
{%- endblock %}
|
||
|
|
||
|
{% block embed_form_custom_attributes %}
|
||
|
{% for k, v in blueprints.form.attributes %}
|
||
|
{{ k }}="{{ v|e }}"
|
||
|
{% endfor %}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block embed_fields %}
|
||
|
{{ override_inner_markup_fields_start|raw }}
|
||
|
{{ override_inner_markup_fields|raw }}
|
||
|
|
||
|
{% include "forms/fields/formname/formname.html.twig" %}
|
||
|
{% include "forms/fields/formtask/formtask.html.twig" %}
|
||
|
{% include 'forms/fields/uniqueid/uniqueid.html.twig' %}
|
||
|
{{ nonce_field(form.getNonceAction() ?? 'form', form.getNonceName() ?? 'form-nonce')|raw }}
|
||
|
|
||
|
{{ override_inner_markup_fields_end|raw }}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block embed_buttons %}
|
||
|
{{ override_inner_markup_buttons_start|raw }}
|
||
|
|
||
|
{% for button in form.buttons %}
|
||
|
{% if button.outerclasses is defined %}<div class="{{ button.outerclasses }}">{% endif %}
|
||
|
|
||
|
{% if button.url %}
|
||
|
{% set button_url = button.url starts with 'http' ? button.url : base_url ~ button.url %}
|
||
|
{% endif %}
|
||
|
|
||
|
{% embed 'forms/layouts/button.html.twig' %}
|
||
|
{% block embed_button_core %}
|
||
|
{% if button.id %}id="{{ button.id }}"{% endif %}
|
||
|
{% if button.disabled %}disabled="disabled"{% endif %}
|
||
|
{% if button.name %}
|
||
|
name="{{ button.name }}"
|
||
|
{% else %}
|
||
|
{% if button.task %}name="task" value="{{ button.task }}"{% endif %}
|
||
|
{% endif %}
|
||
|
type="{{ button.type|default('submit') }}"
|
||
|
{% if button.attributes is defined %}
|
||
|
{% for key,attribute in button.attributes %}
|
||
|
{% if attribute|of_type('array') %}
|
||
|
{{ attribute.name }}="{{ attribute.value|e('html_attr') }}"
|
||
|
{% else %}
|
||
|
{{ key }}="{{ attribute|e('html_attr') }}"
|
||
|
{% endif %}
|
||
|
{% endfor %}
|
||
|
{% endif %}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block embed_button_classes %}
|
||
|
{% block button_classes %}
|
||
|
class="{{ form_button_classes ?: 'button' }} {{ button.classes }}"
|
||
|
{% endblock %}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block embed_button_content -%}
|
||
|
{%- set button_value = button.value|t|default('Submit') -%}
|
||
|
{%- if button.html -%}
|
||
|
{{- button_value|trim|raw -}}
|
||
|
{%- else -%}
|
||
|
{{- button_value|trim|e -}}
|
||
|
{%- endif -%}
|
||
|
{%- endblock %}
|
||
|
|
||
|
{% endembed %}
|
||
|
|
||
|
{% if button.outerclasses is defined %}</div>{% endif %}
|
||
|
{% endfor %}
|
||
|
|
||
|
{{ override_inner_markup_buttons_end }}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% endembed %}
|
||
|
|
||
|
|
||
|
{% if config.forms.dropzone.enabled %}
|
||
|
<div id="dropzone-template" style="display:none;">
|
||
|
{% include 'forms/dropzone/template.html.twig' %}
|
||
|
</div>
|
||
|
{% endif %}
|