@studiometa/js-toolkit
Version:
A set of useful little bits of JavaScript to boost your project! 🚀
92 lines (91 loc) • 2.64 kB
JavaScript
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