media_library_media_modify-1.0.x-dev/js/order_indicator.js

js/order_indicator.js
(($, Drupal, once) => {
  Drupal.MediaLibraryMediaModifyOrderIndicator = Drupal.MediaLibraryMediaModifyOrderIndicator || {};

  /**
   * Update the media library order indicator when loaded or media items are selected.
   *
   * @type {Drupal~behavior}
   *
   * @prop {Drupal~behaviorAttach} attach
   *   Attaches behavior to select media items.
   */
  Drupal.behaviors.MediaLibraryMediaModifyOrderIndicator = {
    attach(context, settings) {
      const [selection] = once('media-library-order-indicator', '#media-library-modal-selection', context);
      if (selection && settings.media_library_media_modify.replace_checkbox_by_order_indicator) {
        // TODO: Change when media_library moves away from jquery events.
        $(selection).on('change', () => {
          Drupal.MediaLibraryMediaModifyOrderIndicator.addOrderIndicator(context);
        });
        // Creating the indicators when the modal was loaded or the page was changed.
        Drupal.MediaLibraryMediaModifyOrderIndicator.addOrderIndicator(context);
      }
    },
  };

  /**
   * Creates or update the order indicators.
   *
   * @param {Object} context
   *   The current drupal context.
   */
  Drupal.MediaLibraryMediaModifyOrderIndicator.addOrderIndicator = (context) => {
    const form = context.querySelector('.js-media-library-views-form');
    if (!form) {
      return;
    }

    // Remove order indicator for not checked items.
    form.querySelectorAll('.js-media-library-item:not(.checked) .js-order-indicator').forEach((elem) => {
      elem.remove();
    });

    form.querySelectorAll('input[type="checkbox"]').forEach((input) => {
      // Hide the checkbox.
      input.style.display = 'none';
      const index = Drupal.MediaLibrary.currentSelection.indexOf(input.value);
      if (index >= 0) {
        const wrapper = input.closest('.js-media-library-item');
        const orderIndicator = wrapper.querySelector('.js-order-indicator');
        if (orderIndicator) {
          orderIndicator.innerText = index + 1;
        } else {
          wrapper.insertAdjacentElement('afterbegin', Drupal.theme('mediaLibraryMediaModifyOrderIndicator', index + 1));
        }
      }
    });
  };

  /**
   * Themes an order indicator for the media library items.
   *
   * @param {integer} counter
   *   The current counter.
   *
   * @return {HTMLElement}
   *   A HTMLElement for an order indicator.
   */
  Drupal.theme.mediaLibraryMediaModifyOrderIndicator = (counter) => {
    const orderIndicator = document.createElement('span');
    orderIndicator.classList.add('js-order-indicator', 'media-library-item__order-indicator');
    orderIndicator.innerText = counter;
    return orderIndicator;
  };
})(jQuery, Drupal, once);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc