123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /**
- * 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);
- });
|