You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
44 lines
1.2 KiB
/** |
|
* @file |
|
* Additional functionality for HTML5 details elements. |
|
*/ |
|
|
|
(function ($) { |
|
/** |
|
* Open parent details elements of a targeted page fragment. |
|
* |
|
* Opens all (nested) details element on a hash change or fragment link click |
|
* when the target is a child element, in order to make sure the targeted |
|
* element is visible. Aria attributes on the summary |
|
* are set by triggering the click event listener in details-aria.js. |
|
* |
|
* @param {jQuery.Event} e |
|
* The event triggered. |
|
* @param {jQuery} $target |
|
* The targeted node as a jQuery object. |
|
*/ |
|
const handleFragmentLinkClickOrHashChange = (e, $target) => { |
|
$target.parents('details').not('[open]').find('> summary').trigger('click'); |
|
}; |
|
|
|
/** |
|
* Binds a listener to handle fragment link clicks and URL hash changes. |
|
*/ |
|
$('body').on( |
|
'formFragmentLinkClickOrHashChange.details', |
|
handleFragmentLinkClickOrHashChange, |
|
); |
|
|
|
/** |
|
* Binds a listener to handle required fields in details elements. |
|
*/ |
|
window.addEventListener( |
|
'invalid', |
|
(event) => { |
|
if (event.target.matches('details input[required]')) { |
|
handleFragmentLinkClickOrHashChange(event, $(event.target)); |
|
} |
|
}, |
|
{ capture: true }, |
|
); |
|
})(jQuery);
|
|
|