Commit 1a04c978 authored by Oleksandr Kuzava's avatar Oleksandr Kuzava
Browse files

Issue #3302358: Support mutiple widgets on a single page

parent 0678dd7c
Loading
Loading
Loading
Loading
+27 −24
Original line number Diff line number Diff line
(function ($, Drupal, once, drupalSettings, cloudinary) {
  Drupal.behaviors.CloudinaryMediaLibraryWidget = {
    attach: function (context) {
      const settings = drupalSettings.cloudinary_media_library_widget || false;
      const widgetSettings = drupalSettings.cloudinary_media_library_widget || false;

      if (!settings) {
      if (!widgetSettings) {
        console.error('No settings available for the widget.');
        return;
      }

      const $progress_element = $(Drupal.theme('ajaxProgressThrobber'));

      let mediaInsertHandler = function (data) {
        const settings = widgetSettings[this.fieldName];
        const media_creation_url = 'cloudinary_media_library_widget/' + settings.bundle;
        const $fieldElement = $('#' + this.fieldWrapperId);

        $fieldElement.find('.js-media-library-selection').after($progress_element);

        $.ajax({
          url: Drupal.url(media_creation_url),
          type: 'POST',
          data: JSON.stringify(data.assets),
          dataType: 'json',
          success: function (response) {
            $fieldElement.find('.js-cloudinary-library-selection').val(response.ids.join(','));
            $fieldElement.find('.js-cloudinary-library-update-widget').trigger('mousedown');
          }
        });
      }

      once('cloudinaryMediaLibraryWidget', '.js-cloudinary-library-widget', context).forEach(function (element) {
        const settings = widgetSettings[element.dataset.fieldName];
        const cloudinary_settings = {
          cloud_name: settings.cloud_name,
          api_key: settings.api_key,
@@ -29,27 +52,6 @@
          cloudinary_settings.folder.path = settings.starting_folder;
        }

      const media_creation_url = 'cloudinary_media_library_widget/' + settings.bundle;
      const $progress_element = $(Drupal.theme('ajaxProgressThrobber'));

      let mediaInsertHandler = function (data) {
        const $fieldElement = $('#' + this.fieldWrapperId);

        $fieldElement.find('.js-media-library-selection').after($progress_element);

        $.ajax({
          url: Drupal.url(media_creation_url),
          type: 'POST',
          data: JSON.stringify(data.assets),
          dataType: 'json',
          success: function (response) {
            $fieldElement.find('.js-cloudinary-library-selection').val(response.ids.join(','));
            $fieldElement.find('.js-cloudinary-library-update-widget').trigger('mousedown');
          }
        });
      }

      once('cloudinaryMediaLibraryWidget', '.js-cloudinary-library-widget', context).forEach(function (element) {
        const widget = cloudinary.createMediaLibrary(
          cloudinary_settings,
          {
@@ -59,6 +61,7 @@
        )

        widget.fieldWrapperId = element.id;
        widget.fieldName = element.dataset.fieldName;
      });
    }
  };
+6 −3
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ class CloudinaryMediaLibraryWidget extends MediaLibraryWidget {

    $element = parent::formElement($items, $delta, $element, $form, $form_state);
    $element['#attributes']['class'][] = 'js-cloudinary-library-widget';
    $element['#attributes']['data-field-name'] = $this->fieldDefinition->getName();
    $element['media_library_selection']['#attributes']['class'][] = 'js-cloudinary-library-selection';
    $element['media_library_update_widget']['#attributes']['class'][] = 'js-cloudinary-library-update-widget';

@@ -176,7 +177,9 @@ class CloudinaryMediaLibraryWidget extends MediaLibraryWidget {
    }

    return [
      'cloudinary_media_library_widget' => $settings,
      'cloudinary_media_library_widget' => [
        $this->fieldDefinition->getName() => $settings,
      ],
    ];
  }