@csedl/stimulus-dropdown
Version:
Dropdown and Tooltip with stimulus and floating-ui
114 lines (93 loc) • 3.22 kB
JavaScript
import {debugLog} from "./utils.js";
// DEFAULTS
let _debug = false;
let _close_button_selector = '.close-button';
let _dropdown_content_selector = '.content';
let _tooltip_content_selector = '.content';
let _add_arrow = true;
let _persist_tooltip_on_click = false;
let _close_on_click_outside_listener_added = false;
const StimulusDropdown = {
// debug
get debug() {
return _debug;
},
set debug(value) {
if (typeof value !== "boolean") {
throw new Error("Debug value must be true or false");
}
_debug = value;
debugLog('debugging active')
},
// close button selector
get closeButtonSelector() {
return _close_button_selector;
},
set closeButtonSelector(string) {
if (typeof string !== "string") {
throw new Error("Close Button Selector must be a string");
}
_close_button_selector = string;
debugLog(`close button selector is: «${string}»`);
},
// content selector
get dropdownContentSelector() {
return _dropdown_content_selector;
},
set dropdownContentSelector(string) {
if (typeof string !== "string") {
throw new Error("Content Selector must be a string");
}
_dropdown_content_selector = string;
debugLog(`dropdown content selector is: «${string}»`);
},
// tooltip content selector
get tooltipContentSelector() {
return _tooltip_content_selector;
},
set tooltipContentSelector(string) {
if (typeof string !== "string") {
throw new Error("Tooltip Content Selector must be a string");
}
_tooltip_content_selector = string;
debugLog(`tooltip content selector is: «${string}»`);
},
// add arrow
get addArrow() {
return _add_arrow;
},
set addArrow(boolean) {
if (typeof boolean !== "boolean") {
throw new Error("Tooltip Content Selector must be a string");
}
_add_arrow = boolean;
debugLog(`add-arrow is set to: «${boolean}»`);
},
// add arrow
get persistTooltipOnClick() {
return _persist_tooltip_on_click;
},
set persistTooltipOnClick(boolean) {
if (typeof boolean !== "boolean") {
throw new Error("Tooltip Content Selector must be a string");
}
_persist_tooltip_on_click = boolean;
debugLog(`Persist tooltip on click is set to: «${boolean}»`);
},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// INTERNAL USE
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// closeOnClickOutsideListenerAdded
get closeOnClickOutsideListenerAdded() {
return _close_on_click_outside_listener_added;
},
set closeOnClickOutsideListenerAdded(bool) {
if (typeof bool !== "boolean") {
throw new Error("closeOnClickOutsideListenerAdded must be a boolean");
}
_close_on_click_outside_listener_added = bool;
debugLog(`closeOnClickOutsideListenerAdded is: «${bool}»`);
},
};
window.StimulusDropdown = StimulusDropdown;
export default StimulusDropdown;