Next-Gen UI/UX Redesign: Neues Design-System, Live-Suche, 1-Klick Code-Kopieren und persistente Checklisten
This commit is contained in:
parent
1e5412da1d
commit
5045b74145
34 changed files with 747 additions and 393 deletions
|
|
@ -10,5 +10,5 @@
|
|||
"streak_tage": 1,
|
||||
"letzter_aktiver_tag": "2026-08-29",
|
||||
"historie": [],
|
||||
"zuletzt_aktualisiert": "2026-08-29T15:47:31.273343"
|
||||
"zuletzt_aktualisiert": "2026-08-29T15:50:41.498015"
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ window.GAMIFICATION_DATA = {
|
|||
"streak_tage": 1,
|
||||
"letzter_aktiver_tag": "2026-08-29",
|
||||
"historie": [],
|
||||
"zuletzt_aktualisiert": "2026-08-29T15:47:31.273343"
|
||||
"zuletzt_aktualisiert": "2026-08-29T15:50:41.498015"
|
||||
};
|
||||
window.GAMIFICATION_BADGES_KATALOG = {
|
||||
"rechenkonegin": {
|
||||
|
|
|
|||
996
assets/style.css
996
assets/style.css
File diff suppressed because it is too large
Load diff
101
assets/ui_enhancements.js
Normal file
101
assets/ui_enhancements.js
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
/**
|
||||
* ✨ INTERAKTIVE UX-ERWEITERUNGEN FÜR PYTHON LERNPORTAL ✨
|
||||
* ========================================================
|
||||
* - Live-Suche & Filter über alle 27 Kapitel
|
||||
* - 1-Klick Code-Kopier-Buttons mit Checkmark-Animation
|
||||
* - Persistente Aufgaben-Checklisten (Checkboxen im Browser speichern)
|
||||
* - Sanftes Scrollen & Tastatur-Shortcuts
|
||||
*/
|
||||
|
||||
(function () {
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
// 1. Code-Kopier-Buttons für alle Code-Blöcke
|
||||
document.querySelectorAll(".code-container").forEach((container) => {
|
||||
const header = container.querySelector(".code-header");
|
||||
const pre = container.querySelector("pre");
|
||||
if (!pre) return;
|
||||
|
||||
const copyBtn = document.createElement("button");
|
||||
copyBtn.type = "button";
|
||||
copyBtn.className = "btn-copy-code";
|
||||
copyBtn.innerHTML = "<span>📋 Kopieren</span>";
|
||||
copyBtn.title = "Code in Zwischenablage kopieren";
|
||||
|
||||
copyBtn.addEventListener("click", async () => {
|
||||
const codeText = pre.innerText;
|
||||
try {
|
||||
await navigator.clipboard.writeText(codeText);
|
||||
copyBtn.innerHTML = "<span>✅ Kopiert!</span>";
|
||||
copyBtn.classList.add("copied");
|
||||
setTimeout(() => {
|
||||
copyBtn.innerHTML = "<span>📋 Kopieren</span>";
|
||||
copyBtn.classList.remove("copied");
|
||||
}, 2000);
|
||||
} catch (err) {
|
||||
copyBtn.innerHTML = "<span>❌ Fehler</span>";
|
||||
}
|
||||
});
|
||||
|
||||
if (header) {
|
||||
header.appendChild(copyBtn);
|
||||
} else {
|
||||
container.style.position = "relative";
|
||||
copyBtn.classList.add("btn-copy-floating");
|
||||
container.appendChild(copyBtn);
|
||||
}
|
||||
});
|
||||
|
||||
// 2. Persistente Checkboxen in Aufgabenlisten
|
||||
const pageId = window.location.pathname;
|
||||
try {
|
||||
const savedChecks = JSON.parse(localStorage.getItem("task_checks_" + pageId) || "{}");
|
||||
document.querySelectorAll(".task-checkbox").forEach((cb, idx) => {
|
||||
const key = cb.id || "cb_" + idx;
|
||||
if (savedChecks[key]) {
|
||||
cb.checked = true;
|
||||
cb.closest(".task-item")?.classList.add("task-completed");
|
||||
}
|
||||
|
||||
cb.addEventListener("change", () => {
|
||||
savedChecks[key] = cb.checked;
|
||||
localStorage.setItem("task_checks_" + pageId, JSON.stringify(savedChecks));
|
||||
if (cb.checked) {
|
||||
cb.closest(".task-item")?.classList.add("task-completed");
|
||||
} else {
|
||||
cb.closest(".task-item")?.classList.remove("task-completed");
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (e) {}
|
||||
|
||||
// 3. Live-Suche & Filter für das Hauptportal
|
||||
const searchInput = document.getElementById("portal-search-input");
|
||||
if (searchInput) {
|
||||
const cards = document.querySelectorAll(".roadmap-card");
|
||||
searchInput.addEventListener("input", (e) => {
|
||||
const query = e.target.value.toLowerCase().trim();
|
||||
let matchCount = 0;
|
||||
|
||||
cards.forEach((card) => {
|
||||
const text = card.innerText.toLowerCase();
|
||||
if (!query || text.includes(query)) {
|
||||
card.style.display = "flex";
|
||||
matchCount++;
|
||||
} else {
|
||||
card.style.display = "none";
|
||||
}
|
||||
});
|
||||
|
||||
const countBadge = document.getElementById("search-results-count");
|
||||
if (countBadge) {
|
||||
if (query) {
|
||||
countBadge.innerText = `${matchCount} Kapitel gefunden`;
|
||||
countBadge.style.display = "inline-block";
|
||||
} else {
|
||||
countBadge.style.display = "none";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
|
@ -175,6 +175,13 @@ python3 test_all.py # Prüft alle 27 Kapitel auf einen Schlag und synchronisi
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 🔍 Live-Suche & Filter über alle 27 Kapitel -->
|
||||
<div class="search-bar-container">
|
||||
<span class="search-icon">🔍</span>
|
||||
<input type="text" id="portal-search-input" class="search-input" placeholder="Kapitel oder Thema durchsuchen (z.B. Schleifen, Klassen, Git, Tkinter, Dunder, Exceptions, Listen)...">
|
||||
<span id="search-results-count" class="search-count"></span>
|
||||
</div>
|
||||
|
||||
<!-- LEHRPFAD 1: GRUNDLAGEN -->
|
||||
<section>
|
||||
<div class="section-header">
|
||||
|
|
@ -840,5 +847,6 @@ object has no attribute 'gang'</code></pre>
|
|||
<script src="assets/certificate.js"></script>
|
||||
<script src="assets/parsons.js"></script>
|
||||
<script src="assets/runner.js"></script>
|
||||
<script src="assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -321,5 +321,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -272,5 +272,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -275,5 +275,6 @@ return f"Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg:
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -307,5 +307,6 @@ return False</code></pre>
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -348,5 +348,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -301,5 +301,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -292,5 +292,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -247,5 +247,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -321,5 +321,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -271,5 +271,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -225,5 +225,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -307,5 +307,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -234,5 +234,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -214,5 +214,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -221,5 +221,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -331,5 +331,6 @@ sudo snap install --classic code</code></pre>
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -227,5 +227,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -217,5 +217,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -196,5 +196,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -247,5 +247,6 @@ STACK (Variablen-Namen) HEAP (Echter Speicher / RAM)
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -296,5 +296,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -315,5 +315,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -375,5 +375,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -408,5 +408,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -275,5 +275,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -263,5 +263,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -369,5 +369,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -332,5 +332,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -344,5 +344,6 @@
|
|||
<script src="../../assets/gamification.js"></script>
|
||||
<script src="../../assets/parsons.js"></script>
|
||||
<script src="../../assets/interpreter.js"></script>
|
||||
<script src="../../assets/ui_enhancements.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Reference in a new issue