1import {DisclosureButton, CloseDisclosureButton} from "../utils/disclosure-button.js"; 2import {trapFocus} from "./trap-focus.js"; 3 4const AriaToggle = () => { 5 const toggleElements = document.querySelectorAll('.js-aria-toggle'); 6 const closeElements = document.querySelectorAll('.js-aria-close'); 7 var outsideClickToCloseComponent = true; 8 // Variable to store the last focused button 9 let lastFocusedButton = null; 10 11 toggleElements.forEach((toggleElement) => { 12 13 if (toggleElement.classList.contains('js-no-close-outside-click')) { 14 outsideClickToCloseComponent = false; 15 } 16 else { 17 outsideClickToCloseComponent = true; 18 } 19 20 // Initialisation du disclosure 21 const action = new DisclosureButton( 22 toggleElement, 23 0, 24 true, 25 300, 26 outsideClickToCloseComponent 27 ); 28 29 toggleElement.addEventListener('click', (event) => { 30 31 lastFocusedButton = toggleElement; 32 33 // Get the aria-controls value of the toggleElement 34 const ariaControls = toggleElement.getAttribute('aria-controls'); 35 36 // Convert the id to a DOM element 37 const controlledElement = document.querySelector('#' + ariaControls); 38 39 // Pass the DOM element to trapFocus 40 trapFocus(controlledElement); 41 42 /* 43 * TODO : checker si ça fonctionne 44 * TODO : il faut plusieurs js-aria-toggle dans la page pour tester s'ils se ferment bien quand l'autre s'ouvre 45 */ 46 if (event.currentTarget !== action.buttonNode) { 47 action.hideContent(); 48 } 49 }); 50 }); 51 52 closeElements.forEach((closeElement) => { 53 // Initialisation du disclosure 54 new CloseDisclosureButton(closeElement); 55 56 closeElement.addEventListener('click', (event) => { 57 58 if (lastFocusedButton) { 59 lastFocusedButton.setAttribute('tabindex', '0'); // Restore tabindex to make the button focusable again 60 lastFocusedButton.focus(); // Return focus to the last button clicked 61 } 62 }); 63 }); 64}; 65 66const load_AriaToggle = window.addEventListener( 67 "DOMContentLoaded", 68 AriaToggle 69);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.