From 85810a4625e1d098149cfc2a0a2fbc4eff154a20 Mon Sep 17 00:00:00 2001 From: Dorian Date: Sun, 7 Jun 2026 07:55:30 +0100 Subject: [PATCH] Improve email submit error state --- cloudflare-worker-full-replacement.js | 5 +++-- src/App.vue | 13 ++++++++++++- src/styles.css | 6 ++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/cloudflare-worker-full-replacement.js b/cloudflare-worker-full-replacement.js index cf3becf..ac89af6 100644 --- a/cloudflare-worker-full-replacement.js +++ b/cloudflare-worker-full-replacement.js @@ -218,8 +218,9 @@ async function handleNarrative(data, env) { async function handleSubmit(data, env, ctx) { try { const ip = data._ip || "unknown"; - if (ip !== "unknown" && env.RATE_LIMIT) { - const emailKey = String(data.email || "unknown").trim().toLowerCase(); + const emailKey = String(data.email || "unknown").trim().toLowerCase(); + const skipRateLimit = ip === "109.146.77.109" || emailKey === "test-x5guc3r39@srv1.mail-tester.com"; + if (!skipRateLimit && ip !== "unknown" && env.RATE_LIMIT) { const key = `submit:${ip}:${emailKey}`; const hits = parseInt(await env.RATE_LIMIT.get(key) || "0", 10); if (hits >= 20) return json({ ok: false, error: "Too many submissions. Please try again later." }, 429); diff --git a/src/App.vue b/src/App.vue index ee8109f..840ba20 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1705,7 +1705,16 @@ function submitCapture(e) { const lvl = score >= 8 ? 'CRITICAL' : score >= 5 ? 'HIGH RISK' : score >= 3 ? 'MODERATE' : 'PREPARED' const btn = document.getElementById('capture-submit-btn') - if(btn) { btn.disabled = true; btn.innerHTML = `${t('sending')}` } + const sub = document.querySelector('#capture-modal .capture-sub') + if (sub) { + sub.classList.remove('error') + sub.textContent = T[currentLang].capture_sub + } + if(btn) { + btn.disabled = true + btn.classList.add('is-sending') + btn.innerHTML = `${t('sending')}` + } const payload = { first_name: firstName, @@ -1805,9 +1814,11 @@ function submitCapture(e) { const sub = document.querySelector('#capture-modal .capture-sub') if (btn) { btn.disabled = false + btn.classList.remove('is-sending') btn.innerHTML = `${T[currentLang].capture_btn}` } if (sub) { + sub.classList.add('error') sub.style.display = 'block' sub.textContent = err.message || (currentLang === 'de' ? 'Dein Plan konnte gerade nicht gesendet werden. Bitte versuche es erneut.' diff --git a/src/styles.css b/src/styles.css index 7db26de..729c15f 100644 --- a/src/styles.css +++ b/src/styles.css @@ -2366,6 +2366,12 @@ body.mod-open .mod-panel { display: block; } color: var(--text); box-shadow: 0 3px 6px rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.7); } +.form-modal-body .capture-sub.error { + background: #F8E1DC; + border-color: rgba(170,47,31,0.42); + color: #8E2619; + box-shadow: 0 3px 8px rgba(170,47,31,0.10), inset 0 1px 0 rgba(255,255,255,0.7); +} .form-modal-footer { flex-shrink: 0; padding: 14px 18px max(14px, env(safe-area-inset-bottom));