Chris@0: /** Chris@0: * @file Chris@0: * Views dialog behaviors. Chris@0: */ Chris@0: Chris@17: (function($, Drupal, drupalSettings) { Chris@0: function handleDialogResize(e) { Chris@0: const $modal = $(e.currentTarget); Chris@0: const $viewsOverride = $modal.find('[data-drupal-views-offset]'); Chris@0: const $scroll = $modal.find('[data-drupal-views-scroll]'); Chris@0: let offset = 0; Chris@0: let modalHeight; Chris@0: if ($scroll.length) { Chris@0: // Add a class to do some styles adjustments. Chris@0: $modal.closest('.views-ui-dialog').addClass('views-ui-dialog-scroll'); Chris@0: // Let scroll element take all the height available. Chris@0: $scroll.css({ overflow: 'visible', height: 'auto' }); Chris@0: modalHeight = $modal.height(); Chris@17: $viewsOverride.each(function() { Chris@0: offset += $(this).outerHeight(); Chris@0: }); Chris@0: Chris@0: // Take internal padding into account. Chris@0: const scrollOffset = $scroll.outerHeight() - $scroll.height(); Chris@0: $scroll.height(modalHeight - offset - scrollOffset); Chris@0: // Reset scrolling properties. Chris@0: $modal.css('overflow', 'hidden'); Chris@0: $scroll.css('overflow', 'auto'); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Functionality for views modals. Chris@0: * Chris@0: * @type {Drupal~behavior} Chris@0: * Chris@0: * @prop {Drupal~behaviorAttach} attach Chris@0: * Attaches modal functionality for views. Chris@0: * @prop {Drupal~behaviorDetach} detach Chris@0: * Detaches the modal functionality. Chris@0: */ Chris@0: Drupal.behaviors.viewsModalContent = { Chris@0: attach(context) { Chris@17: $('body') Chris@17: .once('viewsDialog') Chris@17: .on( Chris@17: 'dialogContentResize.viewsDialog', Chris@17: '.ui-dialog-content', Chris@17: handleDialogResize, Chris@17: ); Chris@0: // When expanding details, make sure the modal is resized. Chris@17: $(context) Chris@17: .find('.scroll') Chris@17: .once('detailsUpdate') Chris@17: .on('click', 'summary', e => { Chris@17: $(e.currentTarget).trigger('dialogContentResize'); Chris@17: }); Chris@0: }, Chris@0: detach(context, settings, trigger) { Chris@0: if (trigger === 'unload') { Chris@17: $('body') Chris@17: .removeOnce('viewsDialog') Chris@17: .off('.viewsDialog'); Chris@0: } Chris@0: }, Chris@0: }; Chris@17: })(jQuery, Drupal, drupalSettings);