import from la bonne adresse and first refactoring for ouidade.com
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
{% set originalValue = originalValue is defined ? originalValue : value %}
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
{% set vertical = field.style == 'vertical' %}
|
||||
|
||||
{% if field.yaml and value is iterable %}
|
||||
{% set value = value|toYaml %}
|
||||
{% endif %}
|
||||
|
||||
{% block field %}
|
||||
<div class="form-field grid{% if vertical %} vertical{% endif %}">
|
||||
{% block contents %}
|
||||
<div class="form-label{% if not vertical %} block size-1-3{% endif %}">
|
||||
{% if field.toggleable %}
|
||||
<span class="checkboxes toggleable" data-grav-field="toggleable" data-grav-field-name="{{ field.name|fieldName }}">
|
||||
<input type="checkbox"
|
||||
id="toggleable_{{ field.name }}"
|
||||
{% if originalValue is not null and originalValue is not empty %}value="1"{% endif %}
|
||||
name="toggleable_{{ (scope ~ field.name)|fieldName }}"
|
||||
{% if originalValue is not null and originalValue is not empty %}checked="checked"{% endif %}
|
||||
>
|
||||
<label for="toggleable_{{ field.name }}"></label>
|
||||
</span>
|
||||
{% endif %}
|
||||
<label class="{{ field.toggleable ? 'toggleable' : '' }}">
|
||||
{% block label %}
|
||||
{% if field.help %}
|
||||
<span class="hint--bottom" data-hint="{{ field.help|e|tu }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
{% endblock %}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-data{% if not vertical %} block size-2-3{% endif %}"
|
||||
{% block global_attributes %}
|
||||
data-grav-field="{{ field.type }}"
|
||||
data-grav-disabled="{{ originalValue is null ? 'true' : 'false' }}"
|
||||
data-grav-default="{{ field.default|json_encode()|e('html_attr') }}"
|
||||
{% endblock %}
|
||||
>
|
||||
{% block group %}
|
||||
{% block input %}
|
||||
<div class="form-input-wrapper {{ field.size }}">
|
||||
<input
|
||||
{# required attribute structures #}
|
||||
name="{{ (scope ~ field.name)|fieldName }}"
|
||||
value="{{ value|e('html_attr')|join(', ') }}"
|
||||
{# input attribute structures #}
|
||||
{% block input_attributes %}
|
||||
{% if field.classes is defined %}class="{{ field.classes }}" {% endif %}
|
||||
{% if field.id is defined %}id="{{ field.id|e }}" {% endif %}
|
||||
{% if field.style is defined %}style="{{ field.style|e }}" {% endif %}
|
||||
{% if field.disabled %}disabled="disabled"{% endif %}
|
||||
{% if field.placeholder %}placeholder="{{ field.placeholder|tu }}"{% endif %}
|
||||
{% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %}
|
||||
{% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %}
|
||||
{% if field.readonly in ['on', 'true', 1] %}readonly="readonly"{% endif %}
|
||||
{% if field.autocomplete in ['on', 'off'] %}autocomplete="{{ field.autocomplete }}"{% endif %}
|
||||
{% if field.validate.required in ['on', 'true', 1] %}required="required"{% endif %}
|
||||
{% if field.validate.pattern %}pattern="{{ field.validate.pattern }}"{% endif %}
|
||||
{% if field.validate.message %}title="{{ field.validate.message|e|tu }}"
|
||||
{% elseif field.title is defined %}title="{{ field.title|e|tu }}" {% endif %}
|
||||
{% endblock %}
|
||||
/>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,60 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% block global_attributes %}
|
||||
data-grav-array-name="{{ field.name|fieldName }}"
|
||||
data-grav-array-keyname="{{ field.placeholder_key|e|tu }}"
|
||||
data-grav-array-valuename="{{ field.placeholder_value|e|tu }}"
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
|
||||
{% block input %}
|
||||
<div data-grav-array-type="container"{% if field.value_only %} data-grav-array-mode="value_only"{% endif %}>
|
||||
{% if value|length %}
|
||||
{% for key, text in value -%}
|
||||
<div class="form-row{% if field.value_only %} array-field-value_only{% endif %}" data-grav-array-type="row">
|
||||
|
||||
{% if text is iterable %}
|
||||
<div class="grid" style="display: flex">
|
||||
<div class="block size-1-4">
|
||||
<input data-grav-array-type="keyArray" type="text" value="{{ key }}" placeholder="{{ field.placeholder_key|e|tu }}" style="float: none; width: 90%" />
|
||||
</div>
|
||||
|
||||
<div class="block size-3-4">
|
||||
{% for subkey, subtext in text -%}
|
||||
<div class="form-row" data-grav-array-type="subrow">
|
||||
<input data-grav-array-type="keyArraySubelement" type="text" value="{{ subkey }}" />
|
||||
<input data-grav-array-type="value" type="text" subkey="{{ subkey }}" name="{{ (field.name|fieldName) ~ '[' ~ key ~ '][' ~ subkey ~ ']' }}" value="{{ subtext|join(', ') }}" />
|
||||
|
||||
<span data-grav-array-action="remArrayItem" class="fa fa-minus-square"></span>
|
||||
<span data-grav-array-action="addArrayItem" class="fa fa-plus-square"></span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="form-row{% if field.value_only %} array-field-value_only{% endif %}" data-grav-array-type="subrow">
|
||||
<span data-grav-array-action="rem" class="fa fa-minus"></span>
|
||||
<span data-grav-array-action="add" class="fa fa-plus"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if field.value_only != true %}
|
||||
<input data-grav-array-type="key" type="text" value="{{ key }}" placeholder="{{ field.placeholder_key|e|tu }}" />
|
||||
{% endif %}
|
||||
|
||||
<input data-grav-array-type="value" type="text" name="{{ (field.name|fieldName) ~ '[' ~ key ~ ']' }}" value="{{ text|join(', ') }}" placeholder="{{ field.placeholder_value|e|tu }}" />
|
||||
|
||||
<span data-grav-array-action="rem" class="fa fa-minus"></span>
|
||||
<span data-grav-array-action="add" class="fa fa-plus"></span>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{%- else -%}
|
||||
<div class="form-row" data-grav-array-type="row">
|
||||
<input data-grav-array-type="key" type="text" placeholder="{{ field.placeholder_key|e|tu }}" />
|
||||
<input data-grav-array-type="value" type="text" placeholder="{{ field.placeholder_value|e|tu }}" />
|
||||
<span data-grav-array-action="rem" class="fa fa-minus"></span>
|
||||
<span data-grav-array-action="add" class="fa fa-plus"></span>
|
||||
</div>
|
||||
{%- endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1 @@
|
||||
<input data-grav-field="hidden" data-grav-disabled="false" type="hidden" class="input" name="{{ (scope ~ field.name)|fieldName }}" value="{{ blueprints.name }}" />
|
||||
@@ -0,0 +1,10 @@
|
||||
{% if field.fields %}
|
||||
<div class="form-column block pure-u-1-{{ cols }}">
|
||||
{% for field in field.fields %}
|
||||
{% if field.type %}
|
||||
{% set value = data.value(field.name) %}
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,9 @@
|
||||
<div class="form-columns grid pure-g">
|
||||
{% if field.fields %}
|
||||
{% set cols = field.fields|length %}
|
||||
{% for field in field.fields %}
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/column/column.html.twig'] with {'cols':cols} %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% block global_attributes %}
|
||||
data-grav-selectize="{{ (field.selectize is defined ? field.selectize : {})|json_encode()|e('html_attr') }}"
|
||||
data-grav-field="select"
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
|
||||
{% block input %}
|
||||
<div class="form-select-wrapper {{ field.size }}">
|
||||
<select class="{{ field.classes }}" name="{{ (scope ~ field.name)|fieldName ~ (field.multiple ? '[]' : '') }}"
|
||||
{% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %}
|
||||
{% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %}
|
||||
{% if field.validate.required in ['on', 'true', 1] %}required="required"{% endif %}
|
||||
{% if field.multiple in ['on', 'true', 1] %}multiple="multiple"{% endif %}
|
||||
{% if field.form %}form="{{ field.form }}"{% endif %}
|
||||
>
|
||||
{% for key, text in field.options %}
|
||||
<option {% if key == value or text in value %}selected="selected"{% endif %} value="{{ field.multiple ? text : key }}">{{ key is empty ? text : "now"|date(key)|e }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,67 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% block field %}
|
||||
<div class="form-fieldset{% if vertical %} vertical{% endif %}">
|
||||
{% block contents %}
|
||||
<input type="checkbox" class="hidden" id="fieldset_collapsible_{{ field.name }}"{% if not field.collapsible or not field.collapsed %} checked="checked"{% endif %} />
|
||||
|
||||
<div class="form-label form-fieldset--label">
|
||||
<h2>
|
||||
<label{% if field.collapsible %} for="fieldset_collapsible_{{ field.name }}" class="form-fieldset--cursor"{% endif %}>
|
||||
{% if field.help %}
|
||||
<span class="hint--bottom" data-hint="{{ field.help|e|tu }}">
|
||||
{% endif %}
|
||||
{% block label %}
|
||||
{% if field.icon %}
|
||||
<i class="fa fa-fw fa-{{ field.icon }}"></i>
|
||||
{% endif %}
|
||||
{{ field.title|tu }}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
{% if field.info %}
|
||||
<span class="form-fieldset--info">{{ field.info|tu }}</span>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% if field.help %}
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
{# Actions panel #}
|
||||
<span class="actions">
|
||||
{% block actions %}
|
||||
{% if field.collapsible %}
|
||||
<span class="form-fieldset--collapsible">
|
||||
<i class="fa fa-chevron-down open"></i>
|
||||
<i class="fa fa-chevron-up close"></i>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</span>
|
||||
</label>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="form-data"
|
||||
{#{% block global_attributes %}
|
||||
data-grav-field="{{ field.type }}"
|
||||
data-grav-disabled="{{ originalValue is null ? 'true' : 'false' }}"
|
||||
data-grav-default="{{ field.default|json_encode()|e('html_attr') }}"
|
||||
{% endblock %}#}
|
||||
>
|
||||
|
||||
{% block group %}
|
||||
{% if field.text %}
|
||||
<p>{% if grav.twig.twig.filters['tu'] is defined %}{{ field.text|tu }}{% else %}{{ field.text|t }}{% endif %}<p>
|
||||
{% endif %}
|
||||
|
||||
{% if field.fields %}
|
||||
{% for field in field.fields %}
|
||||
{% if field.type %}
|
||||
{% set value = data.value(field.name) %}
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
|
||||
<div class="form-field">
|
||||
<div class="form-label">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e|tu }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-data">
|
||||
<div class="form-frontmatter-wrapper {{ field.size }}">
|
||||
<textarea name="{{ (scope ~ field.name)|fieldName }}" id="frontmatter">{{ value|join("\n") }}</textarea>
|
||||
<div class="dragbar"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
((function(){
|
||||
var editor = CodeMirror.fromTextArea(document.getElementById('frontmatter'), {
|
||||
mode: 'yaml',
|
||||
theme: 'paper',
|
||||
{% if field.autofocus %}
|
||||
autofocus: true,
|
||||
{% endif %}
|
||||
indentUnit: 4,
|
||||
indentWithTabs: false,
|
||||
extraKeys: {Tab: function(cm) { cm.replaceSelection(" ", "end"); }}
|
||||
});
|
||||
editor.on('change', editor.save);
|
||||
|
||||
$('.dragbar').mousedown(function(e){
|
||||
e.preventDefault();
|
||||
var parentOffset = $(this).parent().offset();
|
||||
$(document).mousemove(function(e){
|
||||
$('.form-frontmatter-wrapper .CodeMirror').css('height',e.pageY - parentOffset.top);
|
||||
})
|
||||
});
|
||||
$(document).mouseup(function(e){
|
||||
$(document).unbind('mousemove');
|
||||
});
|
||||
})());
|
||||
</script>
|
||||
@@ -0,0 +1,110 @@
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
{% set name = scope ~ field.name %}
|
||||
{% set array = field.array is defined ? field.array : true %}
|
||||
{% set lastKey = null %}
|
||||
|
||||
<div class="form-field grid pure-g">
|
||||
<div class="form-label block size-1-4 pure-u-1-4">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e|tu }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-data block size-3-4 pure-u-3-4">
|
||||
<div class="form-list-wrapper {{ field.size }}" data-type="collection">
|
||||
<ul data-collection-holder="{{ name }}">
|
||||
{% if field.fields %}
|
||||
{% for key, val in value %}
|
||||
{% if array and (key matches '/^\\d+$/') == 0 %}
|
||||
{% set array = false %}
|
||||
{% set lastKey = -1 %}
|
||||
{% elseif array %}
|
||||
{% set lastKey = key %}
|
||||
{% endif %}
|
||||
{% set itemName = name ~ '.' ~ key %}
|
||||
<li data-collection-item="{{ itemName }}" data-collection-key="{{ key }}">
|
||||
{% for childName, child in field.fields %}
|
||||
{% if childName starts with '.' %}
|
||||
{% set childKey = childName|trim('.') %}
|
||||
{% set childValue = val[childName[1:]] %}
|
||||
{% set childName = itemName ~ childName %}
|
||||
{% else %}
|
||||
{% set childKey = childName %}
|
||||
{% set childValue = data.value(scope ~ childName) %}
|
||||
{% set childName = childName|replace({'*': key}) %}
|
||||
{% endif %}
|
||||
{% set child = child|merge({ name: childName }) %}
|
||||
|
||||
{% if child.type == 'key' %}
|
||||
{%
|
||||
include 'forms/fields/text/text.html.twig'
|
||||
with { field: child, value: key }
|
||||
%}
|
||||
{% elseif child.type %}
|
||||
{%
|
||||
include [
|
||||
"forms/fields/#{child.type}/#{child.type}.html.twig",
|
||||
'forms/fields/text/text.html.twig'
|
||||
] with { field: child, value: childValue }
|
||||
%}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="item-actions">
|
||||
<i class="fa fa-bars"></i>
|
||||
<br />
|
||||
<i class="fa fa-trash-o" data-action="delete"></i>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
<div class="collection-actions">
|
||||
{% set lastKey = lastKey + 1 %}
|
||||
<button class="button" type="button" data-action="add" data-key-index="{{ lastKey }}"><i class="fa fa-plus"></i> Add item</button>
|
||||
</div>
|
||||
|
||||
<script type="text/html" data-collection-template="new">
|
||||
<li data-collection-item="{{ name ~ '.*' }}">
|
||||
{% if field.fields %}
|
||||
{% set itemName = name ~ '.*' %}
|
||||
{% for childName, child in field.fields %}
|
||||
{% if childName starts with '.' %}
|
||||
{% set childKey = childName|trim('.') %}
|
||||
{% set childName = itemName ~ childName %}
|
||||
{% else %}
|
||||
{% set childKey = childName %}
|
||||
{% set childName = childName|replace({'*': key}) %}
|
||||
{% endif %}
|
||||
{% set child = child|merge({ name: childName }) %}
|
||||
|
||||
{% if child.type == 'key' %}
|
||||
{%
|
||||
include 'forms/fields/text/text.html.twig'
|
||||
with { field: child, value: null }
|
||||
%}
|
||||
{% elseif child.type %}
|
||||
{%
|
||||
include [
|
||||
"forms/fields/#{child.type}/#{child.type}.html.twig",
|
||||
'forms/fields/text/text.html.twig'
|
||||
] with { field: child, value: null }
|
||||
%}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="item-actions">
|
||||
<i class="fa fa-bars"></i>
|
||||
<br />
|
||||
<i class="fa fa-trash-o" data-action="delete"></i>
|
||||
</div>
|
||||
{% endif %}
|
||||
</li>
|
||||
</script>
|
||||
|
||||
<div style="display: none;" data-collection-config="{{ name }}" data-collection-array="{{ array ? 'true' : 'false' }}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,7 @@
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
|
||||
<div class="form-field">
|
||||
<div class="form-data form-markdown-wrapper cm-s-paper">
|
||||
<textarea data-grav-mdeditor="{{ { 'markdown': true }|json_encode|e('html_attr') }}" name="{{ (scope ~ field.name)|fieldName }}" data-grav-urlpreview="{{ base_url }}/media/{{ admin.route|trim('/') }}.json">{{ value|join("\n")|e('html') }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,49 @@
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
{% set siblings = data.parent.children.visible %}
|
||||
|
||||
|
||||
<div class="form-field grid pure-g">
|
||||
<div class="form-label block size-1-3 pure-u-1-3">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e|tu }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-data block size-2-3 pure-u-2-3">
|
||||
<div class="form-order-wrapper {{ field.size }}">
|
||||
<input type="hidden" data-order name="{{ (scope ~ field.name)|fieldName }}" value="{{ value }}" />
|
||||
{% if data.parent.header.content.items %}
|
||||
<span class="note">Parent setting order, ordering disabled</span>
|
||||
{% elseif not data.visible %}
|
||||
<span class="note">Page is not visible, ordering disabled</span>
|
||||
{% endif %}
|
||||
|
||||
{% if siblings|length < 200 %}
|
||||
<ul id="ordering" class="{{ field.classes }}">
|
||||
{% for page in siblings %}
|
||||
<li class="{% if page.order == value %}drag-handle{% else %}ignore{% endif %}" data-id="{{ page.slug }}">{{ page.title() }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<span class="note">Ordering via the admin is unsupported because there are more than 200 siblings</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function(){
|
||||
var el = jQuery('#ordering');
|
||||
new Sortable(el[0], {
|
||||
filter: ".ignore",
|
||||
onUpdate: function(evt){
|
||||
var index = el.children().index(jQuery(evt.item)) + 1;
|
||||
jQuery('[data-order]').val(index);
|
||||
}
|
||||
// draggable: ".drag-handle"
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
@@ -0,0 +1,160 @@
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
|
||||
{% if exists %}
|
||||
<div class="form-field">
|
||||
<div class="form-data form-uploads-wrapper">
|
||||
<h3>{{ field.label|tu }}</h3>
|
||||
<div id="gravDropzone" class="dropzone"></div>
|
||||
<span>{{ value|join("\n") }}</span>
|
||||
<script>
|
||||
$(function(){
|
||||
var URI = $('[data-media-url]').data('media-url'), thisDropzone,
|
||||
modalError = function(args){
|
||||
if (args.data.status == 'error' || args.data.status == 'unauthorized'){
|
||||
|
||||
if (args.mode == 'addBack'){
|
||||
// let's add back the file
|
||||
if (args.file instanceof File) this.addFile(args.file);
|
||||
else {
|
||||
this.files.push(args.file);
|
||||
this.options.addedfile.call(this, args.file);
|
||||
this.options.thumbnail.call(this, args.file, args.file.extras.url);
|
||||
}
|
||||
} else if (args.mode == 'removeFile') {
|
||||
args.file.rejected = true;
|
||||
this.removeFile(args.file);
|
||||
}
|
||||
|
||||
// fire up the modal
|
||||
var modalContainer = $('[data-remodal-id=generic]');
|
||||
modalContainer.find('.error-content').html(args.msg);
|
||||
$.remodal.lookup[modalContainer.data('remodal')].open();
|
||||
}
|
||||
};
|
||||
Dropzone.autoDiscover = false;
|
||||
Dropzone.confirm = function(question, accepted, rejected) {
|
||||
var modalContainer = $('[data-remodal-id=delete-media]'),
|
||||
acceptHandler = function () {
|
||||
if (accepted) {
|
||||
accepted();
|
||||
}
|
||||
$(document).off('confirm', '[data-remodal-id=delete-media]', acceptHandler);
|
||||
$(document).off('cancel', '[data-remodal-id=delete-media]', rejectHandler);
|
||||
},
|
||||
rejectHandler = function () {
|
||||
if (rejected) {
|
||||
rejected();
|
||||
}
|
||||
$(document).off('confirm', '[data-remodal-id=delete-media]', acceptHandler);
|
||||
$(document).off('cancel', '[data-remodal-id=delete-media]', rejectHandler);
|
||||
};
|
||||
|
||||
$.remodal.lookup[modalContainer.data('remodal')].open();
|
||||
$(document).on('confirm', '[data-remodal-id=delete-media]', acceptHandler);
|
||||
$(document).on('cancel', '[data-remodal-id=delete-media]', rejectHandler);
|
||||
};
|
||||
Dropzone.options.gravDropzone = {
|
||||
addRemoveLinks: false,
|
||||
dictRemoveFileConfirmation: '[placeholder]',
|
||||
acceptedFiles: $('[data-media-types]').data('media-types'),
|
||||
previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n <div class=\"dz-details\">\n <div class=\"dz-filename\"><span data-dz-name></span></div>\n <div class=\"dz-size\" data-dz-size></div>\n <img data-dz-thumbnail />\n </div>\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n <div class=\"dz-success-mark\"><span>✔</span></div>\n <div class=\"dz-error-mark\"><span>✘</span></div>\n <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>Delete</a>\n<a class=\"dz-insert\" href=\"javascript:undefined;\" data-dz-insert>Insert</a>\n</div>",
|
||||
init: function() {
|
||||
thisDropzone = this;
|
||||
$.get(URI + '/task{{ config.system.param_sep }}listmedia', function(data) {
|
||||
|
||||
$.proxy(modalError, this, {
|
||||
data: data,
|
||||
msg: '<p>An error occurred while trying to list files</p><pre>'+data.message+'</pre>'
|
||||
})();
|
||||
|
||||
if (data.results) {
|
||||
$.each(data.results, function(filename, data){
|
||||
var mockFile = { name: filename, size: data.size, accepted: true, extras: data };
|
||||
thisDropzone.files.push(mockFile);
|
||||
thisDropzone.options.addedfile.call(thisDropzone, mockFile);
|
||||
|
||||
if (filename.match(/\.(jpg|jpeg|png|gif)$/)) {
|
||||
thisDropzone.options.thumbnail.call(thisDropzone, mockFile, data.url);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$('.dz-preview').prop('draggable', 'true');
|
||||
});
|
||||
|
||||
this.on("complete", function(file) {
|
||||
if (file.accepted) {
|
||||
$('.dz-preview').prop('draggable', 'true');
|
||||
return;
|
||||
}
|
||||
var data = {status: 'error', message: 'Unsupported file type: ' + file.name.match(/\..+/).join('')};
|
||||
$.proxy(modalError, this, {
|
||||
file: file,
|
||||
data: data,
|
||||
mode: 'removeFile',
|
||||
msg: '<p>An error occurred while trying to add the file <strong>'+file.name+'</strong></p><pre>'+data.message+'</pre>'
|
||||
})();
|
||||
});
|
||||
|
||||
this.on('success', function(file, response){
|
||||
thisDropzone = this;
|
||||
$.proxy(modalError, this, {
|
||||
file: file,
|
||||
data: response,
|
||||
mode: 'removeFile',
|
||||
msg: '<p>An error occurred while trying to upload the file <strong>'+file.name+'</strong></p><pre>'+response.message+'</pre>'
|
||||
})();
|
||||
});
|
||||
|
||||
this.on('removedfile', function(file) {
|
||||
if (!file.accepted || file.rejected) return;
|
||||
thisDropzone = this;
|
||||
$.post(URI + '/task{{ config.system.param_sep }}delmedia', {filename: file.name}, function(data){
|
||||
$.proxy(modalError, thisDropzone, {
|
||||
file: file,
|
||||
data: data,
|
||||
mode: 'addBack',
|
||||
msg: '<p>An error occurred while trying to remove the file <strong>'+file.name+'</strong></p><pre>'+data.message+'</pre>'
|
||||
})();
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var dropzone = new Dropzone("#gravDropzone", { url: URI + '/task{{ config.system.param_sep }}addmedia', createImageThumbnails: { thumbnailWidth: 150} });
|
||||
|
||||
$("#gravDropzone").delegate('.dz-preview', 'dragstart', function(e){
|
||||
var uri = encodeURI($(this).find('.dz-filename').text());
|
||||
uri = uri.replace(/\(/g, '%28');
|
||||
uri = uri.replace(/\)/g, '%29');
|
||||
|
||||
var shortcode = '';
|
||||
if (!uri.match(/\.(jpg|jpeg|png|gif)$/)) {
|
||||
shortcode = '[' + decodeURI(uri) + '](' + uri + ')';
|
||||
}
|
||||
|
||||
dropzone.disable();
|
||||
$(this).addClass('hide-backface');
|
||||
e.originalEvent.dataTransfer.effectAllowed = 'copy';
|
||||
e.originalEvent.dataTransfer.setData('text', shortcode);
|
||||
});
|
||||
|
||||
$("#gravDropzone").delegate('.dz-preview', 'dragend', function(e){
|
||||
dropzone.enable();
|
||||
$(this).removeClass('hide-backface');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="form-tab">
|
||||
<div class="form-field">
|
||||
<div class="form-label">
|
||||
<label>
|
||||
You cannot add media files until you save the page. Just click 'Save' on top
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,51 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% macro options(field, pages, value, depth) %}
|
||||
|
||||
{% if field.options and depth == 0 %}
|
||||
{% for key, value in field.options %}
|
||||
<option value="{{ key|e('html_attr') }}">{{ value|t }}</option>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.show_root and depth == 0 %}
|
||||
<option value="/">/ (Root)</option>
|
||||
{% set depth = depth +1 %}
|
||||
{% endif %}
|
||||
|
||||
{% set indent = depth == 0 ? '' : repeat('-',depth) ~ ' ' %}
|
||||
|
||||
{% for page in pages.children %}
|
||||
{% if page.routable() or field.show_all %}
|
||||
<option {% if page.route == value %}selected="selected"{% endif %} value="{{ page.route }}">
|
||||
{{indent}} {{ page.menu }}
|
||||
</option>
|
||||
{% endif %}
|
||||
{% if page.children|length > 0 and (field.show_modular or not page.modular()) %}
|
||||
|
||||
{{ _self.options(field, page,value, depth + 1) }}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endmacro %}
|
||||
|
||||
{% block global_attributes %}
|
||||
data-grav-selectize="{{ (field.selectize is defined ? field.selectize : {})|json_encode()|e('html_attr') }}"
|
||||
data-grav-field="select"
|
||||
data-grav-disabled="{{ originalValue is null ? 'true' : 'false' }}"
|
||||
data-grav-default="{{ field.default|json_encode()|e('html_attr') }}"
|
||||
{% endblock %}
|
||||
|
||||
{% block input %}
|
||||
<div class="form-select-wrapper {{ field.size }}">
|
||||
<select class="{{ field.classes }}" name="{{ (scope ~ field.name)|fieldName ~ (field.multiple ? '[]' : '') }}"
|
||||
{% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %}
|
||||
{% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %}
|
||||
{% if field.validate.required in ['on', 'true', 1] %}required="required"{% endif %}
|
||||
{% if field.multiple in ['on', 'true', 1] %}multiple="multiple"{% endif %}
|
||||
>
|
||||
{{ _self.options(field,pages,value, 0) }}
|
||||
</select>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
{% if field.title %}
|
||||
<h1 {% if not field.underline %}class="no_underline"{% endif %}>{% if grav.twig.twig.filters['tu'] is defined %}{{ field.title|tu }}{% else %}{{ field.title|t }}{% endif %}</h1>
|
||||
{% endif %}
|
||||
|
||||
{% if field.text %}
|
||||
<p>{% if grav.twig.twig.filters['tu'] is defined %}{{ field.text|tu }}{% else %}{{ field.text|t }}{% endif %}<p>
|
||||
{% endif %}
|
||||
|
||||
{% if field.fields %}
|
||||
<div class="form-section">
|
||||
{% for field in field.fields %}
|
||||
{% if field.type %}
|
||||
{% set value = data.value(field.name) %}
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,11 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% block global_attributes %}
|
||||
data-grav-selectize="{{ (field.selectize is defined ? field.selectize|merge({'create': true}) : {'create': true})|json_encode()|e('html_attr') }}"
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
|
||||
{% block input_attributes %}
|
||||
type="text"
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{% if field.fields %}
|
||||
<div class="form-tab">
|
||||
{% for field in field.fields %}
|
||||
{% if field.type %}
|
||||
{% set value = data.value(field.name) %}
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,23 @@
|
||||
<div class="form-tabs">
|
||||
|
||||
{% if uri.params.tab %}
|
||||
{% set active = uri.params.tab %}
|
||||
{% elseif field.active %}
|
||||
{% set active = field.active %}
|
||||
{% else %}
|
||||
{% set active = 1 %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.fields %}
|
||||
{% for tab in field.fields %}<input type="radio" name="tab" id="tab{{ loop.index }}" class="tab-head" {{ active == loop.index ? 'checked="checked"' : '' }}/><label for="tab{{ loop.index }}">{% if grav.twig.twig.filters['tu'] is defined %}{{ tab.title|tu }}{% else %}{{ tab.title|t }}{% endif %}</label>{% endfor %}
|
||||
<div class="tab-body-wrapper">
|
||||
{% for field in field.fields %}
|
||||
{% set value = data.value(field.name) %}
|
||||
<div id="tab-body-{{ loop.index }}" class="tab-body">
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{% set taxonomies = (taxonomies is null ? admin.data('site').taxonomies : taxonomies) %}
|
||||
{% set parentname = field.name %}
|
||||
|
||||
{% for name in taxonomies %}
|
||||
|
||||
{% set value = array(data.value('header.taxonomy.' ~ name)|default([])) %}
|
||||
{% set sub_taxonomies = attribute(grav.taxonomy.taxonomy, name)|default([])|keys %}
|
||||
{% set list = []|merge(sub_taxonomies)|merge(value) %}
|
||||
|
||||
{% set field = {
|
||||
type: 'select',
|
||||
classes: 'fancy create',
|
||||
label: name|capitalize,
|
||||
name: parentname ~ '.' ~ name,
|
||||
multiple: true,
|
||||
options: list,
|
||||
selectize: {
|
||||
create: true
|
||||
}
|
||||
} %}
|
||||
|
||||
{% include ['forms/fields/select/select.html.twig'] %}
|
||||
{% endfor %}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% set options = {} %}
|
||||
{% for slug, package in admin.themes %}
|
||||
{% set option = {(slug): package.toArray().name} %}
|
||||
{% set options = options|merge(option) %}
|
||||
{% endfor %}
|
||||
|
||||
{% block global_attributes %}
|
||||
data-grav-selectize="{{ (field.selectize is defined ? field.selectize : {})|json_encode()|e('html_attr') }}"
|
||||
data-grav-field="select"
|
||||
data-grav-disabled="{{ originalValue is null ? 'true' : 'false' }}"
|
||||
data-grav-default="{{ field.default|json_encode()|e('html_attr') }}"
|
||||
{% endblock %}
|
||||
|
||||
{% block input %}
|
||||
<div class="form-select-wrapper {{ field.size }}">
|
||||
<select class="{{ field.classes }}" name="{{ (scope ~ field.name)|fieldName ~ (field.multiple ? '[]' : '') }}"
|
||||
{% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %}
|
||||
{% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %}
|
||||
{% if field.validate.required in ['on', 'true', 1] %}required="required"{% endif %}
|
||||
{% if field.multiple in ['on', 'true', 1] %}multiple="multiple"{% endif %}
|
||||
>
|
||||
{% for key, text in options %}
|
||||
<option {% if key == value or text in value %}selected="selected"{% endif %} value="{{ field.multiple ? text : key }}">{{ text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% set value = (value is null ? field.default : value) %}
|
||||
{% set value = (value is same as(false) ? 0 : value) %}
|
||||
|
||||
{% set has_hidden = false %}
|
||||
{% for key, text in field.options %}
|
||||
{% if key is empty %}
|
||||
{% set has_hidden = true %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% block global_attributes %}
|
||||
{{ parent() }}
|
||||
data-grav-field-name="{{ field.name|fieldName }}"
|
||||
{% endblock %}
|
||||
|
||||
{% block input %}
|
||||
|
||||
<div class="switch-toggle switch-grav {{ field.size }} switch-{{ field.options|length }}">
|
||||
{% for key, text in field.options %}
|
||||
{% set id = "toggle_" ~ field.name ~ key %}
|
||||
|
||||
<input type="radio"
|
||||
value="{{ key }}"
|
||||
id="{{ id }}"
|
||||
name="{{ (scope ~ field.name)|fieldName }}"
|
||||
{% if field.highlight is defined %}
|
||||
class="{{ field.highlight == '' ~ key ? 'highlight' : '' }}"
|
||||
{% endif %}
|
||||
{% if field.toggleable %}
|
||||
{% if '' ~ key == '' ~ value %}checked="checked" {% endif %}
|
||||
{% if value is defined and (key == 1 or key == '1') %}checked="checked" {% endif %}
|
||||
{% else %}
|
||||
{% if '' ~ key == '' ~ value %}checked="checked" {% endif %}
|
||||
{% endif %}
|
||||
{% if field.validate.required in ['on', 'true', 1] %}required="required"{% endif %}
|
||||
/>
|
||||
<label for="{{ id }}">{% if grav.twig.twig.filters['tu'] is defined %}{{ text|tu }}{% else %}{{ text|t }}{% endif %}</label>
|
||||
{% endfor %}
|
||||
<a></a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user