]> BookStack Code Mirror - bookstack/blobdiff - resources/js/wysiwyg/ui/framework/helpers/dropdowns.ts
ZIP Exports: Built out initial import view
[bookstack] / resources / js / wysiwyg / ui / framework / helpers / dropdowns.ts
index 35886d2f922e39dccc952ff00519dbbbcf714c1d..e8cef3c8d2014e3fdab9d51f64b9c31a6f0a3a83 100644 (file)
@@ -1,7 +1,16 @@
 
 
 
-export function handleDropdown(toggle: HTMLElement, menu: HTMLElement, onOpen: Function|undefined = undefined, onClose: Function|undefined = undefined) {
+interface HandleDropdownParams {
+    toggle: HTMLElement;
+    menu: HTMLElement;
+    showOnHover?: boolean,
+    onOpen?: Function | undefined;
+    onClose?: Function | undefined;
+}
+
+export function handleDropdown(options: HandleDropdownParams) {
+    const {menu, toggle, onClose, onOpen, showOnHover} = options;
     let clickListener: Function|null = null;
 
     const hide = () => {
@@ -27,8 +36,13 @@ export function handleDropdown(toggle: HTMLElement, menu: HTMLElement, onOpen: F
         }
     };
 
-    toggle.addEventListener('click', event => {
+    const toggleShowing = (event: MouseEvent) => {
         menu.hasAttribute('hidden') ? show() : hide();
-    });
-    menu.addEventListener('mouseleave', hide);
+    };
+    toggle.addEventListener('click', toggleShowing);
+    if (showOnHover) {
+        toggle.addEventListener('mouseenter', toggleShowing);
+    }
+
+    menu.parentElement?.addEventListener('mouseleave', hide);
 }
\ No newline at end of file