This commit is contained in:
Loïc Guibert
2022-09-30 20:02:02 +01:00
commit 66dafc36c3
2561 changed files with 454489 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
{% embed "forms/fields/select/select.html.twig" %}
{% block input %}
{% if not field.options and value %}
{% set field = field|merge({options: {(value): value}}) %}
{% endif %}
{{ parent() }}
{% endblock %}
{% block global_attributes %}
data-grav-filepicker
data-name="{{field.name}}"
{% if field.preview_images %}data-preview-images{% endif %}
data-value="{{value}}"
{{ parent() }}
{% endblock %}
{% endembed %}

View File

@@ -0,0 +1,177 @@
{% extends "forms/field.html.twig" %}
{% set value = (value is null ? field.default : value) %}
{% set name = field.name %}
{% set btnLabel = field.btnLabel is defined ? field.btnLabel : "PLUGIN_ADMIN.ADD_ITEM" %}
{% set btnSortLabel = field.btnSortLabel is defined ? field.btnSortLabel : "PLUGIN_ADMIN.SORT_BY" %}
{% set fieldControls = field.controls|default('bottom') %}
{% block contents %}
<div class="form-label{% if not vertical %} block size-1-3 pure-u-1-3{% endif %}">
{% if field.toggleable %}
<span class="checkboxes toggleable" data-grav-field="toggleable" data-grav-field-name="{{ (scope ~ field.name)|fieldName }}">
<input type="checkbox"
id="toggleable_{{ field.name }}"
{% if toggleableChecked %}value="1"{% endif %}
name="toggleable_{{ (scope ~ field.name)|fieldName }}"
{% if toggleableChecked %}checked="checked"{% endif %}
>
<label for="toggleable_{{ field.name }}"></label>
</span>
{% endif %}
<label{{ (field.toggleable ? ' class="toggleable" for="toggleable_' ~ field.name ~ '"')|raw }}>
{% if field.help %}
<span class="hint--bottom" data-hint="{{ field.help|t|e }}">{{ field.label|t }}</span>
{% else %}
{{ field.label|t }}
{% endif %}
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
</label>
</div>
<div class="form-data{% if not vertical %} block size-2-3 pure-u-2-3{% endif %}"
{% block global_attributes %}
data-grav-field="{{ field.type }}"
data-grav-disabled="{{ toggleableChecked }}"
data-grav-default="{{ field.default|json_encode|e('html_attr') }}"
{% endblock %}
>
<div class="form-list-wrapper {{ field.size }}" data-type="collection"
{% if field.selectunique %}
data-select-unique="{{ field.selectunique|json_encode|e('html_attr') }}"
data-max="{{ field.selectunique|length }}"
{% endif %}
{% if field.min is defined %}data-min="{{ field.min }}"{% endif %}
{% if field.max is defined and not field.selectunique %}data-max="{{ field.max }}"{% endif %}
>
{% if fieldControls in ['top', 'both'] %}
<div class="collection-actions">
{% if collapsible %}
<button class="button" type="button" data-action="expand_all"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}><i class="fa fa-chevron-circle-down"></i> {{ "PLUGIN_ADMIN.EXPAND_ALL"|t|e }}</button>
<button class="button" type="button" data-action="collapse_all"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}><i class="fa fa-chevron-circle-right"></i> {{ "PLUGIN_ADMIN.COLLAPSE_ALL"|t|e }}</button>
{% endif %}
{% if field.sortby %}
<button class="button{{ not value|length ? ' hidden' : '' }}" type="button" data-action="sort" data-action-sort="{{ field.sortby }}" data-action-sort-dir="{{ field.sortby_dir|default('asc') }}"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}><i class="fa fa-sort-amount-{{ field.sortby_dir|default('asc') }}"></i> {{ btnSortLabel|t|e }} '{{ field.sortby }}'</button>
{% endif %}
<button class="button" type="button" data-action="add"
data-action-add="{{ field.placement is same as('position') ? 'top' : field.placement|default('bottom') }}"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}
><i class="fa fa-plus"></i> {{ btnLabel|t|e }}</button>
</div>
{% endif %}
<ul {% if field.classes is defined %}class="{{ field.classes }}"{% endif %} data-collection-holder="{{ name }}"
{% if field.sort is same as(false) %}
data-collection-nosort
{% endif %}>
{% if field.fields %}
{% set collapsible = field.fields|length > 1 and (field.collapsible is not defined or field.collapsible) %}
{% for key, val in value %}
{% set item_name = name ? name ~ '.' ~ key : key %}
<li data-collection-item="{{ item_name }}"
data-collection-key="{{ key }}"
class="{{ collapsible and field.collapsed ? 'collection-collapsed' : '' }}"
{% if field.min_height %}style="min-height:{{ field.min_height }};"{% endif %}>
<div class="collection-sort"><i class="fa fa-fw fa-bars"></i></div>
{%- for child_name, child in field.fields -%}
{% set child = prepare_form_field(child, child_name, item_name) %}
{% if child %}
{% set child = child|merge({ '_list_index': item_name }) %}
{% set default_layout = 'text' %}
{% if child.type == 'key' or (child.key == true and child.type != 'list') %}
{# Special handling for the key field #}
{% set default_layout = 'key' %}
{% set child_value = key %}
{% elseif child.name == 'value' %}
{# Special handling for the value field #}
{% set child = child|merge({ name: item_name }) %}
{% set child_value = value %}
{% else %}
{% set child_value = form ? form.value(child.name) : data.value(child.name) %}
{% endif %}
{% set field_templates = include_form_field(child.type, field_layout, default_layout) %}
{% set template_data = { field: child, value: child_value } %}
{% if default_layout != 'key' %}
{% set originalValue = child_value %}
{% if child.type == 'fieldset' %}
{% set template_data = template_data|merge({val: child_value}) %}
{% endif %}
{% endif %}
{%- include field_templates with template_data -%}
{% endif %}
{% endfor %}
<div class="item-actions">
{% if collapsible %}
<i class="fa fa-chevron-circle-{{ field.collapsed ? 'right' : 'down' }}" data-action="{{ field.collapsed ? 'expand' : 'collapse' }}"></i>
<br />
{% endif %}
<i class="fa fa-trash-o" data-action="delete"></i>
</div>
</li>
{% endfor %}
{% endif %}
</ul>
{% if fieldControls in ['bottom', 'both'] %}
<div class="collection-actions">
{% if collapsible %}
<button class="button" type="button" data-action="expand_all"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}><i class="fa fa-chevron-circle-down"></i> {{ "PLUGIN_ADMIN.EXPAND_ALL"|t|e }}</button>
<button class="button" type="button" data-action="collapse_all"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}><i class="fa fa-chevron-circle-right"></i> {{ "PLUGIN_ADMIN.COLLAPSE_ALL"|t|e }}</button>
{% endif %}
{% if field.sortby %}
<button class="button{{ not value|length ? ' hidden' : '' }}" type="button" data-action="sort" data-action-sort="{{ field.sortby }}" data-action-sort-dir="{{ field.sortby_dir|default('asc') }}"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}><i class="fa fa-sort-amount-{{ field.sortby_dir|default('asc') }}"></i> {{ btnSortLabel|t|e }} '{{ field.sortby }}'</button>
{% endif %}
<button class="button" type="button" data-action="add"
data-action-add="{{ field.placement is same as('position') ? 'bottom' : field.placement|default('bottom') }}"
{% if field.disabled or isDisabledToggleable %}disabled="disabled"{% endif %}
><i class="fa fa-plus"></i> {{ btnLabel|t|e }}</button>
</div>
{% endif %}
{% set template %}
{%- set item_name = name ? name ~ '.*' : '*' -%}
<li data-collection-item="{{ item_name }}">
{% if field.sort is not same as(false) %}
<div class="collection-sort"><i class="fa fa-fw fa-bars"></i></div>
{% endif %}
{%- if field.fields -%}
{%- for child_name, child in field.fields -%}
{% set child = prepare_form_field(child, child_name, item_name) %}
{% if child %}
{% set child = child|merge({ '_list_index': item_name }) %}
{% set default_layout = 'text' %}
{% if child.type == 'key' or child.key == true %}
{# Special handling for the key field #}
{% set default_layout = 'key' %}
{% elseif child.name == 'value' %}
{# Special handling for the value field #}
{% set child = child|merge({ name: item_name }) %}
{% endif %}
{% set field_templates = include_form_field(child.type, field_layout, default_layout) %}
{% include field_templates with { field: child, value: null } %}
{% endif %}
{%- endfor %}
<div class="item-actions">
{% if collapsible %}
<i class="fa fa-chevron-circle-down" data-action="collapse"></i>
<br />
{% endif %}
<i class="fa fa-trash-o" data-action="delete"></i>
</div>
{%- endif -%}
</li>
{% endset %}
<div style="display: none;" data-collection-template="new"
data-collection-template-html="{{ template|regex_replace('/([ \r\n]+)/', ' ')|e('html_attr') }}"></div>
<div style="display: none;" data-collection-config="{{ name }}"></div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,95 @@
{% extends "forms/field.html.twig" %}
{% block field %}
{% set value = (value is null ? field.default : value) %}
{% set pagemedia = config.get('plugins.admin.pagemedia') %}
{% set pagemedia_settings = {
resolution: {
min: {
width: pagemedia.res_min_width ?: null,
height: pagemedia.res_min_height ?: null
},
max: {
width: pagemedia.res_max_width ?: null,
height: pagemedia.res_max_height ?: null
}
},
resizeWidth: pagemedia.resize_width ?: null,
resizeHeight: pagemedia.resize_height ?: null,
resizeQuality: pagemedia.resize_quality ?: 0.8
} %}
{% set route = admin ? admin.route : grav.uri.route() %}
<div class="pagemedia-field form-field grid vertical {% if field.classes is defined %}{{ field.classes }}{% endif %}">
<div class="form-label">
<label class="media-collapser">
<i class="fa fa-fw small fa-chevron-{{ pageMediaStore.collapsed ? 'right' : 'down' }}"></i>
{{ field.label|t }} <span data-pagemedia-count>({{ admin.page.media|length }})</span>
</label>
<div class="{{ pageMediaStore.collapsed ? 'hidden' : '' }}">
<input type="range" min="70" step="10" max="200" value="{{ pageMediaStore.width }}" class="media-resizer">
</div>
</div>
<div class="form-data form-uploads-wrapper">
{% set uploadLimit = grav.config.system.media.upload_limit / 1024 / 1024 %}
{% set dropzoneSettings = { maxFilesize: uploadLimit }|merge(pagemedia_settings) %}
<div id="grav-dropzone"
class="form-input-file dropzone"
{% if admin %}
data-media-url="{{ base_url }}/media/{{ route|trim('/') }}.json"
data-media-local="{{ base_url_relative_frontend|rtrim('/') }}/{{ route|trim('/') }}"
data-media-path="{{ url(context.relativePagePath) }}"
data-media-uri="{{ context.mediaUri }}"
data-dropzone-options="{{ dropzoneSettings|json_encode|e('html_attr') }}"
data-dropzone-field="{{ (scope ~ field.name)|fieldName }}"
{% else %}
data-media-url="{{ base_url }}/{{ route|trim('/') }}.json"
data-dropzone-options="{{ dropzoneSettings|json_encode|e('html_attr') }}"
data-dropzone-field="{{ (scope ~ field.name)|fieldName }}"
{% endif %}
></div>
{% if not admin or admin.session.expert == '0' %}
<input type="hidden" name="{{ (scope ~ field.name)|fieldName }}" value="{{ value|e }}" />
{% endif %}
</div>
</div>
{% if grav.browser.browser == 'msie' and grav.browser.version < 12 %}
{% do assets.addJs('plugin://form/assets/object.assign.polyfill.js') %}
{% endif %}
{% do assets.addJs('jquery', 101) %}
{% do assets.addJs('plugin://form/assets/form.vendor.js', { 'loading': 'defer', 'group': 'bottom' }) %}
{% do assets.addJs('plugin://form/assets/form.min.js', { 'loading': 'defer', 'group': 'bottom' }) %}
{% do assets.addCss('plugin://form/assets/dropzone.min.css', { 'group': 'form'}) %}
{{ assets.css('form')|raw }}
{% do assets.addInlineJs("
window.GravForm = window.GravForm || {};
window.GravForm = Object.assign({}, window.GravForm, {
translations: {
PLUGIN_FORM: {
'DROPZONE_CANCEL_UPLOAD': " ~ 'PLUGIN_FORM.DROPZONE_CANCEL_UPLOAD'|t|json_encode ~ ",
'DROPZONE_CANCEL_UPLOAD_CONFIRMATION': " ~ 'PLUGIN_FORM.DROPZONE_CANCEL_UPLOAD_CONFIRMATION'|t|json_encode ~ ",
'DROPZONE_DEFAULT_MESSAGE': " ~ 'PLUGIN_FORM.DROPZONE_DEFAULT_MESSAGE'|t|json_encode ~ ",
'DROPZONE_FALLBACK_MESSAGE': " ~ 'PLUGIN_FORM.DROPZONE_FALLBACK_MESSAGE'|t|json_encode ~ ",
'DROPZONE_FALLBACK_TEXT': " ~ 'PLUGIN_FORM.DROPZONE_FALLBACK_TEXT'|t|json_encode ~ ",
'DROPZONE_FILE_TOO_BIG': " ~ 'PLUGIN_FORM.DROPZONE_FILE_TOO_BIG'|t|json_encode ~ ",
'DROPZONE_INVALID_FILE_TYPE': " ~ 'PLUGIN_FORM.DROPZONE_INVALID_FILE_TYPE'|t|json_encode ~ ",
'DROPZONE_MAX_FILES_EXCEEDED': " ~ 'PLUGIN_FORM.DROPZONE_MAX_FILES_EXCEEDED'|t|json_encode ~ ",
'DROPZONE_REMOVE_FILE': " ~ 'PLUGIN_FORM.DROPZONE_REMOVE_FILE'|t|json_encode ~ ",
'DROPZONE_REMOVE_FILE_CONFIRMATION': " ~ 'PLUGIN_FORM.DROPZONE_REMOVE_FILE_CONFIRMATION'|t|json_encode ~ ",
'DROPZONE_RESPONSE_ERROR': " ~ 'PLUGIN_FORM.DROPZONE_RESPONSE_ERROR'|t|json_encode ~ ",
'RESOLUTION_MIN': " ~ 'PLUGIN_FORM.RESOLUTION_MIN'|t|json_encode ~ ",
'RESOLUTION_MAX': " ~ 'PLUGIN_FORM.RESOLUTION_MAX'|t|json_encode ~ "
}
}
});
", { 'group': 'bottom', 'position': 'before' }) %}
{% if not config.flex.pagemedia.dropzone.template %}
{% do config.set('flex.pagemedia.dropzone.template', true) %}
<div id="dropzone-media-template" style="display:none;">
{% include 'forms/fields/pagemedia/template.html.twig' %}
</div>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,33 @@
<div class="dz-preview dz-file-preview">
<div class="dz-image"><img data-dz-thumbnail /></div>
<div class="dz-details">
<div class="dz-size"><span data-dz-size></span></div>
<div class="dz-filename"><span data-dz-name></span></div>
</div>
<div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>
<div class="dz-error-message"><span data-dz-errormessage></span></div>
<a class="dz-remove" title="remove" href="javascript:undefined;" data-dz-remove>&times;</a>
<div class="dz-success-mark">
<svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
<title>Check</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF"></path>
</g>
</svg>
</div>
<div class="dz-error-mark">
<svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
<title>error</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">
<path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2"></path>
</g>
</g>
</svg>
</div>
</div>