286 lines
5.3 KiB
JavaScript
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],
|
||
|
|
]);
|