-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadmin-addon-media-metadata.js
113 lines (98 loc) · 4.28 KB
/
admin-addon-media-metadata.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
* some of the code is based on the Admin Addon Media Rename by Dávid Szabó
* see https://github.com/david-szabo97/grav-plugin-admin-addon-media-rename
*/
$(function() {
adminAddonMediaMetadata.metadata = {};
var clickedElement;
var fileName;
var $elementName;
var modal;
var $modal;
var isPageMedia = false;
// Append modal
$('body').append(adminAddonMediaMetadata.MODAL);
$(document).off('click', '[data-dz-name], .dz-metadata-edit');
$(document).on('click', '[data-dz-name], .dz-metadata-edit', function(e) {
clickedElement = $(this);
modal = $.remodal.lookup[$('[data-remodal-id=modal-admin-addon-media-metadata]').data('remodal')];
$modal = modal.$modal;
modal.open();
// Populate fields
elementName = clickedElement.closest('.dz-preview').find('[data-dz-name]')
fileName = elementName.text();
$('[name=filename]', $modal).val(fileName);
if (mediaListOnLoad[fileName] !== undefined) {
for (var i = 0; i < metadataFormFields.length; i++) {
$('[name=' + metadataFormFields[i] + ']', $modal).val(mediaListOnLoad[fileName][metadataFormFields[i]]);
}
} else {
for (var i = 0; i < metadataFormFields.length; i++) {
$('[name=' + metadataFormFields[i] + ']', $modal).val('');
}
}
$modal.find('form span.filename').text(fileName);
// Reset loading state
$('.loading', $modal).addClass('hidden');
// $('.button', $modal).removeClass('hidden').css('visibility', 'hidden');
$('.button', $modal).removeClass('hidden');
isPageMedia = !clickedElement.closest('.dz-preview').hasClass('dz-no-editor');
$modal.find('.block-toggle').toggleClass('hidden', !isPageMedia);
$modal.find('.page-media-info').toggleClass('hidden', !isPageMedia);
$modal.find('.non-page-media-info').toggleClass('hidden', isPageMedia);
});
/**
* add the new data dynamically to mediaListOnLoad JSON object
* for newly uploaded media files as well as for “older” files, overwriting the data already in that JSON object
* and save it in the YAML file
* Variables from above ($(document).on), like fileName and $modal are still available
*/
$(document).on('click', '[data-remodal-id=modal-admin-addon-media-metadata] .button', function(e) {
// hiding the button and showing the loading icon
$('.loading', $modal).removeClass('hidden');
$('.button', $modal).addClass('hidden');
// create the file object for newly uploaded files
if (mediaListOnLoad[fileName] === undefined) {
mediaListOnLoad[fileName] = new Object();
mediaListOnLoad[fileName]['filename'] = fileName;
}
// Do request with JS Fetch API: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
var data = new FormData();
data.append('filename', fileName);
data.append('admin-nonce', GravAdmin.config.admin_nonce);
// add the new values to mediaListOnLoad (for later updates before page reload)
// append the new values to the FormData (data.append)
for (var i = 0; i < metadataFormFields.length; i++) {
var newVal = $('[name=' + metadataFormFields[i] + ']', $modal).val();
mediaListOnLoad[fileName][metadataFormFields[i]] = newVal;
data.append(metadataFormFields[i], newVal);
}
fetch(adminAddonMediaMetadata.PATH, { method: 'POST', body: data, credentials: 'same-origin' })
//.then(res => res.json())
.then(result => {
if (result.error) {
var alertModal = $.remodal.lookup[$('[data-remodal-id=modal-admin-addon-media-metadata-alert]').data('remodal')];
alertModal.open();
$('p', alertModal.$modal).html(result.error.msg);
return;
}
modal.close();
});
});
// adding the “edit metadata” button next to all media files
setInterval(function addMetadataButton() {
$('.dz-preview').each(function(i, dz) {
if ($(this).find('.dz-metadata-edit').length == 0) {
var editButton = document.createElement('a');
//editButton.href = 'javascript:undefined;';
editButton.title = adminAddonMediaMetadataButton;
editButton.className = 'dz-metadata-edit';
editButton.innerText = adminAddonMediaMetadataButton;
var fileName = $(this).find('[data-dz-name]').text();
editButton.setAttribute('data-filename', fileName);
$(this).append(editButton);
}
$(this).find('.dz-metadata').remove();
});
}, 1000);
});