function createElement(name, attrs, ...children) { const el = document.createElement(name); for (const attr in attrs) { if(attr.startsWith("on")) { el[attr] = attrs[attr]; } else { el.setAttribute(attr, attrs[attr]) } } for (const child of children) { if (child == null) { continue } el.appendChild(child) } return el } export function createElementNS(name, attrs, ...children) { var svgns = "http://www.w3.org/2000/svg"; var el = document.createElementNS(svgns, name); for (const attr in attrs) { if(attr.startsWith("on")) { el[attr] = attrs[attr]; } else { el.setAttribute(attr, attrs[attr]) } } for (const child of children) { if (child == null) { continue } el.appendChild(child) } return el } export function p(attrs, ...children) { return createElement("p", attrs, ...children) } export function span(attrs, ...children) { return createElement("span", attrs, ...children) } export function div(attrs, ...children) { return createElement("div", attrs, ...children) } export function a(attrs, ...children) { return createElement("a", attrs, ...children) } export function i(attrs, ...children) { return createElement("i", attrs, ...children) } export function form(attrs, ...children) { return createElement("form", attrs, ...children) } export function img(alt, attrs, ...children) { attrs['onerror'] = (event) => event.target.remove() attrs['alt'] = alt return createElement("img", attrs, ...children) } export function input(attrs, ...children) { return createElement("input", attrs, ...children) } export function button(attrs, ...children) { return createElement("button", attrs, ...children) } export function path(attrs, ...children) { return createElementNS("path", attrs, ...children) } export function g(attrs, ...children) { return createElementNS("g", attrs, ...children) } export function svg(attrs, ...children) { return createElementNS("svg", attrs, ...children) } export function body(attrs, ...children) { return createElement("body", attrs, ...children) } export function textarea(attrs, ...children) { return createElement("textarea", attrs, ...children) } export function parse(html) { return document.createRange().createContextualFragment(html); } export function pfp(id) { return img('pfp', {src: `/image/avatar?user_id=${id}`}) } export function banner(id) { return img('banner', {src: `/image/banner?user_id=${id}`}) } const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; const letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; export function parseMonth(month) { if (month > -1 && month < 26) { return months[month] } else { let first = letters[month%26].toUpperCase() let middle = letters[month*13%26] let last = letters[month*50%26] return first + middle + last } } export function parseDate(date) { return parseMonth(date.getUTCMonth()) + ' ' + date.getUTCDate() + ', ' + date.getUTCFullYear() + ' ' + date.toLocaleTimeString(); } export function crawl(key, object) { let data = [] for (const k in object) { if (typeof object[k] === 'object') { data.push(...crawl(key, object[k])) } else if (k == key) { data.push(object[k]) } } return data }