MCPcopy Index your code
hub / github.com/github/awesome-copilot / setupDropdownCloseHandlers

Function setupDropdownCloseHandlers

website/src/scripts/utils.ts:557–621  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

555 * Setup dropdown close handlers for dynamically created dropdowns
556 */
557export function setupDropdownCloseHandlers(): void {
558 if (dropdownHandlersReady) return;
559 dropdownHandlersReady = true;
560
561 document.addEventListener(
562 "click",
563 (e) => {
564 const target = e.target as HTMLElement;
565 const dropdown = target.closest(
566 '.install-dropdown[data-install-scope="list"]'
567 );
568 const toggle = target.closest(
569 ".install-btn-toggle"
570 ) as HTMLButtonElement | null;
571 const menuLink = target.closest(
572 ".install-dropdown-menu a"
573 ) as HTMLAnchorElement | null;
574
575 if (dropdown) {
576 e.stopPropagation();
577
578 if (toggle) {
579 e.preventDefault();
580 const isOpen = dropdown.classList.toggle("open");
581 toggle.setAttribute("aria-expanded", String(isOpen));
582
583 if (isOpen) {
584 document
585 .querySelectorAll('.install-dropdown[data-install-scope="list"].open')
586 .forEach((openDropdown) => {
587 if (openDropdown === dropdown) return;
588 openDropdown.classList.remove("open");
589 openDropdown.querySelector(".install-btn-toggle")
590 ?.setAttribute("aria-expanded", "false");
591 });
592 }
593
594 return;
595 }
596
597 if (menuLink) {
598 dropdown.classList.remove("open");
599 const toggleBtn = dropdown.querySelector<HTMLButtonElement>(
600 ".install-btn-toggle"
601 );
602 toggleBtn?.setAttribute("aria-expanded", "false");
603 return;
604 }
605
606 return;
607 }
608
609 document
610 .querySelectorAll('.install-dropdown[data-install-scope="list"].open')
611 .forEach((openDropdown) => {
612 openDropdown.classList.remove("open");
613 const toggleBtn = openDropdown.querySelector<HTMLButtonElement>(
614 ".install-btn-toggle"

Callers 2

initInstructionsPageFunction · 0.90
initAgentsPageFunction · 0.90

Calls 1

addEventListenerMethod · 0.80

Tested by

no test coverage detected