Familienangebote im August: Unterschied zwischen den Versionen
Aus Bündnis für Familie Tübingen.
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 7: | Zeile 7: | ||
<style> | <style> | ||
body { | body{ | ||
font-family: Arial, sans-serif; | font-family: Arial, sans-serif; | ||
margin: 20px; | margin:20px; | ||
background: #f5f5f5; | background:#f5f5f5; | ||
} | } | ||
h1 { | h1{ | ||
text-align: center; | text-align:center; | ||
} | } | ||
.calendar { | .calendar{ | ||
display: grid; | display:grid; | ||
grid-template-columns: repeat(7, 1fr); | grid-template-columns:repeat(7,1fr); | ||
gap: 10px; | gap:10px; | ||
} | } | ||
. | .weekday{ | ||
font-weight:bold; | |||
text-align:center; | |||
text-align: center; | padding:10px; | ||
padding: 10px; | background:#0077b6; | ||
color:white; | |||
} | } | ||
.day { | .day{ | ||
background: white; | background:white; | ||
min-height: | border-radius:8px; | ||
min-height:120px; | |||
padding:8px; | |||
box-shadow: 0 | cursor:pointer; | ||
box-shadow:0 2px 4px rgba(0,0,0,.15); | |||
} | } | ||
. | .day:hover{ | ||
background:#eef7ff; | |||
} | } | ||
. | .day-number{ | ||
font-weight:bold; | |||
margin-bottom:5px; | |||
margin-bottom: | |||
} | } | ||
. | .entry{ | ||
display: | background:#e8f4ff; | ||
width: | margin-top:4px; | ||
padding:4px; | |||
border-radius:4px; | |||
font-size:12px; | |||
} | |||
.modal{ | |||
display:none; | |||
position:fixed; | |||
inset:0; | |||
background:rgba(0,0,0,.5); | |||
justify-content:center; | |||
align-items:center; | |||
} | |||
.modal-content{ | |||
background:white; | |||
padding:20px; | |||
width:500px; | |||
max-width:95%; | |||
border-radius:10px; | |||
} | |||
input, textarea{ | |||
width:100%; | |||
margin-bottom:10px; | |||
padding:8px; | |||
} | |||
button{ | |||
padding:8px 14px; | |||
margin-right:5px; | |||
} | } | ||
</style> | </style> | ||
| Zeile 64: | Zeile 92: | ||
<div class="calendar" id="calendar"></div> | <div class="calendar" id="calendar"></div> | ||
< | <div class="modal" id="modal"> | ||
<div class="modal-content"> | |||
<h2 id="modalTitle"></h2> | |||
<input id="angebot" placeholder="Angebot"> | |||
<input id="uhrzeit" placeholder="Uhrzeit"> | |||
<input id="zielgruppe" placeholder="Zielgruppe"> | |||
<input id="anmeldung" placeholder="Anmeldung"> | |||
<input id="link" placeholder="Link zum Angebot"> | |||
<button onclick="saveEntry()">Speichern</button> | |||
<button onclick="closeModal()">Schließen</button> | |||
<hr> | |||
<div id="existingEntries"></div> | |||
</div> | |||
</div> | |||
<script> | |||
const weekdays = [ | const weekdays = [ | ||
" | "Mo","Di","Mi","Do","Fr","Sa","So" | ||
]; | ]; | ||
weekdays.forEach(day => { | const calendar = document.getElementById("calendar"); | ||
const | |||
weekdays.forEach(day=>{ | |||
const div=document.createElement("div"); | |||
calendar.appendChild( | div.className="weekday"; | ||
div.textContent=day; | |||
calendar.appendChild(div); | |||
}); | }); | ||
// August 2026 beginnt an einem Samstag | // August 2026 beginnt an einem Samstag | ||
const | for(let i=0;i<5;i++){ | ||
const empty=document.createElement("div"); | |||
calendar.appendChild(empty); | |||
} | |||
for(let day=1; day<=31; day++){ | |||
const div=document.createElement("div"); | |||
div.className="day"; | |||
div.innerHTML=` | |||
<div class="day-number">${day}</div> | |||
<div id="entries-${day}"></div> | |||
`; | |||
div.onclick=()=>openModal(day); | |||
calendar.appendChild(div); | |||
} | |||
let currentDay=null; | |||
function getData(){ | |||
return JSON.parse(localStorage.getItem("august2026")) || {}; | |||
} | |||
function saveData(data){ | |||
localStorage.setItem("august2026",JSON.stringify(data)); | |||
} | |||
function openModal(day){ | |||
currentDay=day; | |||
document.getElementById("modal").style.display="flex"; | |||
document.getElementById("modalTitle").textContent= | |||
"Einträge für " + day + ". August 2026"; | |||
renderEntries(day); | |||
} | |||
function closeModal(){ | |||
document.getElementById("modal").style.display="none"; | |||
} | } | ||
function saveEntry(){ | |||
const | |||
const angebot=document.getElementById("angebot").value; | |||
const uhrzeit=document.getElementById("uhrzeit").value; | |||
const zielgruppe=document.getElementById("zielgruppe").value; | |||
const anmeldung=document.getElementById("anmeldung").value; | |||
const link=document.getElementById("link").value; | |||
if(!angebot) return; | |||
const data=getData(); | |||
if ( | if(!data[currentDay]){ | ||
data[currentDay]=[]; | |||
} | } | ||
data[currentDay].push({ | |||
angebot, | |||
uhrzeit, | |||
zielgruppe, | |||
anmeldung, | |||
link | |||
}); | |||
saveData(data); | |||
document.getElementById("angebot").value=""; | |||
document.getElementById("uhrzeit").value=""; | |||
document.getElementById("zielgruppe").value=""; | |||
document.getElementById("anmeldung").value=""; | |||
document.getElementById("link").value=""; | |||
renderEntries(currentDay); | |||
renderCalendar(); | |||
} | } | ||
function deleteEntry(day,index){ | |||
const data=getData(); | |||
data[day].splice(index,1); | |||
saveData(data); | |||
renderEntries(day); | |||
renderCalendar(); | |||
} | |||
function renderEntries(day){ | |||
const data=getData(); | |||
const container=document.getElementById("existingEntries"); | |||
container.innerHTML=""; | |||
if(!data[day]) return; | |||
data[day].forEach((entry,index)=>{ | |||
container.innerHTML += ` | |||
<div style="border:1px solid #ddd;padding:8px;margin-bottom:8px;"> | |||
<strong>${entry.angebot}</strong><br> | |||
Uhrzeit: ${entry.uhrzeit}<br> | |||
Zielgruppe: ${entry.zielgruppe}<br> | |||
Anmeldung: ${entry.anmeldung}<br> | |||
<a href="${entry.link}" target="_blank"> | |||
Angebot öffnen | |||
</a><br><br> | |||
<button onclick="deleteEntry(${day},${index})"> | |||
Löschen | |||
</button> | |||
</div> | |||
`; | |||
}); | |||
} | |||
function renderCalendar(){ | |||
const data=getData(); | |||
for(let day=1; day<=31; day++){ | |||
const container= | |||
document.getElementById(`entries-${day}`); | |||
container.innerHTML=""; | |||
if(data[day]){ | |||
data[day].forEach(entry=>{ | |||
const div=document.createElement("div"); | |||
div.className="entry"; | |||
div.textContent= | |||
entry.uhrzeit + " - " + entry.angebot; | |||
container.appendChild(div); | |||
}); | |||
} | |||
} | |||
} | |||
renderCalendar(); | |||
</script> | </script> | ||
</body> | </body> | ||
</html> | </html> | ||
Version vom 9. Juni 2026, 09:36 Uhr
<!DOCTYPE html>