annotate core/themes/seven/js/responsive-details.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 * Provides responsive behaviors to HTML details elements.
Chris@0 4 */
Chris@0 5
Chris@17 6 (function($, Drupal) {
Chris@0 7 /**
Chris@0 8 * Initializes the responsive behaviors for details elements.
Chris@0 9 *
Chris@0 10 * @type {Drupal~behavior}
Chris@0 11 *
Chris@0 12 * @prop {Drupal~behaviorAttach} attach
Chris@0 13 * Attaches the responsive behavior to status report specific details elements.
Chris@0 14 */
Chris@0 15 Drupal.behaviors.responsiveDetails = {
Chris@0 16 attach(context) {
Chris@17 17 const $details = $(context)
Chris@17 18 .find('details')
Chris@17 19 .once('responsive-details');
Chris@0 20
Chris@0 21 if (!$details.length) {
Chris@0 22 return;
Chris@0 23 }
Chris@0 24
Chris@17 25 const $summaries = $details.find('> summary');
Chris@17 26
Chris@0 27 function detailsToggle(matches) {
Chris@0 28 if (matches) {
Chris@0 29 $details.attr('open', true);
Chris@0 30 $summaries.attr('aria-expanded', true);
Chris@0 31 $summaries.on('click.details-open', false);
Chris@17 32 } else {
Chris@0 33 // If user explicitly opened one, leave it alone.
Chris@0 34 const $notPressed = $details
Chris@0 35 .find('> summary[aria-pressed!=true]')
Chris@0 36 .attr('aria-expanded', false);
Chris@17 37 $notPressed.parent('details').attr('open', false);
Chris@0 38 // After resize, allow user to close previously opened details.
Chris@0 39 $summaries.off('.details-open');
Chris@0 40 }
Chris@0 41 }
Chris@0 42
Chris@0 43 function handleDetailsMQ(event) {
Chris@0 44 detailsToggle(event.matches);
Chris@0 45 }
Chris@0 46
Chris@0 47 const mql = window.matchMedia('(min-width:48em)');
Chris@0 48 mql.addListener(handleDetailsMQ);
Chris@0 49 detailsToggle(mql.matches);
Chris@0 50 },
Chris@0 51 };
Chris@17 52 })(jQuery, Drupal);