mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2026-05-07 12:26:42 +02:00
Merge branch 'release/1.10.33'
This commit is contained in:
13
CHANGELOG.md
13
CHANGELOG.md
@@ -1,3 +1,16 @@
|
||||
# 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
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: Admin Panel
|
||||
slug: admin
|
||||
type: plugin
|
||||
version: 1.10.32
|
||||
version: 1.10.33
|
||||
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' }
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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();
|
||||
|
||||
31
themes/grav/js/admin.min.js
vendored
31
themes/grav/js/admin.min.js
vendored
@@ -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__;
|
||||
/******/
|
||||
/******/ })()
|
||||
;
|
||||
;
|
||||
11
themes/grav/js/vendor.min.js
vendored
11
themes/grav/js/vendor.min.js
vendored
@@ -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) {
|
||||
|
||||
@@ -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 %}<div class="form-column block pure-u-1-{{ cols }}">{% endblock %}
|
||||
{% block outer_markup_field_close %}</div>{% endblock %}
|
||||
{% endembed %}
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
{% block field %}
|
||||
<div class="form-columns grid pure-g">
|
||||
{% 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>
|
||||
{% endblock %}
|
||||
|
||||
@@ -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 %}
|
||||
<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 %}
|
||||
|
||||
{% block outer_markup_field_close %}
|
||||
|
||||
@@ -3,17 +3,18 @@
|
||||
{% block field %}
|
||||
{% if field.security is empty or authorize(array(field.security)) %}
|
||||
|
||||
{% if field.title or field.underline %}
|
||||
<h1 class="{{ field.classes }} {{ field.underline ?: 'no_underline' }}">{{ field.title|t }}</h1>
|
||||
{% endif %}
|
||||
|
||||
{% if field.text %}
|
||||
<p>{{ field.text|t|markdown|raw }}</p>
|
||||
{% endif %}
|
||||
|
||||
{% embed 'forms/default/fields.html.twig' with {name: field.name, fields: field.fields} %}
|
||||
{% block outer_markup_field_open %}
|
||||
<div class="form-section {{ field.field_classes }} {{ field.outer_classes }}">
|
||||
|
||||
{% if field.title or field.underline %}
|
||||
<h1 class="{{ field.classes }} {{ field.underline ?: 'no_underline' }}">{{ field.title|t }}</h1>
|
||||
{% endif %}
|
||||
|
||||
{% if field.text %}
|
||||
<div class="section-text">{{ field.text|t|markdown|raw }}</div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
{% block outer_markup_field_close %}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user