mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-11-02 11:26:04 +01:00
PageMedia can now be collapsed and thumbnails previewed smaller, in order to save room on the page. Selection will be remembered.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
1. [](#new)
|
||||
* Require **Grav 1.7.30**
|
||||
* PageMedia can now be collapsed and thumbnails previewed smaller, in order to save room on the page. Selection will be remembered.
|
||||
2. [](#improved)
|
||||
* Updated js dependencies
|
||||
3. [](#bugfix)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import $ from 'jquery';
|
||||
import Cookies from '../../utils/cookies.js';
|
||||
import request from '../../utils/request';
|
||||
import FilesField, { UriToMarkdown } from '../../forms/fields/files';
|
||||
import { config, translations } from 'grav-config';
|
||||
@@ -90,6 +91,13 @@ export default class PageMedia extends FilesField {
|
||||
this.dropzone.options.thumbnail.call(this.dropzone, mock, data.url);
|
||||
});
|
||||
|
||||
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
|
||||
|
||||
if (status.width) {
|
||||
const input = this.container.closest('.pagemedia-field').find('.media-resizer');
|
||||
updateMediaSizes(input, status.width, false);
|
||||
}
|
||||
|
||||
this.container.find('.dz-preview').prop('draggable', 'true');
|
||||
});
|
||||
}
|
||||
@@ -113,6 +121,13 @@ export default class PageMedia extends FilesField {
|
||||
}
|
||||
|
||||
// accepted
|
||||
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
|
||||
|
||||
if (status.width) {
|
||||
const input = this.container.closest('.pagemedia-field').find('.media-resizer');
|
||||
updateMediaSizes(input, status.width, false);
|
||||
}
|
||||
|
||||
$('.dz-preview').prop('draggable', 'true');
|
||||
}
|
||||
|
||||
@@ -204,4 +219,61 @@ export default class PageMedia extends FilesField {
|
||||
}
|
||||
}
|
||||
|
||||
export const updateMediaSizes = (input, width, store = true) => {
|
||||
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
|
||||
|
||||
const height = 150 * width / 200;
|
||||
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 });
|
||||
}
|
||||
};
|
||||
|
||||
export const updateMediaCollapseStatus = (element, store = true) => {
|
||||
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
|
||||
|
||||
element = $(element);
|
||||
const icon = element.find('i.fa');
|
||||
const container = element.closest('.pagemedia-field');
|
||||
const panel = container.find('.form-data');
|
||||
const slider = container.find('.media-resizer').parent();
|
||||
|
||||
const isCollapsed = !icon.hasClass('fa-chevron-down');
|
||||
const collapsed = !isCollapsed;
|
||||
|
||||
icon.removeClass('fa-chevron-down fa-chevron-right').addClass(isCollapsed ? 'fa-chevron-down' : 'fa-chevron-right');
|
||||
slider[isCollapsed ? 'removeClass' : 'addClass']('hidden');
|
||||
panel[isCollapsed ? 'slideDown' : 'slideUp']();
|
||||
|
||||
if (store) {
|
||||
const data = Object.assign({}, status, { collapsed });
|
||||
Cookies.set('grav-admin-pagemedia', JSON.stringify(data), { expires: Infinity });
|
||||
}
|
||||
};
|
||||
|
||||
$(document).on('input', '.media-resizer', (event) => {
|
||||
const target = $(event.currentTarget);
|
||||
const width = target.val();
|
||||
|
||||
updateMediaSizes(target, width);
|
||||
});
|
||||
|
||||
$(document).on('click', '.media-collapser', (event) => {
|
||||
updateMediaCollapseStatus(event.currentTarget);
|
||||
});
|
||||
|
||||
$(document).ready(() => {
|
||||
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
|
||||
if (status.width) {
|
||||
$('.media-resizer').each((index, input) => {
|
||||
input = $(input);
|
||||
updateMediaSizes(input, status.width, false);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export let Instance = new PageMedia();
|
||||
|
||||
13
themes/grav/css-compiled/template.css
vendored
13
themes/grav/css-compiled/template.css
vendored
@@ -4101,6 +4101,19 @@ html.remodal-is-locked {
|
||||
padding-left: 20px; }
|
||||
|
||||
/* The MIT License */
|
||||
.pagemedia-field .form-label {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-right: 1.5rem;
|
||||
align-items: center; }
|
||||
.pagemedia-field .form-label label {
|
||||
cursor: pointer;
|
||||
flex: 1; }
|
||||
|
||||
.pagemedia-field input[type="range"]::-webkit-slider-runnable-track {
|
||||
background: inherit !important;
|
||||
border: none !important; }
|
||||
|
||||
.dropzone {
|
||||
position: relative;
|
||||
border-radius: 4px;
|
||||
|
||||
File diff suppressed because one or more lines are too long
16056
themes/grav/js/admin.min.js
vendored
16056
themes/grav/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -3,6 +3,27 @@
|
||||
$preview-width: 200px;
|
||||
$preview-height: 150px;
|
||||
|
||||
.pagemedia-field {
|
||||
.form-label {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-right: 1.5rem;
|
||||
align-items: center;
|
||||
|
||||
label {
|
||||
cursor: pointer;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="range"] {
|
||||
&::-webkit-slider-runnable-track {
|
||||
background: inherit !important;
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropzone {
|
||||
position: relative;
|
||||
border-radius: $form-border-radius;
|
||||
|
||||
@@ -26,12 +26,19 @@
|
||||
{% set media_path = url(context.relativePagePath) %}
|
||||
{% set media_uri = context.mediaUri() %}
|
||||
{% set dropzone_settings = { maxFilesize: form_max_filesize }|merge(pagemedia_settings) %}
|
||||
{% set pageMediaStore = get_cookie('grav-admin-pagemedia')|default('{"width":200,"collapsed":false}')|json_decode %}
|
||||
|
||||
<div class="form-field grid vertical {% if field.classes is defined %}{{ field.classes }}{% endif %}">
|
||||
<div class="pagemedia-field form-field grid vertical {% if field.classes is defined %}{{ field.classes }}{% endif %}">
|
||||
<div class="form-label">
|
||||
<label>{{ field.label|t }}</label>
|
||||
<label class="media-collapser">
|
||||
<i class="fa fa-fw small fa-chevron-{{ pageMediaStore.collapsed ? 'right' : 'down' }}"></i>
|
||||
{{ field.label|t }} ({{ admin.page.media|length }})
|
||||
</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">
|
||||
<div class="form-data form-uploads-wrapper" style="{{ pageMediaStore.collapsed ? 'display: none;' : '' }}">
|
||||
<div id="grav-dropzone"
|
||||
class="dropzone"
|
||||
data-media-url="{{ (base_url ~ media_url)|e('html_attr') }}"
|
||||
|
||||
Reference in New Issue
Block a user