(Grav GitSync) Automatic Commit from Doris

This commit is contained in:
Doris 2022-04-27 06:59:37 +12:00 committed by GitSync
parent f549f83f75
commit ee6010c46c
17 changed files with 110 additions and 54 deletions

View file

@ -1,3 +1,22 @@
# v1.10.33.1
## 04/25/2022
1. [](#bugfix)
* Reverted [PR#2265](https://github.com/getgrav/grav-plugin-admin/pull/2265) as it broke sections output.
# v1.10.33
## 04/25/2022
1. [](#new)
* Require **Form 6.0.1**
2. [](#improved)
* Added support for a single `field:` vs `fields:` in element form field to store a single value to the option field
* Allow new media collapser logic to configure different cookie storage name location via `data-storage-location`
1. [](#bugfix)
* Fixed nested element form fields
* Fixed `columns` and `column` fields with `.dotted` variables inside to ignore columns and column names
* Fixed initial elements state not being restored
# v1.10.32 # v1.10.32
## 03/28/2022 ## 03/28/2022

View file

@ -1,7 +1,7 @@
name: Admin Panel name: Admin Panel
slug: admin slug: admin
type: plugin type: plugin
version: 1.10.32 version: 1.10.33.1
description: Adds an advanced administration panel to manage your site description: Adds an advanced administration panel to manage your site
icon: empire icon: empire
author: author:
@ -16,7 +16,7 @@ license: MIT
dependencies: dependencies:
- { name: grav, version: '>=1.7.32' } - { name: grav, version: '>=1.7.32' }
- { name: form, version: '>=6.0.0' } - { name: form, version: '>=6.0.1' }
- { name: login, version: '>=3.7.0' } - { name: login, version: '>=3.7.0' }
- { name: email, version: '>=3.1.6' } - { name: email, version: '>=3.1.6' }
- { name: flex-objects, version: '>=1.2.0' } - { name: flex-objects, version: '>=1.2.0' }

View file

@ -191,6 +191,8 @@ PLUGIN_ADMIN:
FILE_COULD_NOT_BE_DELETED: "File could not be deleted" FILE_COULD_NOT_BE_DELETED: "File could not be deleted"
FILE_NOT_FOUND: "File not found" FILE_NOT_FOUND: "File not found"
NO_FILE_FOUND: "No file found" NO_FILE_FOUND: "No file found"
FIELD_REORDER_SUCCESSFUL: "Media Order updated for field '%s'"
FIELD_REORDER_FAILED: "An error occurred while storing the media order for the field '%s'"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav was successfully updated to" GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav was successfully updated to"
GRAV_UPDATE_FAILED: "Grav update failed" GRAV_UPDATE_FAILED: "Grav update failed"
EVERYTHING_UPDATED: "Everything updated" EVERYTHING_UPDATED: "Everything updated"

View file

@ -8,3 +8,5 @@ $(document).on('change', '[data-grav-elements] select', (event) => {
$(`[id^="${id}_"]`).css('display', 'none'); $(`[id^="${id}_"]`).css('display', 'none');
$(`[id="${id}__${value}"]`).css('display', 'inherit'); $(`[id="${id}__${value}"]`).css('display', 'inherit');
}); });
$('[data-grav-elements] select').trigger('change');

View file

@ -140,7 +140,7 @@ export default class PageMedia extends FilesField {
if (status.width) { if (status.width) {
const input = this.container.closest('.pagemedia-field').find('.media-resizer'); const input = this.container.closest('.pagemedia-field').find('.media-resizer');
updateMediaSizes(input, status.width, false); updateMediaSizes(input[0], status.width, false);
} }
} }
@ -231,21 +231,23 @@ export default class PageMedia extends FilesField {
} }
export const updateMediaSizes = (input, width, store = true) => { export const updateMediaSizes = (input, width, store = true) => {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}'); const storageLocation = input.dataset.storageLocation || 'grav-admin-pagemedia';
const status = JSON.parse(Cookies.get(storageLocation) || '{}');
const height = 150 * width / 200; const height = 150 * width / 200;
const media = input.closest('.pagemedia-field').find('.dz-details, [data-dz-thumbnail]'); const media = $(input).closest('.pagemedia-field').find('.dz-details, [data-dz-thumbnail]');
media.css({ width, height }); media.css({ width, height });
if (store) { if (store) {
const data = Object.assign({}, status, { width }); const data = Object.assign({}, status, { width });
Cookies.set('grav-admin-pagemedia', JSON.stringify(data), { expires: Infinity }); Cookies.set(storageLocation, JSON.stringify(data), { expires: Infinity });
} }
}; };
export const updateMediaCollapseStatus = (element, store = true) => { export const updateMediaCollapseStatus = (element, store = true) => {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}'); const storageLocation = element.dataset.storageLocation || 'grav-admin-pagemedia';
const status = JSON.parse(Cookies.get(storageLocation) || '{}');
element = $(element); element = $(element);
const icon = element.find('i.fa'); const icon = element.find('i.fa');
@ -262,7 +264,7 @@ export const updateMediaCollapseStatus = (element, store = true) => {
if (store) { if (store) {
const data = Object.assign({}, status, { collapsed }); const data = Object.assign({}, status, { collapsed });
Cookies.set('grav-admin-pagemedia', JSON.stringify(data), { expires: Infinity }); Cookies.set(storageLocation, JSON.stringify(data), { expires: Infinity });
} }
}; };
@ -270,7 +272,7 @@ $(document).on('input', '.media-resizer', (event) => {
const target = $(event.currentTarget); const target = $(event.currentTarget);
const width = target.val(); const width = target.val();
updateMediaSizes(target, width); updateMediaSizes(event.currentTarget, width);
}); });
$(document).on('click', '.media-collapser', (event) => { $(document).on('click', '.media-collapser', (event) => {
@ -278,13 +280,14 @@ $(document).on('click', '.media-collapser', (event) => {
}); });
$(document).ready(() => { $(document).ready(() => {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}'); $('.media-resizer').each((index, input) => {
if (status.width) { const storageLocation = input.dataset.storageLocation || 'grav-admin-pagemedia';
$('.media-resizer').each((index, input) => { const status = JSON.parse(Cookies.get(storageLocation) || '{}');
input = $(input);
if (status.width) {
updateMediaSizes(input, status.width, false); updateMediaSizes(input, status.width, false);
}); }
} });
}); });
export let Instance = new PageMedia(); export let Instance = new PageMedia();

View file

@ -4404,7 +4404,7 @@ var PageMedia = /*#__PURE__*/function (_FilesField) {
if (status.width) { if (status.width) {
var input = this.container.closest('.pagemedia-field').find('.media-resizer'); var input = this.container.closest('.pagemedia-field').find('.media-resizer');
updateMediaSizes(input, status.width, false); updateMediaSizes(input[0], status.width, false);
} }
} }
}, { }, {
@ -4510,9 +4510,10 @@ var PageMedia = /*#__PURE__*/function (_FilesField) {
var updateMediaSizes = function updateMediaSizes(input, width) { var updateMediaSizes = function updateMediaSizes(input, width) {
var store = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var store = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}'); var storageLocation = input.dataset.storageLocation || 'grav-admin-pagemedia';
var status = JSON.parse(cookies.get(storageLocation) || '{}');
var height = 150 * width / 200; var height = 150 * width / 200;
var media = input.closest('.pagemedia-field').find('.dz-details, [data-dz-thumbnail]'); var media = external_jQuery_default()(input).closest('.pagemedia-field').find('.dz-details, [data-dz-thumbnail]');
media.css({ media.css({
width: width, width: width,
height: height height: height
@ -4522,14 +4523,15 @@ var updateMediaSizes = function updateMediaSizes(input, width) {
var data = Object.assign({}, status, { var data = Object.assign({}, status, {
width: width width: width
}); });
cookies.set('grav-admin-pagemedia', JSON.stringify(data), { cookies.set(storageLocation, JSON.stringify(data), {
expires: Infinity expires: Infinity
}); });
} }
}; };
var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) { var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) {
var store = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var store = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}'); var storageLocation = element.dataset.storageLocation || 'grav-admin-pagemedia';
var status = JSON.parse(cookies.get(storageLocation) || '{}');
element = external_jQuery_default()(element); element = external_jQuery_default()(element);
var icon = element.find('i.fa'); var icon = element.find('i.fa');
var container = element.closest('.pagemedia-field'); var container = element.closest('.pagemedia-field');
@ -4545,7 +4547,7 @@ var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) {
var data = Object.assign({}, status, { var data = Object.assign({}, status, {
collapsed: collapsed collapsed: collapsed
}); });
cookies.set('grav-admin-pagemedia', JSON.stringify(data), { cookies.set(storageLocation, JSON.stringify(data), {
expires: Infinity expires: Infinity
}); });
} }
@ -4553,20 +4555,20 @@ var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) {
external_jQuery_default()(document).on('input', '.media-resizer', function (event) { external_jQuery_default()(document).on('input', '.media-resizer', function (event) {
var target = external_jQuery_default()(event.currentTarget); var target = external_jQuery_default()(event.currentTarget);
var width = target.val(); var width = target.val();
updateMediaSizes(target, width); updateMediaSizes(event.currentTarget, width);
}); });
external_jQuery_default()(document).on('click', '.media-collapser', function (event) { external_jQuery_default()(document).on('click', '.media-collapser', function (event) {
updateMediaCollapseStatus(event.currentTarget); updateMediaCollapseStatus(event.currentTarget);
}); });
external_jQuery_default()(document).ready(function () { external_jQuery_default()(document).ready(function () {
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}'); external_jQuery_default()('.media-resizer').each(function (index, input) {
var storageLocation = input.dataset.storageLocation || 'grav-admin-pagemedia';
var status = JSON.parse(cookies.get(storageLocation) || '{}');
if (status.width) { if (status.width) {
external_jQuery_default()('.media-resizer').each(function (index, input) {
input = external_jQuery_default()(input);
updateMediaSizes(input, status.width, false); updateMediaSizes(input, status.width, false);
}); }
} });
}); });
var media_Instance = new PageMedia(); var media_Instance = new PageMedia();
;// CONCATENATED MODULE: ./app/pages/page/multilang.js ;// CONCATENATED MODULE: ./app/pages/page/multilang.js
@ -9695,6 +9697,7 @@ external_jQuery_default()(document).on('change', '[data-grav-elements] select',
external_jQuery_default()("[id^=\"".concat(id, "_\"]")).css('display', 'none'); external_jQuery_default()("[id^=\"".concat(id, "_\"]")).css('display', 'none');
external_jQuery_default()("[id=\"".concat(id, "__").concat(value, "\"]")).css('display', 'inherit'); external_jQuery_default()("[id=\"".concat(id, "__").concat(value, "\"]")).css('display', 'inherit');
}); });
external_jQuery_default()('[data-grav-elements] select').trigger('change');
;// CONCATENATED MODULE: ./app/forms/fields/index.js ;// CONCATENATED MODULE: ./app/forms/fields/index.js
@ -15265,4 +15268,4 @@ module.exports = jQuery;
/******/ Grav = __webpack_exports__; /******/ Grav = __webpack_exports__;
/******/ /******/
/******/ })() /******/ })()
; ;

View file

@ -4599,7 +4599,7 @@ return Chartist;
// If we're not in Markdown mode, fall back to normal newlineAndIndent // If we're not in Markdown mode, fall back to normal newlineAndIndent
var eolState = cm.getStateAfter(pos.line); var eolState = cm.getStateAfter(pos.line);
var inner = CodeMirror.innerMode(cm.getMode(), eolState); var inner = CodeMirror.innerMode(cm.getMode(), eolState);
if (inner.mode.name !== "markdown") { if (inner.mode.name !== "markdown" && inner.mode.helperType !== "markdown") {
cm.execCommand("newlineAndIndent"); cm.execCommand("newlineAndIndent");
return; return;
} else { } else {
@ -15331,7 +15331,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
addLegacyProps(CodeMirror); addLegacyProps(CodeMirror);
CodeMirror.version = "5.65.1"; CodeMirror.version = "5.65.2";
return CodeMirror; return CodeMirror;
@ -15840,6 +15840,11 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
stream.eatWhile(/[\w\$_]/); stream.eatWhile(/[\w\$_]/);
return "meta"; return "meta";
},
'"': function(stream, state) {
if (!stream.match('""\n')) return false;
state.tokenize = tokenTripleString;
return state.tokenize(stream, state);
} }
}, },
modeProps: {fold: ["brace", "import"]} modeProps: {fold: ["brace", "import"]}
@ -17334,7 +17339,7 @@ CodeMirror.defineMode("gfm", function(config, modeConfig) {
} }
function getTagRegexp(tagName, anchored) { function getTagRegexp(tagName, anchored) {
return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); return new RegExp((anchored ? "^" : "") + "<\/\\s*" + tagName + "\\s*>", "i");
} }
function addTags(from, to) { function addTags(from, to) {

View file

@ -1,7 +1,7 @@
{% extends "forms/field.html.twig" %} {% extends "forms/field.html.twig" %}
{% block field %} {% block field %}
{% embed 'forms/default/fields.html.twig' with {name: field.name, fields: field.fields} %} {% embed 'forms/default/fields.html.twig' with {name: name, fields: field.fields} %}
{% block outer_markup_field_open %}<div class="form-column block pure-u-1-{{ cols }}">{% endblock %} {% block outer_markup_field_open %}<div class="form-column block pure-u-1-{{ cols }}">{% endblock %}
{% block outer_markup_field_close %}</div>{% endblock %} {% block outer_markup_field_close %}</div>{% endblock %}
{% endembed %} {% endembed %}

View file

@ -3,6 +3,6 @@
{% block field %} {% block field %}
<div class="form-columns grid pure-g"> <div class="form-columns grid pure-g">
{% set cols = field.fields|length %} {% set cols = field.fields|length %}
{% include 'forms/default/fields.html.twig' with {name: field.name, fields: field.fields, fallback_field: 'column', cols: cols} %} {% include 'forms/default/fields.html.twig' with {name: field.name|parent_field, fields: field.fields, fallback_field: 'column', cols: cols} %}
</div> </div>
{% endblock %} {% endblock %}

View file

@ -1,12 +1,19 @@
{% extends "forms/field.html.twig" %} {% extends "forms/field.html.twig" %}
{% block field %} {% block field %}
{% set name = parent_name|parent_field ~ '.' ~ field.name %} {% set parent = parent_name|parent_field %}
{% set fields = prepare_form_fields(field.fields, name) %} {% set plain_name = (field.plain_name ?? field.name)|string %}
{% set name = parent ~ '.' ~ plain_name %}
{% if field.field %}
{% set fields = prepare_form_fields({(name): field.field}) %}
{% else %}
{% set fields = prepare_form_fields(field.fields, name) %}
{% endif %}
{% embed 'forms/default/fields.html.twig' with {name: name, fields: fields} %} {% embed 'forms/default/fields.html.twig' with {name: name, fields: fields} %}
{% set initial_state = field.name|string is not same as (parent_value|string) ? 'display: none;' %} {% set initial_state = plain_name is not same as (parent_value|string) ? 'display: none;' %}
{% block outer_markup_field_open %} {% block outer_markup_field_open %}
<div id="{{ parent_name ~ '__' ~ field.name|string }}" class="form-element" style="{{ initial_state }}"> <div id="{{ parent_name ~ '__' ~ plain_name }}" class="form-element" style="{{ initial_state }}">
{% endblock %} {% endblock %}
{% block outer_markup_field_close %} {% block outer_markup_field_close %}

View file

@ -1,3 +1,12 @@
# v6.0.1
## 04/25/2022
1. [](#improved)
* Improved `prepare_form_field()` twig method to include `plain_name`
1. [](#bugfix)
* Fixed `columns` and `column` fields with `.dotted` variables inside to ignore columns and column names
* Fixed `forms({ route: '/forms/_myform' })` not finding forms from non-routable pages
# v6.0.0 # v6.0.0
## 03/28/2022 ## 03/28/2022

View file

@ -1,7 +1,7 @@
name: Form name: Form
slug: form slug: form
type: plugin type: plugin
version: 6.0.0 version: 6.0.1
description: Enables the forms handling description: Enables the forms handling
icon: check-square icon: check-square
author: author:

View file

@ -90,21 +90,28 @@ class TwigExtension extends AbstractExtension
return null; return null;
} }
// If field has already been prepared, we do not need to do anything.
if (!empty($field['prepared'])) {
return $field;
}
// Check if we have just a list of fields (no name given). // Check if we have just a list of fields (no name given).
if (is_int($name)) { $fieldName = (string)($field['name'] ?? $name);
if (!is_string($name) || $name === '') {
// Look at the field.name and if not set, fall back to the key. // Look at the field.name and if not set, fall back to the key.
$name = (string)($field['name'] ?? $name); $name = $fieldName;
} }
// Make sure that the field has a name. // Make sure that the field has a name.
$name = $name ?? $field['name'] ?? null; if ($name === '') {
if (!is_string($name) || $name === '') {
return null; return null;
} }
// Prefix name with the parent name if needed. // Prefix name with the parent name if needed.
if (str_starts_with($name, '.')) { if (str_starts_with($name, '.')) {
$name = $parent ? $parent . $name : (string)substr($name, 1); $plainName = (string)substr($name, 1);
$field['plain_name'] = $plainName;
$name = $parent ? $parent . $name : $plainName;
} elseif (isset($options['key'])) { } elseif (isset($options['key'])) {
$name = str_replace('*', $options['key'], $name); $name = str_replace('*', $options['key'], $name);
} }
@ -125,6 +132,7 @@ class TwigExtension extends AbstractExtension
// Always set field name. // Always set field name.
$field['name'] = $name; $field['name'] = $name;
$field['prepared'] = true;
return $field; return $field;
} }

View file

@ -780,13 +780,11 @@ class FormPlugin extends Plugin
*/ */
public function addFormDefinition(PageInterface $page, string $name, array $form): void public function addFormDefinition(PageInterface $page, string $name, array $form): void
{ {
if (!$page->routable()) {
return;
}
$route = $page->home() ? '/' : $page->route(); $route = $page->home() ? '/' : $page->route();
if (!isset($this->forms[$route][$name])) { if (!isset($this->forms[$route][$name])) {
$form['_page_routable'] = $page->routable();
$this->forms[$route][$name] = $form; $this->forms[$route][$name] = $form;
$this->recache_forms = true; $this->recache_forms = true;
} }
@ -850,7 +848,7 @@ class FormPlugin extends Plugin
// Use fixed route for the form. // Use fixed route for the form.
$route_provided = true; $route_provided = true;
$page = $pages->find($route); $page = $pages->find($route, true);
} else { } else {
// Search form from the current page first. // Search form from the current page first.
$route_provided = false; $route_provided = false;
@ -1052,7 +1050,7 @@ class FormPlugin extends Plugin
$list = []; $list = [];
foreach ($this->forms as $route => $forms) { foreach ($this->forms as $route => $forms) {
foreach ($forms as $key => $form) { foreach ($forms as $key => $form) {
if ($name === $key) { if ($name === $key && !empty($form['_page_routable'])) {
$list[] = [$route, $key, $form]; $list[] = [$route, $key, $form];
} }
} }

View file

@ -1,7 +1,7 @@
{% extends "forms/field.html.twig" %} {% extends "forms/field.html.twig" %}
{% block field %} {% block field %}
{% embed 'forms/default/fields.html.twig' with {name: field.name, fields: field.fields} %} {% embed 'forms/default/fields.html.twig' with {name: name, fields: field.fields} %}
{% block outer_markup_field_open %}<div class="form-column {{ field.classes }}">{% endblock %} {% block outer_markup_field_open %}<div class="form-column {{ field.classes }}">{% endblock %}
{% block outer_markup_field_close %}</div>{% endblock %} {% block outer_markup_field_close %}</div>{% endblock %}
{% endembed %} {% endembed %}

View file

@ -2,6 +2,6 @@
{% block field %} {% block field %}
<div class="form-columns {{ field.classes }}"> <div class="form-columns {{ field.classes }}">
{% include 'forms/default/fields.html.twig' with {name: field.name, fields: field.fields} %} {% include 'forms/default/fields.html.twig' with {name: field.name|parent_field, fields: field.fields} %}
</div> </div>
{% endblock %} {% endblock %}

View file

@ -5,7 +5,7 @@
'type' => 'grav-plugin', 'type' => 'grav-plugin',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
'reference' => '97a332c933d346ae767003023580484cd9d64965', 'reference' => '2e6d16dbc801d605f56d2d2942cd99a8bf63550c',
'name' => 'getgrav/grav-plugin-form', 'name' => 'getgrav/grav-plugin-form',
'dev' => true, 'dev' => true,
), ),
@ -16,7 +16,7 @@
'type' => 'grav-plugin', 'type' => 'grav-plugin',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
'reference' => '97a332c933d346ae767003023580484cd9d64965', 'reference' => '2e6d16dbc801d605f56d2d2942cd99a8bf63550c',
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'google/recaptcha' => array( 'google/recaptcha' => array(