lazy-js-utils
Version:
A collection of lazy-loaded JavaScript utilities for efficient development
106 lines (89 loc) • 3.04 kB
JavaScript
Object.defineProperty(exports, "__esModule", {value: true});
var _chunk3KT5TQ4Gjs = require('./chunk-3KT5TQ4G.js');
// src/event/findElement.ts
function findElement(selector, all = false, currentNode = document) {
if (_chunk3KT5TQ4Gjs.isNull.call(void 0, all))
return;
if (!_chunk3KT5TQ4Gjs.isBool.call(void 0, all)) {
currentNode = all;
all = false;
}
if (_chunk3KT5TQ4Gjs.isArray.call(void 0, selector)) {
return selector.reduce((result, c) => {
const item = all ? currentNode.querySelectorAll(c) : currentNode.querySelector(c);
if (!item)
return result;
return result = all ? [...result, ...item] : [...result, item];
}, []);
}
return all ? currentNode.querySelectorAll(selector) : currentNode.querySelector(selector);
}
// src/utils/mount.ts
function mount(...args) {
const len = args.length;
const params = [...args];
const elements = params.slice(0, len - 1);
const callback = params.slice(-1)[0];
let isMounted = false;
let hasMounted = false;
update();
document.addEventListener("DOMContentLoaded", update);
setTimeout(() => document.removeEventListener("DOMContentLoaded", update));
function update() {
if (hasMounted)
return;
elements.forEach(
(element, index) => _chunk3KT5TQ4Gjs.isStr.call(void 0, element) && (elements[index] = findElement(element) || element)
);
if (!isMounted && elements.some(_chunk3KT5TQ4Gjs.isStr))
return isMounted = true;
if (elements.some(_chunk3KT5TQ4Gjs.isStr)) {
throw new Error(
`${elements.filter(_chunk3KT5TQ4Gjs.isStr).join(", ")} is not a HTMLElement`
);
}
callback == null ? void 0 : callback(...elements);
hasMounted = true;
}
}
// src/utils/unmount.ts
function unmount(callback) {
const fn = window.onunload || function() {
};
window.onunload = function(ev) {
callback == null ? void 0 : callback(ev);
fn.call(this, ev);
};
return callback;
}
// src/event/createElement.ts
function createElement(tag, attributes, innerHTML, options) {
const el = document.createElement(tag, options);
if (!attributes)
return el;
for (const key in attributes) el.setAttribute(key, attributes[key]);
if (innerHTML)
el.innerHTML = innerHTML;
return el;
}
// src/event/useMutationObserver.ts
function useMutationObserver(element, callback, options = { childList: true }) {
if (!element)
return;
let stopped = false;
let stop;
mount(element, (element2) => {
const mutationObserver = new MutationObserver(callback);
mutationObserver.observe(element2, options);
stop = () => mutationObserver.disconnect();
if (stopped)
stop();
});
unmount(() => stop == null ? void 0 : stop());
return () => {
if (!stop)
return stopped = true;
stop == null ? void 0 : stop();
};
}
exports.findElement = findElement; exports.mount = mount; exports.unmount = unmount; exports.createElement = createElement; exports.useMutationObserver = useMutationObserver;
;