annotate core/modules/views_ui/js/dialog.views.es6.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 /**
Chris@0 2 * @file
Chris@0 3 * Views dialog behaviors.
Chris@0 4 */
Chris@0 5
Chris@17 6 (function($, Drupal, drupalSettings) {
Chris@0 7 function handleDialogResize(e) {
Chris@0 8 const $modal = $(e.currentTarget);
Chris@0 9 const $viewsOverride = $modal.find('[data-drupal-views-offset]');
Chris@0 10 const $scroll = $modal.find('[data-drupal-views-scroll]');
Chris@0 11 let offset = 0;
Chris@0 12 let modalHeight;
Chris@0 13 if ($scroll.length) {
Chris@0 14 // Add a class to do some styles adjustments.
Chris@0 15 $modal.closest('.views-ui-dialog').addClass('views-ui-dialog-scroll');
Chris@0 16 // Let scroll element take all the height available.
Chris@0 17 $scroll.css({ overflow: 'visible', height: 'auto' });
Chris@0 18 modalHeight = $modal.height();
Chris@17 19 $viewsOverride.each(function() {
Chris@0 20 offset += $(this).outerHeight();
Chris@0 21 });
Chris@0 22
Chris@0 23 // Take internal padding into account.
Chris@0 24 const scrollOffset = $scroll.outerHeight() - $scroll.height();
Chris@0 25 $scroll.height(modalHeight - offset - scrollOffset);
Chris@0 26 // Reset scrolling properties.
Chris@0 27 $modal.css('overflow', 'hidden');
Chris@0 28 $scroll.css('overflow', 'auto');
Chris@0 29 }
Chris@0 30 }
Chris@0 31
Chris@0 32 /**
Chris@0 33 * Functionality for views modals.
Chris@0 34 *
Chris@0 35 * @type {Drupal~behavior}
Chris@0 36 *
Chris@0 37 * @prop {Drupal~behaviorAttach} attach
Chris@0 38 * Attaches modal functionality for views.
Chris@0 39 * @prop {Drupal~behaviorDetach} detach
Chris@0 40 * Detaches the modal functionality.
Chris@0 41 */
Chris@0 42 Drupal.behaviors.viewsModalContent = {
Chris@0 43 attach(context) {
Chris@17 44 $('body')
Chris@17 45 .once('viewsDialog')
Chris@17 46 .on(
Chris@17 47 'dialogContentResize.viewsDialog',
Chris@17 48 '.ui-dialog-content',
Chris@17 49 handleDialogResize,
Chris@17 50 );
Chris@0 51 // When expanding details, make sure the modal is resized.
Chris@17 52 $(context)
Chris@17 53 .find('.scroll')
Chris@17 54 .once('detailsUpdate')
Chris@17 55 .on('click', 'summary', e => {
Chris@17 56 $(e.currentTarget).trigger('dialogContentResize');
Chris@17 57 });
Chris@0 58 },
Chris@0 59 detach(context, settings, trigger) {
Chris@0 60 if (trigger === 'unload') {
Chris@17 61 $('body')
Chris@17 62 .removeOnce('viewsDialog')
Chris@17 63 .off('.viewsDialog');
Chris@0 64 }
Chris@0 65 },
Chris@0 66 };
Chris@17 67 })(jQuery, Drupal, drupalSettings);