export const wait = (ms) => { return new Promise((res, rej) => { setTimeout(res, ms); }); } export const fadeout = async (elems, ms = 200, force = false) => { if (!Array.isArray(elems)) elems = [elems]; for (let i = 0; i < elems.length; i++) { elems[i].style.transition = `opacity ${ms}ms`; if(force){ elems[i].style.opacity = "1"; elems[i].style.display = ""; } } await wait(10); for (let i = 0; i < elems.length; i++) { elems[i].style.opacity = "0"; } await wait(ms); for (let i = 0; i < elems.length; i++) { elems[i].style.display = "none"; } } export const fadein = async (elems, ms = 200, force = false) => { if (!Array.isArray(elems)) elems = [elems]; for (let i = 0; i < elems.length; i++) { elems[i].style.transition = `opacity ${ms}ms`; elems[i].style.display = ""; if (force) { elems[i].style.opacity = "0"; } } await wait(10); for (let i = 0; i < elems.length; i++) { elems[i].style.opacity = "1"; } await wait(ms); } var bStack = []; export const subCancel = (callback) => { bStack.push(callback); return ()=>{ var id; if ((id = bStack.indexOf(callback)) >= 0) { bStack.splice(id, 1); } } } function back() { if (bStack.length) { bStack.pop()(); } } document.addEventListener("backbutton", back, false); document.addEventListener('keyup', (e)=>{ if (e.code == "Escape")back(); });