leftypol_lainchan/js/lcn/utils.js

50 lines
1.4 KiB
JavaScript

/**
* @file Utils for leftychan javascript.
* @author jonsmy
*/
const arrLast = arr => arr[arr.length-1] ?? undefined;
const getConfigBool = (k,d) => { const v = localStorage.getItem(`jon-modjs::${k}`); return v ? v == "1" : d; }
const writeCSSStyle = textContent => {
const style = document.createElement("style")
style.textContent = textContent
document.head.appendChild(style)
}
const assert = {
"equal": (actual, expected, message="No message set") => {
if (actual !== expected) {
const err = new Error(`Assertion Failed. ${message}`)
err.data = { actual, expected}
Error.captureStackTrace(err, assert.equal)
debugger
throw err
}
},
"ok": (actual, message="No message set") => {
if (!actual) {
const err = new Error(`Assertion Failed. ${message}`)
err.data = { actual }
Error.captureStackTrace(err, assert.ok)
debugger
throw err
}
}
}
AbortSignal.any ??= function (signals) {
const controller = new AbortController()
const abortFn = () => {
for (const signal of signals) {
signal.removeEventListener("abort", abortFn)
}
controller.abort()
}
for (const signal of signals) {
signal.addEventListener("abort", abortFn)
}
return controller.signal
}