// Klubblodd — felles UI-helpers // Lastes før per-side script. window.kl = window.kl || {}; (function () { // ---------------------------------------------------------------- // Toast — flyktig statusmelding nederst på siden // ---------------------------------------------------------------- function ensureContainer () { var c = document.getElementById( 'kl_toast_container' ); if ( c ) return c; c = document.createElement( 'div' ); c.id = 'kl_toast_container'; document.body.appendChild( c ); return c; } window.kl.toast = function ( message, type, durationMs ) { var container = ensureContainer(); var el = document.createElement( 'div' ); el.className = 'kl_toast kl_toast_' + ( type || 'info' ); el.textContent = message; container.appendChild( el ); // Force reflow så transition spilles av void el.offsetWidth; el.classList.add( 'show' ); setTimeout( function () { el.classList.remove( 'show' ); setTimeout( function () { el.remove(); }, 300 ); }, durationMs || 3500 ); }; // ---------------------------------------------------------------- // Hent feilmelding fra envelope-respons // ---------------------------------------------------------------- window.kl.errMsg = function ( res, fallback ) { if ( res && res.status && res.status.message ){ return String( res.status.message ); } return fallback || 'Noe gikk galt. Prøv igjen.'; }; window.kl.errDetails = function ( res ) { if ( res && res.data && Array.isArray( res.data.details ) ){ return res.data.details; } return []; }; window.kl.isOk = function ( res ) { return res && res.status && res.status.code === 200; }; // ---------------------------------------------------------------- // Mark a field as invalid; auto-clears når brukeren skriver i feltet // ---------------------------------------------------------------- window.kl.markInvalid = function ( inputEl, errEl, message ) { if ( !inputEl ) return; inputEl.classList.add( 'kl_invalid' ); if ( errEl ){ errEl.textContent = message || ''; errEl.hidden = false; } var handler = function () { inputEl.classList.remove( 'kl_invalid' ); if ( errEl ) errEl.hidden = true; inputEl.removeEventListener( 'input', handler ); }; inputEl.addEventListener( 'input', handler ); }; })();