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 //Remove tabindex from the toggle button 21 toggleElement.removeAttribute('tabindex'); 22 23 // Initialisation du disclosure 24 const action = new DisclosureButton( 25 toggleElement, 26 0, 27 true, 28 300, 29 outsideClickToCloseComponent 30 ); 31 32 toggleElement.addEventListener('click', (event) => { 33 34 lastFocusedButton = toggleElement; 35 36 // Get the aria-controls value of the toggleElement 37 const ariaControls = toggleElement.getAttribute('aria-controls'); 38 39 // Convert the id to a DOM element 40 const controlledElement = document.querySelector('#' + ariaControls); 41 42 // Pass the DOM element to trapFocus 43 trapFocus(controlledElement); 44 45 /* 46 * TODO : checker si ça fonctionne 47 * TODO : il faut plusieurs js-aria-toggle dans la page pour tester s'ils se ferment bien quand l'autre s'ouvre 48 */ 49 if (event.currentTarget !== action.buttonNode) { 50 action.hideContent(); 51 } 52 }); 53 }); 54 55 closeElements.forEach((closeElement) => { 56 // Initialisation du disclosure 57 new CloseDisclosureButton(closeElement); 58 59 closeElement.addEventListener('click', (event) => { 60 61 if (lastFocusedButton) { 62 lastFocusedButton.setAttribute('tabindex', '0'); // Restore tabindex to make the button focusable again 63 lastFocusedButton.focus(); // Return focus to the last button clicked 64 } 65 }); 66 }); 67}; 68 69const load_AriaToggle = window.addEventListener( 70 "DOMContentLoaded", 71 AriaToggle 72);
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.