(() => { const container = document.getElementById('toast-container'); if (!container) return; const body = document.body; const allowedPositions = new Set([ 'top-left', 'top-center', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right' ]); const position = allowedPositions.has(body.dataset.toastPosition) ? body.dataset.toastPosition : 'top-right'; const seconds = Math.max(1, Math.min(120, Number.parseInt(body.dataset.toastDuration || '6', 10) || 6)); container.classList.add(`toast-position-${position}`); const params = new URLSearchParams(window.location.search); const entries = [ ['toast_error', 'error'], ['toast_warning', 'warning'], ['toast_success', 'success'] ]; function showToast(message, level) { if (!message) return; const toast = document.createElement('div'); toast.className = `toast toast-${level}`; const symbol = level === 'success' ? '✓' : level === 'warning' ? '⚠' : '✕'; toast.innerHTML = `${symbol}`; toast.querySelector('.toast-message').textContent = message; toast.querySelector('.toast-close').addEventListener('click', () => toast.remove()); container.appendChild(toast); window.setTimeout(() => { toast.classList.add('toast-hide'); window.setTimeout(() => toast.remove(), 350); }, seconds * 1000); } let changed = false; entries.forEach(([key, level]) => { const values = params.getAll(key); values.forEach(value => showToast(value, level)); if (values.length) { params.delete(key); changed = true; } }); if (changed) { const query = params.toString(); const cleanUrl = `${window.location.pathname}${query ? `?${query}` : ''}${window.location.hash}`; window.history.replaceState({}, document.title, cleanUrl); } })();