12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /**
- * @file
- * Claro's polyfill enhancements for HTML5 details.
- */
- (($, Modernizr, Drupal) => {
- /**
- * Workaround for Firefox.
- *
- * Firefox applies the focus state only for keyboard navigation.
- * We have to manually trigger focus to make the behavior consistent across
- * browsers.
- *
- * @type {Drupal~behavior}
- */
- Drupal.behaviors.claroDetails = {
- attach(context) {
- $(context)
- .once('claroDetails')
- .on('click', event => {
- if (event.target.nodeName === 'SUMMARY') {
- $(event.target).trigger('focus');
- }
- });
- },
- };
- /**
- * Workaround for non-supporting browsers.
- *
- * This shim extends HTML5 Shiv used by core.
- *
- * HTML5 Shiv toggles focused details for hitting enter. We copy that for
- * space key as well to make the behavior consistent across browsers.
- *
- * @type {Drupal~behavior}
- */
- Drupal.behaviors.claroDetailsToggleShim = {
- attach(context) {
- if (Modernizr.details || !Drupal.CollapsibleDetails.instances.length) {
- return;
- }
- $(context)
- .find('details .details-title')
- .once('claroDetailsToggleShim')
- .on('keypress', event => {
- const keyCode = event.keyCode || event.charCode;
- if (keyCode === 32) {
- $(event.target)
- .closest('summary')
- .trigger('click');
- event.preventDefault();
- }
- });
- },
- };
- })(jQuery, Modernizr, Drupal);
|