mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-11-06 05:15:43 +01:00
Added sortable capabilities for PageMedia
This commit is contained in:
@@ -3,6 +3,7 @@ import request from '../../utils/request';
|
|||||||
import FilesField, { UriToMarkdown } from '../../forms/fields/files';
|
import FilesField, { UriToMarkdown } from '../../forms/fields/files';
|
||||||
import { config, translations } from 'grav-config';
|
import { config, translations } from 'grav-config';
|
||||||
import { Instance as Editor } from '../../forms/fields/editor';
|
import { Instance as Editor } from '../../forms/fields/editor';
|
||||||
|
import Sortable from 'sortablejs';
|
||||||
|
|
||||||
const previewTemplate = `
|
const previewTemplate = `
|
||||||
<div class="dz-preview dz-file-preview">
|
<div class="dz-preview dz-file-preview">
|
||||||
@@ -42,6 +43,31 @@ export default class PageMedia extends FilesField {
|
|||||||
if (typeof this.options.attachDragDrop === 'undefined' || this.options.attachDragDrop) {
|
if (typeof this.options.attachDragDrop === 'undefined' || this.options.attachDragDrop) {
|
||||||
this.attachDragDrop();
|
this.attachDragDrop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.sortable = new Sortable(this.container.get(0), {
|
||||||
|
animation: 150,
|
||||||
|
// forceFallback: true,
|
||||||
|
setData: (dataTransfer, target) => {
|
||||||
|
target = $(target);
|
||||||
|
let uri = encodeURI(target.find('.dz-filename').text());
|
||||||
|
let shortcode = UriToMarkdown(uri);
|
||||||
|
this.dropzone.disable();
|
||||||
|
target.addClass('hide-backface');
|
||||||
|
dataTransfer.effectAllowed = 'copy';
|
||||||
|
dataTransfer.setData('text', shortcode);
|
||||||
|
},
|
||||||
|
onSort: () => {
|
||||||
|
const field = $(`[name="${this.container.data('dropzone-field')}"]`);
|
||||||
|
let names = [];
|
||||||
|
this.container.find('[data-dz-name]').each((index, file) => {
|
||||||
|
file = $(file);
|
||||||
|
const name = file.text().trim();
|
||||||
|
names.push(name);
|
||||||
|
});
|
||||||
|
|
||||||
|
field.val(names.join(','));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchMedia() {
|
fetchMedia() {
|
||||||
@@ -76,11 +102,17 @@ export default class PageMedia extends FilesField {
|
|||||||
|
|
||||||
onDropzoneComplete(file) {
|
onDropzoneComplete(file) {
|
||||||
super.onDropzoneComplete(file);
|
super.onDropzoneComplete(file);
|
||||||
|
this.sortable.options.onSort();
|
||||||
|
|
||||||
// accepted
|
// accepted
|
||||||
$('.dz-preview').prop('draggable', 'true');
|
$('.dz-preview').prop('draggable', 'true');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDropzoneRemovedFile(file, ...extra) {
|
||||||
|
super.onDropzoneRemovedFile(file, ...extra);
|
||||||
|
this.sortable.options.onSort();
|
||||||
|
}
|
||||||
|
|
||||||
attachDragDrop() {
|
attachDragDrop() {
|
||||||
this.container.delegate('[data-dz-insert]', 'click', (e) => {
|
this.container.delegate('[data-dz-insert]', 'click', (e) => {
|
||||||
let target = $(e.currentTarget).parent('.dz-preview').find('.dz-filename');
|
let target = $(e.currentTarget).parent('.dz-preview').find('.dz-filename');
|
||||||
|
|||||||
4
themes/grav/js/admin.min.js
vendored
4
themes/grav/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -13,8 +13,9 @@
|
|||||||
data-media-url="{{ base_url }}/media/{{ admin.route|trim('/') }}.json"
|
data-media-url="{{ base_url }}/media/{{ admin.route|trim('/') }}.json"
|
||||||
data-media-local="{{ base_url_relative_frontend|rtrim('/') }}/{{ admin.route|trim('/') }}"
|
data-media-local="{{ base_url_relative_frontend|rtrim('/') }}/{{ admin.route|trim('/') }}"
|
||||||
data-media-path="{{ url(context.relativePagePath) }}"
|
data-media-path="{{ url(context.relativePagePath) }}"
|
||||||
data-dropzone-options="{{ dropzoneSettings|json_encode|e('html_attr') }}"></div>
|
data-dropzone-options="{{ dropzoneSettings|json_encode|e('html_attr') }}"
|
||||||
<span>{{ value|join("\n") }}</span>
|
data-dropzone-field="{{ (scope ~ field.name)|fieldName }}"></div>
|
||||||
|
<input type="hidden" name="{{ (scope ~ field.name)|fieldName }}" value="{{ value|e }}" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
Reference in New Issue
Block a user