Initial Drupal 11 with DDEV setup
This commit is contained in:
53
web/core/modules/navigation/js/toolbar-dropdown.js
Normal file
53
web/core/modules/navigation/js/toolbar-dropdown.js
Normal file
@ -0,0 +1,53 @@
|
||||
/* cspell:ignore uidom */
|
||||
((Drupal, once, { computePosition, offset, shift, flip }) => {
|
||||
/**
|
||||
* Attaches the dropdown behavior to all required triggers.
|
||||
*
|
||||
* @type {Drupal~behavior}
|
||||
*
|
||||
* @prop {Drupal~behaviorAttach} attach
|
||||
* Attaches the dropdown behavior.
|
||||
*/
|
||||
Drupal.behaviors.dropdownInit = {
|
||||
attach: (context) => {
|
||||
once('dropdown-trigger', '[data-drupal-dropdown]', context).forEach(
|
||||
(trigger) => {
|
||||
const dropdown = trigger.nextElementSibling;
|
||||
|
||||
const updatePosition = () => {
|
||||
computePosition(trigger, dropdown, {
|
||||
strategy: 'fixed',
|
||||
placement: trigger.dataset.drupalDropdownPosition || 'bottom',
|
||||
middleware: [
|
||||
flip({ padding: 16 }),
|
||||
offset(6),
|
||||
shift({ padding: 16 }),
|
||||
],
|
||||
}).then(({ x, y }) => {
|
||||
Object.assign(dropdown.style, {
|
||||
left: `${x}px`,
|
||||
top: `${y}px`,
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
trigger.addEventListener('click', (e) => {
|
||||
updatePosition();
|
||||
trigger.setAttribute(
|
||||
'aria-expanded',
|
||||
e.currentTarget.getAttribute('aria-expanded') === 'false',
|
||||
);
|
||||
});
|
||||
|
||||
// Event listener to close dropdown when clicking outside
|
||||
document.addEventListener('click', (e) => {
|
||||
const isButtonClicked = trigger.contains(e.target);
|
||||
if (!isButtonClicked) {
|
||||
trigger.setAttribute('aria-expanded', 'false');
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
},
|
||||
};
|
||||
})(Drupal, once, FloatingUIDOM);
|
||||
Reference in New Issue
Block a user