Chris@18: /** Chris@18: * DO NOT EDIT THIS FILE. Chris@18: * See the following change record for more information, Chris@18: * https://www.drupal.org/node/2815083 Chris@18: * @preserve Chris@18: **/ Chris@18: Chris@18: (function ($, Drupal, window) { Chris@18: Drupal.MediaLibrary = { Chris@18: currentSelection: [] Chris@18: }; Chris@18: Chris@18: Drupal.AjaxCommands.prototype.updateMediaLibrarySelection = function (ajax, response, status) { Chris@18: Object.values(response.mediaIds).forEach(function (value) { Chris@18: Drupal.MediaLibrary.currentSelection.push(value); Chris@18: }); Chris@18: }; Chris@18: Chris@18: Drupal.behaviors.MediaLibraryWidgetWarn = { Chris@18: attach: function attach(context) { Chris@18: $('.js-media-library-item a[href]', context).once('media-library-warn-link').on('click', function (e) { Chris@18: var message = Drupal.t('Unsaved changes to the form will be lost. Are you sure you want to leave?'); Chris@18: var confirmation = window.confirm(message); Chris@18: if (!confirmation) { Chris@18: e.preventDefault(); Chris@18: } Chris@18: }); Chris@18: } Chris@18: }; Chris@18: Chris@18: Drupal.behaviors.MediaLibraryTabs = { Chris@18: attach: function attach(context) { Chris@18: var $menu = $('.js-media-library-menu'); Chris@18: $menu.find('a', context).once('media-library-menu-item').on('click', function (e) { Chris@18: e.preventDefault(); Chris@18: e.stopPropagation(); Chris@18: Chris@18: var ajaxObject = Drupal.ajax({ Chris@18: wrapper: 'media-library-content', Chris@18: url: e.currentTarget.href, Chris@18: dialogType: 'ajax', Chris@18: progress: { Chris@18: type: 'fullscreen', Chris@18: message: Drupal.t('Please wait...') Chris@18: } Chris@18: }); Chris@18: Chris@18: ajaxObject.success = function (response, status) { Chris@18: var _this = this; Chris@18: Chris@18: if (this.progress.element) { Chris@18: $(this.progress.element).remove(); Chris@18: } Chris@18: if (this.progress.object) { Chris@18: this.progress.object.stopMonitoring(); Chris@18: } Chris@18: $(this.element).prop('disabled', false); Chris@18: Chris@18: Object.keys(response || {}).forEach(function (i) { Chris@18: if (response[i].command && _this.commands[response[i].command]) { Chris@18: _this.commands[response[i].command](_this, response[i], status); Chris@18: } Chris@18: }); Chris@18: Chris@18: document.getElementById('media-library-content').focus(); Chris@18: Chris@18: this.settings = null; Chris@18: }; Chris@18: ajaxObject.execute(); Chris@18: Chris@18: $menu.find('.active-tab').remove(); Chris@18: $menu.find('a').removeClass('active'); Chris@18: $(e.currentTarget).addClass('active').html(Drupal.t('@title (active tab)', { '@title': $(e.currentTarget).html() })); Chris@18: }); Chris@18: } Chris@18: }; Chris@18: Chris@18: Drupal.behaviors.MediaLibraryViewsDisplay = { Chris@18: attach: function attach(context) { Chris@18: var $view = $(context).hasClass('.js-media-library-view') ? $(context) : $('.js-media-library-view', context); Chris@18: Chris@18: $view.closest('.views-element-container').attr('id', 'media-library-view'); Chris@18: Chris@18: $('.views-display-link-widget, .views-display-link-widget_table', context).once('media-library-views-display-link').on('click', function (e) { Chris@18: e.preventDefault(); Chris@18: e.stopPropagation(); Chris@18: Chris@18: var $link = $(e.currentTarget); Chris@18: Chris@18: var loadingAnnouncement = ''; Chris@18: var displayAnnouncement = ''; Chris@18: var focusSelector = ''; Chris@18: if ($link.hasClass('views-display-link-widget')) { Chris@18: loadingAnnouncement = Drupal.t('Loading grid view.'); Chris@18: displayAnnouncement = Drupal.t('Changed to grid view.'); Chris@18: focusSelector = '.views-display-link-widget'; Chris@18: } else if ($link.hasClass('views-display-link-widget_table')) { Chris@18: loadingAnnouncement = Drupal.t('Loading table view.'); Chris@18: displayAnnouncement = Drupal.t('Changed to table view.'); Chris@18: focusSelector = '.views-display-link-widget_table'; Chris@18: } Chris@18: Chris@18: var ajaxObject = Drupal.ajax({ Chris@18: wrapper: 'media-library-view', Chris@18: url: e.currentTarget.href, Chris@18: dialogType: 'ajax', Chris@18: progress: { Chris@18: type: 'fullscreen', Chris@18: message: loadingAnnouncement || Drupal.t('Please wait...') Chris@18: } Chris@18: }); Chris@18: Chris@18: if (displayAnnouncement || focusSelector) { Chris@18: var success = ajaxObject.success; Chris@18: ajaxObject.success = function (response, status) { Chris@18: success.bind(this)(response, status); Chris@18: Chris@18: if (focusSelector) { Chris@18: $(focusSelector).focus(); Chris@18: } Chris@18: Chris@18: if (displayAnnouncement) { Chris@18: Drupal.announce(displayAnnouncement); Chris@18: } Chris@18: }; Chris@18: } Chris@18: Chris@18: ajaxObject.execute(); Chris@18: Chris@18: if (loadingAnnouncement) { Chris@18: Drupal.announce(loadingAnnouncement); Chris@18: } Chris@18: }); Chris@18: } Chris@18: }; Chris@18: Chris@18: Drupal.behaviors.MediaLibraryItemSelection = { Chris@18: attach: function attach(context, settings) { Chris@18: var $form = $('.js-media-library-views-form, .js-media-library-add-form', context); Chris@18: var currentSelection = Drupal.MediaLibrary.currentSelection; Chris@18: Chris@18: if (!$form.length) { Chris@18: return; Chris@18: } Chris@18: Chris@18: var $mediaItems = $('.js-media-library-item input[type="checkbox"]', $form); Chris@18: Chris@18: function disableItems($items) { Chris@18: $items.prop('disabled', true).closest('.js-media-library-item').addClass('media-library-item--disabled'); Chris@18: } Chris@18: Chris@18: function enableItems($items) { Chris@18: $items.prop('disabled', false).closest('.js-media-library-item').removeClass('media-library-item--disabled'); Chris@18: } Chris@18: Chris@18: function updateSelectionCount(remaining) { Chris@18: var selectItemsText = remaining < 0 ? Drupal.formatPlural(currentSelection.length, '1 item selected', '@count items selected') : Drupal.formatPlural(remaining, '@selected of @count item selected', '@selected of @count items selected', { Chris@18: '@selected': currentSelection.length Chris@18: }); Chris@18: Chris@18: $('.js-media-library-selected-count').html(selectItemsText); Chris@18: } Chris@18: Chris@18: $mediaItems.once('media-item-change').on('change', function (e) { Chris@18: var id = e.currentTarget.value; Chris@18: Chris@18: var position = currentSelection.indexOf(id); Chris@18: if (e.currentTarget.checked) { Chris@18: if (position === -1) { Chris@18: currentSelection.push(id); Chris@18: } Chris@18: } else if (position !== -1) { Chris@18: currentSelection.splice(position, 1); Chris@18: } Chris@18: Chris@18: $form.find('#media-library-modal-selection').val(currentSelection.join()).trigger('change'); Chris@18: Chris@18: $('.js-media-library-add-form-current-selection').val(currentSelection.join()); Chris@18: }); Chris@18: Chris@18: $('#media-library-modal-selection', $form).once('media-library-selection-change').on('change', function (e) { Chris@18: updateSelectionCount(settings.media_library.selection_remaining); Chris@18: Chris@18: if (currentSelection.length === settings.media_library.selection_remaining) { Chris@18: disableItems($mediaItems.not(':checked')); Chris@18: enableItems($mediaItems.filter(':checked')); Chris@18: } else { Chris@18: enableItems($mediaItems); Chris@18: } Chris@18: }); Chris@18: Chris@18: currentSelection.forEach(function (value) { Chris@18: $form.find('input[type="checkbox"][value="' + value + '"]').prop('checked', true).trigger('change'); Chris@18: }); Chris@18: Chris@18: $(window).once('media-library-selection-info').on('dialog:aftercreate', function () { Chris@18: var $buttonPane = $('.media-library-widget-modal .ui-dialog-buttonpane'); Chris@18: if (!$buttonPane.length) { Chris@18: return; Chris@18: } Chris@18: $buttonPane.append(Drupal.theme('mediaLibrarySelectionCount')); Chris@18: updateSelectionCount(settings.media_library.selection_remaining); Chris@18: }); Chris@18: } Chris@18: }; Chris@18: Chris@18: Drupal.behaviors.MediaLibraryModalClearSelection = { Chris@18: attach: function attach() { Chris@18: $(window).once('media-library-clear-selection').on('dialog:afterclose', function () { Chris@18: Drupal.MediaLibrary.currentSelection = []; Chris@18: }); Chris@18: } Chris@18: }; Chris@18: Chris@18: Drupal.theme.mediaLibrarySelectionCount = function () { Chris@18: return '
'; Chris@18: }; Chris@18: })(jQuery, Drupal, window);