export function ready(fn) { document.addEventListener('DOMContentLoaded', (e) => { fn(); }, false); } export function closest(el, fn) { if (!el) { return null; } while (el) { if (fn(el)) { return el; } el = el.parentNode } return null; } export function withClass(className) { const els = document.getElementsByClassName(className); const arr = []; for (let i = 0; i < els.length; i++) { arr.push(els.item(i)); } return arr; } export function firstChild(el, fn) { if (!el) { return null; } for (const child of el.childNodes) { if (child.nodeName === '#text') { continue; } if (fn(child)) { return child; } } return null; } export function next(el, fn) { if (!el) { return null; } el = el.nextSibling; while (el) { if (fn(el)) { return el; } el = el.nextSibling; } return null; } export function previous(el, fn) { if (!el) { return null; } el = el.previousSibling; while (el) { if (fn(el)) { return el; } el = el.previousSibling; } return null; }