const appStartTime = performance.now(); async function preloadImages() { const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; const imagePromises = []; const num = Math.floor(10 * Math.random()); const imageUrls = [ `file=html/logo-bg-${dark ? 'dark' : 'light'}.jpg`, `file=html/logo-bg-${num}.jpg`, ]; for (const url of imageUrls) { const img = new Image(); const promise = new Promise((resolve, reject) => { img.onload = resolve; img.onerror = reject; }); img.src = url; imagePromises.push(promise); } try { await Promise.all(imagePromises); } catch (error) { console.error('Error preloading images:', error); } } async function createSplash() { const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; log('createSplash', { theme: dark ? 'dark' : 'light' }); const num = Math.floor(11 * Math.random()); const splash = `
`; document.body.insertAdjacentHTML('beforeend', splash); await preloadImages(); const imgEl = `
`; document.getElementById('splash').insertAdjacentHTML('afterbegin', imgEl); fetch('/sdapi/v1/motd') .then((res) => res.text()) .then((text) => { const motdEl = document.getElementById('motd'); if (motdEl) motdEl.innerHTML = text.replace(/["]+/g, ''); }) .catch((err) => console.error('getMOTD:', err)); } async function removeSplash() { const splash = document.getElementById('splash'); if (splash) splash.remove(); log('removeSplash'); log('startupTime', Math.round(performance.now() - appStartTime) / 1000); } window.onload = createSplash;