This repository has been archived on 2025-03-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cetra/lib/plugins/StandardLibrary/DomManipulation.js
2024-01-16 20:04:01 +00:00

286 lines
5.3 KiB
JavaScript

function duplicate(node) {
return node.cloneNode(true);
}
function remove(node) {
node.remove();
}
function append(node, parent) {
parent.appendChild(node);
}
function prepend(node, parent) {
parent.prepend(node);
}
function after(node, sibling) {
sibling.after(node);
}
function before(node, sibling) {
sibling.before(node);
}
function replace(node, sibling) {
sibling.replaceWith(node);
}
function wrap(node, wrapper) {
node.parentNode.insertBefore(wrapper, node);
wrapper.appendChild(node);
}
function unwrap(node) {
const parent = node.parentNode;
parent.replaceChild(node.firstChild, node);
}
function empty(node) {
node.innerHTML = '';
}
function html(node, html) {
node.innerHTML = html;
}
function text(node, text) {
node.textContent = text;
}
function attr(node, name, value) {
if (value === undefined) return node.getAttribute(name);
node.setAttribute(name, value);
}
function removeAttr(node, name) {
node.removeAttribute(name);
}
function hasClass(node, className) {
return node.classList.contains(className);
}
function addClass(node, className) {
node.classList.add(className);
}
function removeClass(node, className) {
node.classList.remove(className);
}
function toggleClass(node, className) {
node.classList.toggle(className);
}
function on(node, event, callback) {
node.addEventListener(event, callback);
}
function off(node, event, callback) {
node.removeEventListener(event, callback);
}
function trigger(node, event) {
node.dispatchEvent(new Event(event));
}
function find(selector, parent) {
return (parent || document).querySelectorAll(selector);
}
function closest(node, selector) {
return node.closest(selector);
}
function parent(node) {
return node.parentNode;
}
function children(node) {
return node.children;
}
function siblings(node) {
return [...node.parentNode.children].filter((child) => child !== node);
}
function next(node) {
return node.nextElementSibling;
}
function prev(node) {
return node.previousElementSibling;
}
function index(node) {
return [...node.parentNode.children].indexOf(node);
}
function getStyle(node, prop) {
return getComputedStyle(node)[prop];
}
function setStyle(node, prop, value) {
node.style[prop] = value;
}
function setStyles(node, styles) {
Object.entries(styles).forEach(([prop, value]) => {
node.style[prop] = value;
});
}
function removeStyle(node, prop) {
node.style.removeProperty(prop);
}
function removeStyles(node, props) {
props.forEach((prop) => {
node.style.removeProperty(prop);
});
}
function css(node, prop, value) {
if (value === undefined) return getStyle(node, prop);
node.style[prop] = value;
}
function offset(node) {
const rect = node.getBoundingClientRect();
return {
top: rect.top + document.body.scrollTop,
left: rect.left + document.body.scrollLeft,
};
}
function position(node) {
return {
top: node.offsetTop,
left: node.offsetLeft,
};
}
function height(node) {
return node.offsetHeight;
}
function width(node) {
return node.offsetWidth;
}
function outerHeight(node, margin) {
let height = node.offsetHeight;
if (margin) {
const style = getComputedStyle(node);
return (
height + parseInt(style.marginTop) + parseInt(style.marginBottom)
);
}
return height;
}
function outerWidth(node, margin) {
const width = node.offsetWidth;
if (margin) {
const style = getComputedStyle(node);
return width + parseInt(style.marginLeft) + parseInt(style.marginRight);
}
return width;
}
function scroll(node) {
return {
top: node.scrollTop,
left: node.scrollLeft,
};
}
function scrollTop(node, value) {
if (value === undefined) return node.scrollTop;
node.scrollTop = value;
}
function scrollBottom(node, value) {
if (value === undefined) return node.scrollBottom;
node.scrollBottom = value;
}
function scrollLeft(node, value) {
if (value === undefined) return node.scrollLeft;
node.scrollLeft = value;
}
function scrollHeight(node) {
return node.scrollHeight;
}
function scrollWidth(node) {
return node.scrollWidth;
}
function innerHeight(node) {
return node.clientHeight;
}
function innerWidth(node) {
return node.clientWidth;
}
function offsetParent(node) {
return node.offsetParent || node;
}
export default new Map([
['duplicate', duplicate],
['remove', remove],
['append', append],
['prepend', prepend],
['after', after],
['before', before],
['replace', replace],
['wrap', wrap],
['unwrap', unwrap],
['empty', empty],
['html', html],
['text', text],
['attr', attr],
['removeAttr', removeAttr],
['hasClass', hasClass],
['addClass', addClass],
['removeClass', removeClass],
['toggleClass', toggleClass],
['on', on],
['off', off],
['trigger', trigger],
['find', find],
['closest', closest],
['parent', parent],
['children', children],
['siblings', siblings],
['next', next],
['prev', prev],
['index', index],
['getStyle', getStyle],
['setStyle', setStyle],
['setStyles', setStyles],
['removeStyle', removeStyle],
['removeStyles', removeStyles],
['css', css],
['offset', offset],
['position', position],
['height', height],
['width', width],
['outerHeight', outerHeight],
['outerWidth', outerWidth],
['scroll', scroll],
['scrollTop', scrollTop],
['scrollBottom', scrollBottom],
['scrollLeft', scrollLeft],
['scrollHeight', scrollHeight],
['scrollWidth', scrollWidth],
['innerHeight', innerHeight],
['innerWidth', innerWidth],
['offsetParent', offsetParent],
]);