Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / media_library / js / media_library.widget.es6.js
diff --git a/web/core/modules/media_library/js/media_library.widget.es6.js b/web/core/modules/media_library/js/media_library.widget.es6.js
new file mode 100644 (file)
index 0000000..a784cb3
--- /dev/null
@@ -0,0 +1,120 @@
+/**
+ * @file media_library.widget.js
+ */
+(($, Drupal) => {
+  /**
+   * Allows users to re-order their selection with drag+drop.
+   */
+  Drupal.behaviors.MediaLibraryWidgetSortable = {
+    attach(context) {
+      // Allow media items to be re-sorted with drag+drop in the widget.
+      $('.js-media-library-selection', context)
+        .once('media-library-sortable')
+        .sortable({
+          tolerance: 'pointer',
+          helper: 'clone',
+          handle: '.js-media-library-item-preview',
+          stop: ({ target }) => {
+            // Update all the hidden "weight" fields.
+            $(target)
+              .children()
+              .each((index, child) => {
+                $(child)
+                  .find('.js-media-library-item-weight')
+                  .val(index);
+              });
+          },
+        });
+    },
+  };
+
+  /**
+   * Allows selection order to be set without drag+drop for accessibility.
+   */
+  Drupal.behaviors.MediaLibraryWidgetToggleWeight = {
+    attach(context) {
+      const strings = {
+        show: Drupal.t('Show media item weights'),
+        hide: Drupal.t('Hide media item weights'),
+      };
+      $('.js-media-library-widget-toggle-weight', context)
+        .once('media-library-toggle')
+        .on('click', e => {
+          e.preventDefault();
+          $(e.currentTarget)
+            .toggleClass('active')
+            .text(
+              $(e.currentTarget).hasClass('active')
+                ? strings.hide
+                : strings.show,
+            )
+            .parent()
+            .find('.js-media-library-item-weight')
+            .parent()
+            .toggle();
+        })
+        .text(strings.show);
+      $('.js-media-library-item-weight', context)
+        .once('media-library-toggle')
+        .parent()
+        .hide();
+    },
+  };
+
+  /**
+   * Warn users when clicking outgoing links from the library or widget.
+   */
+  Drupal.behaviors.MediaLibraryWidgetWarn = {
+    attach(context) {
+      $('.js-media-library-item a[href]', context)
+        .once('media-library-warn-link')
+        .on('click', e => {
+          const message = Drupal.t(
+            'Unsaved changes to the form will be lost. Are you sure you want to leave?',
+          );
+          const confirmation = window.confirm(message);
+          if (!confirmation) {
+            e.preventDefault();
+          }
+        });
+    },
+  };
+
+  /**
+   * Prevent users from selecting more items than allowed in the view.
+   */
+  Drupal.behaviors.MediaLibraryWidgetRemaining = {
+    attach(context, settings) {
+      const $view = $('.js-media-library-view', context).once(
+        'media-library-remaining',
+      );
+      $view
+        .find('.js-media-library-item input[type="checkbox"]')
+        .on('change', () => {
+          if (
+            settings.media_library &&
+            settings.media_library.selection_remaining
+          ) {
+            const $checkboxes = $view.find(
+              '.js-media-library-item input[type="checkbox"]',
+            );
+            if (
+              $checkboxes.filter(':checked').length ===
+              settings.media_library.selection_remaining
+            ) {
+              $checkboxes
+                .not(':checked')
+                .prop('disabled', true)
+                .closest('.js-media-library-item')
+                .addClass('media-library-item--disabled');
+            } else {
+              $checkboxes
+                .prop('disabled', false)
+                .closest('.js-media-library-item')
+                .removeClass('media-library-item--disabled');
+            }
+          }
+        });
+    },
+  };
+})(jQuery, Drupal);