]> BookStack Code Mirror - bookstack/blob - resources/js/wysiwyg/ui/framework/helpers/dropdowns.ts
Lexical: Added basic list button/support
[bookstack] / resources / js / wysiwyg / ui / framework / helpers / dropdowns.ts
1
2
3
4 export function handleDropdown(toggle: HTMLElement, menu: HTMLElement, onOpen: Function|undefined = undefined, onClose: Function|undefined = undefined) {
5     let clickListener: Function|null = null;
6
7     const hide = () => {
8         menu.hidden = true;
9         if (clickListener) {
10             window.removeEventListener('click', clickListener as EventListener);
11         }
12         if (onClose) {
13             onClose();
14         }
15     };
16
17     const show = () => {
18         menu.hidden = false
19         clickListener = (event: MouseEvent) => {
20             if (!toggle.contains(event.target as HTMLElement) && !menu.contains(event.target as HTMLElement)) {
21                 hide();
22             }
23         }
24         window.addEventListener('click', clickListener as EventListener);
25         if (onOpen) {
26             onOpen();
27         }
28     };
29
30     toggle.addEventListener('click', event => {
31         menu.hasAttribute('hidden') ? show() : hide();
32     });
33     menu.addEventListener('mouseleave', hide);
34 }