UNPKG

@ribajs/bs5

Version:

Bootstrap 5 module for Riba.js

78 lines (64 loc) 2.73 kB
import { Dropdown as _Dropdown } from "bootstrap"; import { Bs5DropdownComponent } from "../components/bs5-dropdown/bs5-dropdown.component.js"; const DROPDOWN_DATA_API_KEY = ".data-api"; const DROPDOWN_ARROW_DOWN_KEY = "ArrowDown"; const DROPDOWN_ARROW_UP_KEY = "ArrowUp"; const DROPDOWN_ESCAPE_KEY = "Escape"; /** * @see https://github.com/twbs/bootstrap/blob/main/js/src/dropdown.js */ export class Dropdown extends _Dropdown { public static hideAll(event: Event) { (this as any).clearMenus(event); // TODO type } public static getAllComponents() { const dropdownEls = document.querySelectorAll<Bs5DropdownComponent>( Bs5DropdownComponent.tagName, ); return Array.from(dropdownEls); } public static hideAllComponents() { const dropdownEls = this.getAllComponents(); for (const dropdownEl of Array.from(dropdownEls)) { dropdownEl.dropdown?.hide(); } } constructor(element: string | Element, options?: Partial<_Dropdown.Options>) { super(element, options); } // static NAME = "dropdown"; // static get DATA_KEY() { // return DROPDOWN_DATA_KEY; // } // static EVENT_KEY = Dropdown.EVENT_KEY; static DATA_API_KEY = DROPDOWN_DATA_API_KEY; static ESCAPE_KEY = DROPDOWN_ESCAPE_KEY; static SPACE_KEY = "Space"; static TAB_KEY = "Tab"; static ARROW_UP_KEY = DROPDOWN_ARROW_UP_KEY; static ARROW_DOWN_KEY = DROPDOWN_ARROW_DOWN_KEY; static RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button static REGEXP_KEYDOWN = new RegExp( `${DROPDOWN_ARROW_UP_KEY}|${DROPDOWN_ARROW_DOWN_KEY}|${DROPDOWN_ESCAPE_KEY}`, ); static EVENT_HIDE = `hide${Dropdown.EVENT_KEY}`; static EVENT_HIDDEN = `hidden${Dropdown.EVENT_KEY}`; static EVENT_SHOW = `show${Dropdown.EVENT_KEY}`; static EVENT_SHOWN = `shown${Dropdown.EVENT_KEY}`; static EVENT_CLICK = `click${Dropdown.EVENT_KEY}`; static EVENT_CLICK_DATA_API = `click${Dropdown.EVENT_KEY}${DROPDOWN_DATA_API_KEY}`; static EVENT_KEYDOWN_DATA_API = `keydown${Dropdown.EVENT_KEY}${DROPDOWN_DATA_API_KEY}`; static EVENT_KEYUP_DATA_API = `keyup${Dropdown.EVENT_KEY}${DROPDOWN_DATA_API_KEY}`; static CLASS_NAME_DISABLED = "disabled"; static CLASS_NAME_SHOW = "show"; static CLASS_NAME_DROPUP = "dropup"; static CLASS_NAME_DROPEND = "dropend"; static CLASS_NAME_DROPSTART = "dropstart"; static CLASS_NAME_NAVBAR = "navbar"; static SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]'; static SELECTOR_FORM_CHILD = ".dropdown form"; static SELECTOR_MENU = ".dropdown-menu"; static SELECTOR_NAVBAR_NAV = ".navbar-nav"; static SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)"; }