admin-addon-media-metadata.js 4.2 KB

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