FREE PICKS PAGE

Sunday 12/21/2025 sports Picks free – Bet Gurus
Bet Gurus Uncategorized Sunday 12/21/2025 sports Picks free

Sunday 12/21/2025 sports Picks free

Besure to check out the locks picks page , 5$ and 10$ memberships

Sports Picks Tracker

Sports Picks Tracker

Add your picks for the day, then update each game later as a Win ✅ or Loss ❌. Everything saves in your browser automatically (localStorage).

Add a Pick
If your blog platform blocks inline JS, this version is safe: it uses event listeners (no inline onclick) so Delete/Wipe work everywhere.
Today’s Picks
League Matchup Your Pick Result Actions
Picks: ${s.totalPicks}
Wins: ${s.wins}
Losses: ${s.losses}
Pending: ${s.pending}
Win %: ${s.pct}%
`; els.dayLabel.textContent = `Showing picks for ${d} • Record (decided only): ${s.wins}-${s.losses}`; } function renderTable(allItems){ const items = filteredForDay(allItems); els.rows.innerHTML = items.map(it => { const st = computeStatus(it); const statusLabel = st === “win” ? “✅ WIN” : st === “loss” ? “❌ LOSS” : “⏳ PENDING”; const teamALogo = isValidLogo(it.logoA) ? `` : ``; const teamBLogo = isValidLogo(it.logoB) ? `` : ``; const pickName = it.pick === “A” ? it.teamA : it.teamB; return ` ${safeText(it.sport) || ““}
${teamALogo}
${escapeHtml(it.teamA)} vs ${escapeHtml(it.teamB)}
${it.notes ? `
${escapeHtml(it.notes)}
` : `
`}
${teamBLogo}
🎯 ${escapeHtml(pickName)} ${statusLabel}
`; }).join(“”) || ` No picks found for this date/filter. Add one on the left. `; } function rerender(){ const all = loadData(); renderPills(all); renderTable(all); } function addPick(){ const item = { id: uid(), sport: safeText(els.sport.value), date: getSelectedDate(), teamA: safeText(els.teamA.value), teamB: safeText(els.teamB.value), logoA: safeText(els.logoA.value), logoB: safeText(els.logoB.value), pick: els.pick.value, // “A” or “B” notes: safeText(els.notes.value), resultWinner: “”, // pending initially createdAt: Date.now() }; if(!item.teamA || !item.teamB){ alert(“Please enter both Team A and Team B.”); return; } const all = loadData(); all.push(item); saveData(all); els.teamA.value = “”; els.teamB.value = “”; els.logoA.value = “”; els.logoB.value = “”; els.notes.value = “”; els.teamA.focus(); rerender(); } function clearDay(){ const d = getSelectedDate(); if(!confirm(`Clear ALL picks for ${d}?`)) return; const all = loadData().filter(it => it.date !== d); saveData(all); rerender(); } function wipeAll(){ if(!confirm(“Wipe ALL saved picks (all dates) from this browser?”)) return; localStorage.removeItem(STORAGE_KEY); rerender(); } function setWinner(id, winner){ const all = loadData(); const idx = all.findIndex(x => x.id === id); if(idx === -1) return; all[idx].resultWinner = winner; // “”, “A”, “B” saveData(all); rerender(); } function removePick(id){ if(!confirm(“Delete this pick?”)) return; const all = loadData().filter(x => x.id !== id); saveData(all); rerender(); } function openEditModal(id){ const all = loadData(); const it = all.find(x => x.id === id); if(!it) return; currentEditId = id; els.mSport.value = it.sport || “”; els.mDate.value = it.date || todayISO; els.mTeamA.value = it.teamA || “”; els.mTeamB.value = it.teamB || “”; els.mLogoA.value = it.logoA || “”; els.mLogoB.value = it.logoB || “”; els.mPick.value = it.pick || “A”; els.mNotes.value = it.notes || “”; els.modalOverlay.style.display = “flex”; els.mTeamA.focus(); } function closeEditModal(){ currentEditId = null; els.modalOverlay.style.display = “none”; } function saveEdit(){ if(!currentEditId) return; const all = loadData(); const idx = all.findIndex(x => x.id === currentEditId); if(idx === -1) return; const updated = { …all[idx], sport: safeText(els.mSport.value), date: safeText(els.mDate.value) || todayISO, teamA: safeText(els.mTeamA.value), teamB: safeText(els.mTeamB.value), logoA: safeText(els.mLogoA.value), logoB: safeText(els.mLogoB.value), pick: (els.mPick.value === “B”) ? “B” : “A”, notes: safeText(els.mNotes.value) }; if(!updated.teamA || !updated.teamB){ alert(“Team A and Team B are required.”); return; } all[idx] = updated; saveData(all); // if you changed the date, the table view might move—keep the UI consistent: els.date.value = updated.date; closeEditModal(); rerender(); } // Button handlers (no inline onclick) els.addBtn.addEventListener(“click”, addPick); els.clearDayBtn.addEventListener(“click”, clearDay); els.wipeAllBtn.addEventListener(“click”, wipeAll); els.search.addEventListener(“input”, rerender); els.filterStatus.addEventListener(“change”, rerender); els.date.addEventListener(“change”, rerender); // Table event delegation (Delete / Winner / Edit) els.rows.addEventListener(“click”, (e)=>{ const btn = e.target.closest(“button[data-action]”); if(!btn) return; const tr = btn.closest(“tr[data-id]”); const id = tr?.getAttribute(“data-id”); if(!id) return; const action = btn.getAttribute(“data-action”); if(action === “winnerA”) setWinner(id, “A”); else if(action === “winnerB”) setWinner(id, “B”); else if(action === “clearWinner”) setWinner(id, “”); else if(action === “delete”) removePick(id); else if(action === “edit”) openEditModal(id); }); // Modal handlers els.closeModalBtn.addEventListener(“click”, closeEditModal); els.cancelEditBtn.addEventListener(“click”, closeEditModal); els.saveEditBtn.addEventListener(“click”, saveEdit); els.modalOverlay.addEventListener(“click”, (e)=>{ if(e.target === els.modalOverlay) closeEditModal(); }); document.addEventListener(“keydown”, (e)=>{ if(e.key === “Escape” && els.modalOverlay.style.display === “flex”) closeEditModal(); }); // Export/Import els.exportBtn.addEventListener(“click”, ()=>{ const all = loadData(); const blob = new Blob([JSON.stringify(all, null, 2)], {type:”application/json”}); const a = document.createElement(“a”); a.href = URL.createObjectURL(blob); a.download = “sports-picks-export.json”; document.body.appendChild(a); a.click(); a.remove(); }); els.importBtn.addEventListener(“click”, ()=> els.importFile.click()); els.importFile.addEventListener(“change”, async (e)=>{ const file = e.target.files?.[0]; if(!file) return; try{ const text = await file.text(); const imported = JSON.parse(text); if(!Array.isArray(imported)) throw new Error(“Invalid format (expected an array).”); const cleaned = imported.map(it => ({ id: it.id || uid(), sport: safeText(it.sport), date: safeText(it.date) || todayISO, teamA: safeText(it.teamA), teamB: safeText(it.teamB), logoA: safeText(it.logoA), logoB: safeText(it.logoB), pick: (it.pick === “B”) ? “B” : “A”, notes: safeText(it.notes), resultWinner: (it.resultWinner === “A” || it.resultWinner === “B”) ? it.resultWinner : “”, createdAt: it.createdAt || Date.now() })).filter(it => it.teamA && it.teamB); const all = loadData().concat(cleaned); saveData(all); alert(`Imported ${cleaned.length} picks.`); rerender(); }catch(err){ alert(“Import failed: ” + err.message); }finally{ els.importFile.value = “”; } }); // first render rerender(); })();

Leave a Reply

Logged in as herudaguru. Edit your profile. Log out? Required fields are marked *

Related Post

Back to Top