From ee6010c46c14e9c575840120f9e099e5b2eaa22b Mon Sep 17 00:00:00 2001 From: Doris Date: Wed, 27 Apr 2022 06:59:37 +1200 Subject: [PATCH] (Grav GitSync) Automatic Commit from Doris --- plugins/admin/CHANGELOG.md | 19 ++++++++++++ plugins/admin/blueprints.yaml | 4 +-- plugins/admin/languages/en.yaml | 2 ++ .../themes/grav/app/forms/fields/elements.js | 2 ++ .../admin/themes/grav/app/pages/page/media.js | 29 +++++++++-------- plugins/admin/themes/grav/js/admin.min.js | 31 ++++++++++--------- plugins/admin/themes/grav/js/vendor.min.js | 11 +++++-- .../forms/fields/column/column.html.twig | 2 +- .../forms/fields/columns/columns.html.twig | 2 +- .../forms/fields/element/element.html.twig | 15 ++++++--- plugins/form/CHANGELOG.md | 9 ++++++ plugins/form/blueprints.yaml | 2 +- plugins/form/classes/TwigExtension.php | 18 ++++++++--- plugins/form/form.php | 10 +++--- .../forms/fields/column/column.html.twig | 2 +- .../forms/fields/columns/columns.html.twig | 2 +- plugins/form/vendor/composer/installed.php | 4 +-- 17 files changed, 110 insertions(+), 54 deletions(-) diff --git a/plugins/admin/CHANGELOG.md b/plugins/admin/CHANGELOG.md index 69948bf..da183e2 100644 --- a/plugins/admin/CHANGELOG.md +++ b/plugins/admin/CHANGELOG.md @@ -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 ## 03/28/2022 diff --git a/plugins/admin/blueprints.yaml b/plugins/admin/blueprints.yaml index a236dfd..4c7caa8 100644 --- a/plugins/admin/blueprints.yaml +++ b/plugins/admin/blueprints.yaml @@ -1,7 +1,7 @@ name: Admin Panel slug: admin type: plugin -version: 1.10.32 +version: 1.10.33.1 description: Adds an advanced administration panel to manage your site icon: empire author: @@ -16,7 +16,7 @@ license: MIT dependencies: - { 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: email, version: '>=3.1.6' } - { name: flex-objects, version: '>=1.2.0' } diff --git a/plugins/admin/languages/en.yaml b/plugins/admin/languages/en.yaml index b80e3ff..3d82bcd 100644 --- a/plugins/admin/languages/en.yaml +++ b/plugins/admin/languages/en.yaml @@ -191,6 +191,8 @@ PLUGIN_ADMIN: FILE_COULD_NOT_BE_DELETED: "File could not be deleted" FILE_NOT_FOUND: "File not 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_UPDATE_FAILED: "Grav update failed" EVERYTHING_UPDATED: "Everything updated" diff --git a/plugins/admin/themes/grav/app/forms/fields/elements.js b/plugins/admin/themes/grav/app/forms/fields/elements.js index c489e90..58aaa61 100644 --- a/plugins/admin/themes/grav/app/forms/fields/elements.js +++ b/plugins/admin/themes/grav/app/forms/fields/elements.js @@ -8,3 +8,5 @@ $(document).on('change', '[data-grav-elements] select', (event) => { $(`[id^="${id}_"]`).css('display', 'none'); $(`[id="${id}__${value}"]`).css('display', 'inherit'); }); + +$('[data-grav-elements] select').trigger('change'); diff --git a/plugins/admin/themes/grav/app/pages/page/media.js b/plugins/admin/themes/grav/app/pages/page/media.js index 9a0ad73..a38d53f 100644 --- a/plugins/admin/themes/grav/app/pages/page/media.js +++ b/plugins/admin/themes/grav/app/pages/page/media.js @@ -140,7 +140,7 @@ export default class PageMedia extends FilesField { if (status.width) { 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) => { - 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 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 }); if (store) { 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) => { - 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); const icon = element.find('i.fa'); @@ -262,7 +264,7 @@ export const updateMediaCollapseStatus = (element, store = true) => { if (store) { 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 width = target.val(); - updateMediaSizes(target, width); + updateMediaSizes(event.currentTarget, width); }); $(document).on('click', '.media-collapser', (event) => { @@ -278,13 +280,14 @@ $(document).on('click', '.media-collapser', (event) => { }); $(document).ready(() => { - const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}'); - if (status.width) { - $('.media-resizer').each((index, input) => { - input = $(input); + $('.media-resizer').each((index, input) => { + const storageLocation = input.dataset.storageLocation || 'grav-admin-pagemedia'; + const status = JSON.parse(Cookies.get(storageLocation) || '{}'); + + if (status.width) { updateMediaSizes(input, status.width, false); - }); - } + } + }); }); export let Instance = new PageMedia(); diff --git a/plugins/admin/themes/grav/js/admin.min.js b/plugins/admin/themes/grav/js/admin.min.js index 990393d..a5583ba 100644 --- a/plugins/admin/themes/grav/js/admin.min.js +++ b/plugins/admin/themes/grav/js/admin.min.js @@ -4404,7 +4404,7 @@ var PageMedia = /*#__PURE__*/function (_FilesField) { if (status.width) { 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 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 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({ width: width, height: height @@ -4522,14 +4523,15 @@ var updateMediaSizes = function updateMediaSizes(input, width) { var data = Object.assign({}, status, { width: width }); - cookies.set('grav-admin-pagemedia', JSON.stringify(data), { + cookies.set(storageLocation, JSON.stringify(data), { expires: Infinity }); } }; var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) { 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); var icon = element.find('i.fa'); var container = element.closest('.pagemedia-field'); @@ -4545,7 +4547,7 @@ var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) { var data = Object.assign({}, status, { collapsed: collapsed }); - cookies.set('grav-admin-pagemedia', JSON.stringify(data), { + cookies.set(storageLocation, JSON.stringify(data), { expires: Infinity }); } @@ -4553,20 +4555,20 @@ var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) { external_jQuery_default()(document).on('input', '.media-resizer', function (event) { var target = external_jQuery_default()(event.currentTarget); var width = target.val(); - updateMediaSizes(target, width); + updateMediaSizes(event.currentTarget, width); }); external_jQuery_default()(document).on('click', '.media-collapser', function (event) { updateMediaCollapseStatus(event.currentTarget); }); 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) { - external_jQuery_default()('.media-resizer').each(function (index, input) { - input = external_jQuery_default()(input); + if (status.width) { updateMediaSizes(input, status.width, false); - }); - } + } + }); }); var media_Instance = new PageMedia(); ;// 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, "__").concat(value, "\"]")).css('display', 'inherit'); }); +external_jQuery_default()('[data-grav-elements] select').trigger('change'); ;// CONCATENATED MODULE: ./app/forms/fields/index.js @@ -15265,4 +15268,4 @@ module.exports = jQuery; /******/ Grav = __webpack_exports__; /******/ /******/ })() -; +; \ No newline at end of file diff --git a/plugins/admin/themes/grav/js/vendor.min.js b/plugins/admin/themes/grav/js/vendor.min.js index cb7a17a..686e532 100644 --- a/plugins/admin/themes/grav/js/vendor.min.js +++ b/plugins/admin/themes/grav/js/vendor.min.js @@ -4599,7 +4599,7 @@ return Chartist; // If we're not in Markdown mode, fall back to normal newlineAndIndent var eolState = cm.getStateAfter(pos.line); var inner = CodeMirror.innerMode(cm.getMode(), eolState); - if (inner.mode.name !== "markdown") { + if (inner.mode.name !== "markdown" && inner.mode.helperType !== "markdown") { cm.execCommand("newlineAndIndent"); return; } else { @@ -15331,7 +15331,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) { addLegacyProps(CodeMirror); - CodeMirror.version = "5.65.1"; + CodeMirror.version = "5.65.2"; return CodeMirror; @@ -15840,6 +15840,11 @@ CodeMirror.defineMode("clike", function(config, parserConfig) { stream.eatWhile(/[\w\$_]/); return "meta"; + }, + '"': function(stream, state) { + if (!stream.match('""\n')) return false; + state.tokenize = tokenTripleString; + return state.tokenize(stream, state); } }, modeProps: {fold: ["brace", "import"]} @@ -17334,7 +17339,7 @@ CodeMirror.defineMode("gfm", function(config, modeConfig) { } function getTagRegexp(tagName, anchored) { - return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); + return new RegExp((anchored ? "^" : "") + "<\/\\s*" + tagName + "\\s*>", "i"); } function addTags(from, to) { diff --git a/plugins/admin/themes/grav/templates/forms/fields/column/column.html.twig b/plugins/admin/themes/grav/templates/forms/fields/column/column.html.twig index 6c5d426..1308fde 100644 --- a/plugins/admin/themes/grav/templates/forms/fields/column/column.html.twig +++ b/plugins/admin/themes/grav/templates/forms/fields/column/column.html.twig @@ -1,7 +1,7 @@ {% extends "forms/field.html.twig" %} {% 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 %}
{% endblock %} {% block outer_markup_field_close %}
{% endblock %} {% endembed %} diff --git a/plugins/admin/themes/grav/templates/forms/fields/columns/columns.html.twig b/plugins/admin/themes/grav/templates/forms/fields/columns/columns.html.twig index 1a8fc00..56b04ca 100644 --- a/plugins/admin/themes/grav/templates/forms/fields/columns/columns.html.twig +++ b/plugins/admin/themes/grav/templates/forms/fields/columns/columns.html.twig @@ -3,6 +3,6 @@ {% block field %}
{% 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} %}
{% endblock %} diff --git a/plugins/admin/themes/grav/templates/forms/fields/element/element.html.twig b/plugins/admin/themes/grav/templates/forms/fields/element/element.html.twig index b9343b9..977098c 100644 --- a/plugins/admin/themes/grav/templates/forms/fields/element/element.html.twig +++ b/plugins/admin/themes/grav/templates/forms/fields/element/element.html.twig @@ -1,12 +1,19 @@ {% extends "forms/field.html.twig" %} {% block field %} - {% set name = parent_name|parent_field ~ '.' ~ field.name %} - {% set fields = prepare_form_fields(field.fields, name) %} + {% set parent = parent_name|parent_field %} + {% 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} %} - {% 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 %} -
+
{% endblock %} {% block outer_markup_field_close %} diff --git a/plugins/form/CHANGELOG.md b/plugins/form/CHANGELOG.md index 1caaf36..1422427 100644 --- a/plugins/form/CHANGELOG.md +++ b/plugins/form/CHANGELOG.md @@ -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 ## 03/28/2022 diff --git a/plugins/form/blueprints.yaml b/plugins/form/blueprints.yaml index c0bc31c..b8bc911 100644 --- a/plugins/form/blueprints.yaml +++ b/plugins/form/blueprints.yaml @@ -1,7 +1,7 @@ name: Form slug: form type: plugin -version: 6.0.0 +version: 6.0.1 description: Enables the forms handling icon: check-square author: diff --git a/plugins/form/classes/TwigExtension.php b/plugins/form/classes/TwigExtension.php index 7074255..41d417b 100644 --- a/plugins/form/classes/TwigExtension.php +++ b/plugins/form/classes/TwigExtension.php @@ -90,21 +90,28 @@ class TwigExtension extends AbstractExtension 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). - 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. - $name = (string)($field['name'] ?? $name); + $name = $fieldName; } // Make sure that the field has a name. - $name = $name ?? $field['name'] ?? null; - if (!is_string($name) || $name === '') { + if ($name === '') { return null; } // Prefix name with the parent name if needed. 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'])) { $name = str_replace('*', $options['key'], $name); } @@ -125,6 +132,7 @@ class TwigExtension extends AbstractExtension // Always set field name. $field['name'] = $name; + $field['prepared'] = true; return $field; } diff --git a/plugins/form/form.php b/plugins/form/form.php index 86c182a..c0c281b 100644 --- a/plugins/form/form.php +++ b/plugins/form/form.php @@ -780,13 +780,11 @@ class FormPlugin extends Plugin */ public function addFormDefinition(PageInterface $page, string $name, array $form): void { - if (!$page->routable()) { - return; - } - $route = $page->home() ? '/' : $page->route(); if (!isset($this->forms[$route][$name])) { + $form['_page_routable'] = $page->routable(); + $this->forms[$route][$name] = $form; $this->recache_forms = true; } @@ -850,7 +848,7 @@ class FormPlugin extends Plugin // Use fixed route for the form. $route_provided = true; - $page = $pages->find($route); + $page = $pages->find($route, true); } else { // Search form from the current page first. $route_provided = false; @@ -1052,7 +1050,7 @@ class FormPlugin extends Plugin $list = []; foreach ($this->forms as $route => $forms) { foreach ($forms as $key => $form) { - if ($name === $key) { + if ($name === $key && !empty($form['_page_routable'])) { $list[] = [$route, $key, $form]; } } diff --git a/plugins/form/templates/forms/fields/column/column.html.twig b/plugins/form/templates/forms/fields/column/column.html.twig index c387245..26c04c9 100644 --- a/plugins/form/templates/forms/fields/column/column.html.twig +++ b/plugins/form/templates/forms/fields/column/column.html.twig @@ -1,7 +1,7 @@ {% extends "forms/field.html.twig" %} {% 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 %}
{% endblock %} {% block outer_markup_field_close %}
{% endblock %} {% endembed %} diff --git a/plugins/form/templates/forms/fields/columns/columns.html.twig b/plugins/form/templates/forms/fields/columns/columns.html.twig index 98c178f..d0f9d00 100644 --- a/plugins/form/templates/forms/fields/columns/columns.html.twig +++ b/plugins/form/templates/forms/fields/columns/columns.html.twig @@ -2,6 +2,6 @@ {% block field %}
- {% 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} %}
{% endblock %} diff --git a/plugins/form/vendor/composer/installed.php b/plugins/form/vendor/composer/installed.php index 4f8ade0..7be3a17 100644 --- a/plugins/form/vendor/composer/installed.php +++ b/plugins/form/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'grav-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '97a332c933d346ae767003023580484cd9d64965', + 'reference' => '2e6d16dbc801d605f56d2d2942cd99a8bf63550c', 'name' => 'getgrav/grav-plugin-form', 'dev' => true, ), @@ -16,7 +16,7 @@ 'type' => 'grav-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '97a332c933d346ae767003023580484cd9d64965', + 'reference' => '2e6d16dbc801d605f56d2d2942cd99a8bf63550c', 'dev_requirement' => false, ), 'google/recaptcha' => array(