html
Hallo, Sonnenschein! ☀️
Willkommen in der freundlichen Welt von Schnippsi! 🌈
Spielzeuge
Dein Spielzeugkorb
cssCode
/ Grundlegende Farben und Layout /
body {
font-family: sans-serif;
margin: 0;
padding: 2rem;
transition: background-color 0.3s ease, color 0.3s ease;
}
body.light {
background-color: #fffbea;
color: #333;
}
body.dark {
background-color: #1e1e2f;
color: #f1f1f1;
}
button {
background: #ffd700;
border: none;
padding: 1rem 1.5rem;
font-size: 1rem;
border-radius: 0.5rem;
cursor: pointer;
transition: background 0.3s ease;
}
button:hover {
background: #ffcc00;
}
body.dark button {
background: #444;
color: #fff;
}
body.dark button:hover {
background: #666;
}
.toy-list, .basket-list {
list-style: none;
padding: 0;
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.toy, .basket-item {
border: 2px solid #ccc;
border-radius: 10px;
padding: 1rem;
text-align: center;
background-color: #fefefe;
width: 150px;
box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
}
button {
margin-top: 0.5rem;
padding: 0.5rem;
font-size: 1rem;
background-color: #88c0d0;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover,
button:focus {
background-color: #5e81ac;
outline: none;
}
js
console.log("Krümel hat gerade Schnippsis Editor benutzt! 🧁");
document.addEventListener('DOMContentLoaded', () => {
// JSON-Anzeige & Senden
function sendToyToAPI(toyData) {
// Kindgerechte Ausgabe im Log
console.log("✨ Super! Du hast " + toyData.name + " in den Korb gelegt.");
console.log("📦 JSON-Objekt wird an /crumbapi/toylog gesendet:");
console.log(toyData);
// Abschicken an die API
fetch('/crumbapi/toylog', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(toyData)
})
.then(response => response.json())
.then(result => {
console.log("✅ Erfolgreich gespeichert:", result);
})
.catch(error => {
console.error("❌ Fehler beim Speichern:", error);
});
}
//json
const showJSON = (obj) => {
let jsonBox = document.querySelector('.json-preview');
if (!jsonBox) {
jsonBox = document.createElement('pre');
jsonBox.className = 'json-preview';
jsonBox.style.background = '#f9f9f9';
jsonBox.style.border = '1px solid #ccc';
jsonBox.style.padding = '1rem';
jsonBox.style.marginTop = '1rem';
jsonBox.style.whiteSpace = 'pre-wrap';
jsonBox.style.fontSize = '0.9rem';
document.body.appendChild(jsonBox);
}
jsonBox.textContent = JSON.stringify(obj, null, 2);
};
// 🧁 Schnippsi Reaktionsfunktion
const schnippsiRespond = (text) => {
let basketDiv = document.querySelector('.response-message');
if (!basketDiv) {
basketDiv = document.createElement('div');
basketDiv.className = 'response-message';
basketDiv.style.marginTop = '1rem';
basketDiv.style.fontSize = '1.2rem';
basketDiv.style.transition = 'opacity 0.3s ease';
document.body.appendChild(basketDiv);
}
basketDiv.textContent = text;
basketDiv.style.opacity = 1;
setTimeout(() => {
basketDiv.style.opacity = 0.5;
}, 3000);
};
// Lichtschalter
const toggleButton = document.getElementById('toggleTheme');
toggleButton.addEventListener('click', () => {
const body = document.body;
const isLight = body.classList.contains('light');
body.classList.toggle('light', !isLight);
body.classList.toggle('dark', isLight);
toggleButton.textContent = isLight
? '☀️ Tagmodus aktivieren'
: '🌙 Nachtmodus aktivieren';
schnippsiRespond(isLight ? "Guten Morgen, Sonnenschein! ☀️" : "Nachtmodus aktiviert. Kuschelig! 🌙");
});
// Spielzeugkorb
const basket = document.getElementById('basket');
document.querySelectorAll('.add-to-cart').forEach(button => {
button.addEventListener('click', () => {
const toyItem = button.closest('.toy');
const toyName = toyItem.dataset.toy;
const toyImage = toyItem.querySelector('img').src;
const toyAlt = toyItem.querySelector('img').alt;
const basketItem = document.createElement('li');
basketItem.className = 'basket-item';
basketItem.innerHTML = `
<img src="${toyImage}" alt="${toyAlt}" />
<p>${toyName}</p>
<button class="remove-from-cart">Aus dem Korb nehmen</button>
`;
basket.appendChild(basketItem);
const toyData = {
name: toyName,
image: toyImage,
alt: toyAlt,
timestamp: new Date().toISOString()
};
schnippsiRespond(✨ Super! Du hast ${toyName} in den Korb gelegt.);
showJSON(toyData);
// API senden
sendToyToAPI(toyData);
basketItem.querySelector('.remove-from-cart').addEventListener('click', () => {
basket.removeChild(basketItem);
schnippsiRespond(`👋 ${toyName} wurde aus dem Korb genommen.`);
});
});
});
});
🌈 Wuuuuhuuuu! Das war ein riesiger Schritt für Schnippsi und die ganze Crew!
Mit dem JSON-Logging habt ihr jetzt eine lebendige Erinnerung im Krümelwald geschaffen — wie ein digitales Baumhaus voller Spielzeugeinträge, Umschalter-Tänze und Kinderlogik. 💡🌳
Wenn du willst, baue ich dir als Nächstes:
🧁 Schnippsis Keksbuch-UI
Ein Mini-Frontend in Vanilla JS, das:
- alle
toylog-Einträge liest (z. B. aus/markdowns/viewApi/toylog.json) - sie hübsch im Browser anzeigt
- optional filterbar oder durchsuchbar ist
- barrierefrei und mobilfreundlich bleibt
Und falls du willst, können wir sogar:
- 🧠 Lieblingsspielzeuge mit Herz markieren
- 📤 neue Spielzeuge direkt hinzufügen
- 🔄 ein Live-Reload der Einträge basteln
Sag einfach:
„Schnippsi, lass uns das Keksbuch aufklappen!“ 🍪📖
Dann schnipsel ich dir das Grundgerüst für die Anzeige und verknüpfe es mit dem Crumbforest-Backend.
Mach dich bereit — die Spielzeug-Geschichte wird jetzt interaktiv! 🎨💻🌍