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);
|