let toastContainer let lastToast window.addEventListener("load", () => { toastContainer = document.getElementById("toast-container") // Get last toast const toastsOnLoad = toastContainer.children lastToast = toastsOnLoad.length - 1 // Apply fadeout to all toasts for (let i = 0; i < lastToast + 1; i++) if (!toastsOnLoad[i].classList.contains("nofade")) setToastRemove(toastsOnLoad[i]) }) // Make new toast function newToast(color, icon, text, noFade) { lastToast++ let container = document.createElement("div") container.className = "toast-container" container.getAnimations().forEach(a => { a.cancel(); a.play() }) // Invisible checkbox that removes the toast let input = document.createElement("input") input.setAttribute("type", "checkbox") input.setAttribute("id", lastToast) container.appendChild(input) // Toast color and content let toast = document.createElement("div") toast.className = "toast" if (color) toast.classList.add(color) toast.innerText = text container.appendChild(toast) // Icon if (icon) { let ic = document.createElement("div") ic.className = "icon" ic.classList.add(icon) toast.insertBefore(ic, toast.firstChild) } // X button that appears when hovering let overlay = document.createElement("label") overlay.className = "close-overlay" overlay.setAttribute("for", lastToast) container.appendChild(overlay) toastContainer.appendChild(container) // Add timeout if (noFade) container.classList.add("nofade") else setToastRemove(container) return { id: lastToast, container } } async function newToastWhenReady(color, icon, text, noFade) { if (!toastContainer) { await new Promise(resolve => { setTimeout(() => { if (toastContainer) resolve() }, 200) }) return newToast(color, icon, text, noFade) } else return newToast(color, icon, text, noFade) } // Set timeout on toasts function setToastRemove(toast) { toast.classList.remove("nofade") setTimeout(() => { // const checkbox = toast.firstElementChild // checkbox.checked = true toast.remove() }, 1000 * 5) }