UNPKG

@studiometa/js-toolkit

Version:

A set of useful little bits of JavaScript to boost your project! 🚀

92 lines (91 loc) • 2.64 kB
import { isArray, isDefined, SmartQueue, dashCase } from "../utils/index.js"; import { features } from "./features.js"; let queue; function addToQueue(fn) { if (features.get("blocking")) { fn(); return; } if (!queue) { queue = new SmartQueue(); } return queue.add(fn); } const selectors = /* @__PURE__ */ new Map(); const separator = " "; function getSelector(nameOrSelector) { const { component } = features.get("attributes"); const prefix = features.get("prefix"); const key = prefix + component + nameOrSelector; if (!selectors.has(key)) { const parts = [ // Tag select `${prefix}-${dashCase(nameOrSelector)}`, // Single selector `[${component}="${nameOrSelector}"]`, // Selector in the middle of a list of selectors `[${component}*="${separator}${nameOrSelector}${separator}"]`, // Selector at the end of a list of selectors `[${component}$="${separator}${nameOrSelector}"]`, // Selector at the beginning of a list of selectors `[${component}^="${nameOrSelector}${separator}"]` ]; selectors.set(key, parts.join(",")); } return selectors.get(key); } function getComponentElements(nameOrSelector, element = document) { const selector = getSelector(nameOrSelector); let elements = []; try { elements = Array.from(element.querySelectorAll(selector)); } catch { } if (elements.length === 0 && nameOrSelector[0] === nameOrSelector[0].toLowerCase()) { elements = Array.from(element.querySelectorAll(nameOrSelector)); } return elements; } function eventIsDefinedInConfig(event, config) { return isArray(config.emits) && config.emits.includes(event); } function eventIsNative(event, element) { return isDefined(element[`on${event}`]); } function getEventTarget(instance, event, config) { if (eventIsDefinedInConfig(event, config) || eventIsNative(event, instance.$el)) { return instance.$el; } } const instances = /* @__PURE__ */ new Set(); function getInstances(ctor) { if (isDefined(ctor)) { const filteredInstances = /* @__PURE__ */ new Set(); for (const instance of instances) { if (instance instanceof ctor) { filteredInstances.add(instance); } } return filteredInstances; } else { return new Set(instances); } } function addInstance(instance) { instances.add(instance); } function deleteInstance(instance) { instances.delete(instance); } export { addInstance, addToQueue, deleteInstance, eventIsDefinedInConfig, eventIsNative, getComponentElements, getEventTarget, getInstances, getSelector }; //# sourceMappingURL=utils.js.map