Mitte Level implementieren

This commit is contained in:
2026-02-18 13:53:00 +01:00
parent 374be205b7
commit be159bcbf0
3 changed files with 112 additions and 133 deletions

View File

@@ -65,7 +65,7 @@
</div> </div>
<div id="trainingLeicht" class="training-view"></div> <div id="trainingLeicht" class="training-view"></div>
<div id="trainingMittel" class="training-view" style="display:none;"></div> <div id="trainingMittel" class="training-view"></div>
<div id="trainingSchwer" class="training-view"></div> <div id="trainingSchwer" class="training-view"></div>
<div class="button-wrapper"> <div class="button-wrapper">

View File

@@ -60,9 +60,6 @@ function createPagePair() {
} }
const button = document.getElementById("kartenErstellen"); const button = document.getElementById("kartenErstellen");
const onlineContainer = document.getElementById("kartenContainer");
const frontPage = document.querySelector(".page_front");
const backPage = document.querySelector(".page_back");
button.addEventListener("click", () => { button.addEventListener("click", () => {
const inputText = document.getElementById("inputText").value; const inputText = document.getElementById("inputText").value;
@@ -82,17 +79,19 @@ button.addEventListener("click", () => {
// Erstellt druckfertige PDF-Seiten mit jeweils 8 Karten pro Seite. // Erstellt druckfertige PDF-Seiten mit jeweils 8 Karten pro Seite.
function createPDFPages(wordArray) { function createPDFPages(wordArray) {
const kartenContainer = document.getElementById("kartenContainer"); const kartenContainer = document.getElementById("kartenContainer");
const druckenBtn = document.getElementById("druckenBtn");
kartenContainer.innerHTML = ""; kartenContainer.innerHTML = "";
kartenContainer.style.display = "flex"; kartenContainer.style.display = "flex";
kartenContainer.style.flexDirection = "column"; kartenContainer.style.flexDirection = "column";
for (let i = 0; i < parsedArray.length; i += 8) { for (let i = 0; i < wordArray.length; i += 8) {
const { frontPage, backPage } = createPagePair(); const { frontPage, backPage } = createPagePair();
parsedArray.slice(i, i + 8).forEach((karte) => { wordArray.slice(i, i + 8).forEach((karte) => {
const frontCard = document.createElement("div"); const frontCard = document.createElement("div");
frontCard.className = "card card-en"; frontCard.className = "card card-en";
@@ -114,17 +113,19 @@ function createPDFPages(wordArray) {
kartenContainer.appendChild(frontPage); kartenContainer.appendChild(frontPage);
kartenContainer.appendChild(backPage); kartenContainer.appendChild(backPage);
document.getElementById("druckenBtn").style.display = "block";
} }
druckenBtn.style.display = "block";
alert("PDF-Seiten wurden erstellt! Du kannst sie jetzt drucken."); alert("PDF-Seiten wurden erstellt! Du kannst sie jetzt drucken.");
} }
document.getElementById("druckenBtn").addEventListener("click", () => { document.getElementById("druckenBtn").addEventListener("click", () => {
window.print(); window.print();
}); });
const modusBtns = document.querySelectorAll('.modus-btn'); const modusBtns = document.querySelectorAll('.modus-btn');
const trainingLevels = document.getElementById('trainingLevels');
modusBtns.forEach(btn => { modusBtns.forEach(btn => {
btn.addEventListener('click', () => { btn.addEventListener('click', () => {
@@ -157,7 +158,6 @@ let trainingsZustand = {
ziehKarten: [], ziehKarten: [],
rundeNummer: 0, rundeNummer: 0,
richtung: "EN_DE", richtung: "EN_DE",
zuordnungen: 0,
}; };
// Startet das Training im Modus "Leicht". // Startet das Training im Modus "Leicht".
@@ -178,15 +178,99 @@ function startLeichtTraining() {
zeigeNaechsteKarte(); zeigeNaechsteKarte();
} }
// Verarbeitet die Antwort des Nutzers im leichten Modus.
function antworteAufKarte(weißIch) {
const karte = trainingsZustand.aktuelleKarte;
if (weißIch) {
trainingsZustand.gelernt.push(karte);
trainingsZustand.aktiveKarten = trainingsZustand.aktiveKarten.filter(k => k !== karte);
} else {
karte.versuche++;
if (karte.versuche >= 5) {
trainingsZustand.nichtGelernt.push(karte);
trainingsZustand.aktiveKarten = trainingsZustand.aktiveKarten.filter(k => k !== karte);
} else {
trainingsZustand.aktiveKarten.push(trainingsZustand.aktiveKarten.splice(trainingsZustand.aktiveKarten.indexOf(karte), 1)[0]);
}
}
if (trainingsZustand.aktiveKarten.length < 3 && trainingsZustand.quelleKarten.length > 0) {
let neueKarte = trainingsZustand.quelleKarten.shift();
neueKarte.versuche = 0;
trainingsZustand.aktiveKarten.push(neueKarte);
}
zeigeNaechsteKarte();
}
// Wählt zufällig eine aktive Karte aus
function zeigeNaechsteKarte() {
if (trainingsZustand.aktiveKarten.length === 0) {
if (trainingsZustand.quelleKarten.length === 0) {
alert(`Training beendet!
Gelernt: ${trainingsZustand.gelernt.length}
Nicht gelernt: ${trainingsZustand.nichtGelernt.length}`);
return;
}
const neueKarte = trainingsZustand.quelleKarten.shift();
neueKarte.versuche = 0;
trainingsZustand.aktiveKarten.push(neueKarte);
}
const index = Math.floor(
Math.random() * trainingsZustand.aktiveKarten.length
);
trainingsZustand.aktuelleKarte =
trainingsZustand.aktiveKarten[index];
renderLeichtKarte(trainingsZustand.aktuelleKarte);
}
// Rendert eine einzelne Karte im leichten Modus.
function renderLeichtKarte(karte) {
const container = document.getElementById("trainingLeicht");
container.innerHTML = "";
const cardEl = document.createElement("div");
cardEl.className = "training-card";
cardEl.innerHTML = `
<div class="training-card-inner">
<div class="training-front">
<h2>${karte.englisch}</h2>
<div class="ipa">${karte.ipa}</div>
<div class="example">${karte.beispielEN}</div>
</div>
<div class="training-back">
<h2>${karte.deutsch}</h2>
<div class="example">${karte.beispielDE}</div>
</div>
</div>
`;
cardEl.onclick = () => cardEl.classList.toggle("flip");
const actions = document.createElement("div");
actions.className = "training-actions";
actions.innerHTML = `
<button id="knowBtn">Weiß ich</button>
<button id="dontKnowBtn">Weiß ich nicht</button>
`;
actions.querySelector("#knowBtn").onclick = () => antworteAufKarte(true);
actions.querySelector("#dontKnowBtn").onclick = () => antworteAufKarte(false);
container.appendChild(cardEl);
container.appendChild(actions);
}
// Startet das Training im Modus "Mittel". // Startet das Training im Modus "Mittel".
function startMittelTraining() { function startMittelTraining() {
trainingsZustand.modus = "mittel"; trainingsZustand.modus = "mittel";
trainingsZustand.basisKarten = parsedArray.map(karte => ({ trainingsZustand.basisKarten = parsedArray.map(karte => ({
...karte, ...karte,
// richtigEN: 0,
// richtigDE: 0,
// fehler: 0,
// verbleibend: 2
erfolge: 0, erfolge: 0,
fehler: 0 fehler: 0
})); }));
@@ -202,13 +286,11 @@ function startMittelTraining() {
function ladeMittelRunde() { function ladeMittelRunde() {
trainingsZustand.aktiveKarten = []; trainingsZustand.aktiveKarten = [];
trainingsZustand.ziehKarten = []; trainingsZustand.ziehKarten = [];
trainingsZustand.zuordnungen = 0;
trainingsZustand.richtung = trainingsZustand.rundeNummer % 2 === 0 ? "EN_DE" : "DE_EN"; trainingsZustand.richtung = trainingsZustand.rundeNummer % 2 === 0 ? "EN_DE" : "DE_EN";
trainingsZustand.rundeNummer++; trainingsZustand.rundeNummer++;
mischeArray(trainingsZustand.basisKarten); mischeArray(trainingsZustand.basisKarten);
trainingsZustand.aktiveKarten = trainingsZustand.basisKarten.slice(0, 4); trainingsZustand.aktiveKarten = trainingsZustand.basisKarten.slice(0, 4);
if(trainingsZustand.aktiveKarten.length === 0) { if(trainingsZustand.aktiveKarten.length === 0) {
@@ -298,7 +380,6 @@ function renderMittelMatching() {
e.preventDefault(); e.preventDefault();
const draggedIndex = Number(e.dataTransfer.getData("draggedIndex")); const draggedIndex = Number(e.dataTransfer.getData("draggedIndex"));
// const targetId = karte.id;
swapZiehKarten(draggedIndex, index); swapZiehKarten(draggedIndex, index);
}); });
@@ -375,113 +456,10 @@ function swapZiehKarten(index1, index2) {
trainingsZustand.ziehKarten[index2]; trainingsZustand.ziehKarten[index2];
trainingsZustand.ziehKarten[index2] = temp; trainingsZustand.ziehKarten[index2] = temp;
renderMittelMatching(); const container = document.querySelector(".spalte-rechts");
} const cards = container.children;
// Überprüft eine einzelne Zuordnung im Matching-Modus. container.insertBefore(cards[index2], cards[index1]);
function pruefeZuordnung(ziehId, dropId) {
if(ziehId === dropId) {
const karte = trainingsZustand.aktiveKarten.find(k => k.id == ziehId);
trainingsZustand.gelernt.push(karte);
trainingsZustand.aktiveKarten = trainingsZustand.aktiveKarten.filter(k => k.id != ziehId);
trainingsZustand.ziehKarten = trainingsZustand.ziehKarten.filter(k => k.id != ziehId);
renderMittelMatching();
if(trainingsZustand.aktiveKarten.length === 0) {
ladeMittelRunde();
}
} else {
console.log("Falsh zugeorgnet");
}
}
// Wählt zufällig eine aktive Karte aus
function zeigeNaechsteKarte() {
if (
trainingsZustand.aktiveKarten.length === 0 &&
trainingsZustand.quelleKarten.length === 0
) {
alert(`Training beendet!
Gelernt: ${trainingsZustand.gelernt.length}
Nicht gelernt: ${trainingsZustand.nichtGelernt.length}`);
return;
}
const index = Math.floor(
Math.random() * trainingsZustand.aktiveKarten.length
);
trainingsZustand.aktuelleKarte =
trainingsZustand.aktiveKarten[index];
renderLeichtKarte(trainingsZustand.aktuelleKarte);
}
// Rendert eine einzelne Karte im leichten Modus.
function renderLeichtKarte(karte) {
const container = document.getElementById("trainingLeicht");
container.innerHTML = "";
const cardEl = document.createElement("div");
cardEl.className = "training-card";
cardEl.innerHTML = `
<div class="training-card-inner">
<div class="training-front">
<h2>${karte.englisch}</h2>
<div class="ipa">${karte.ipa}</div>
<div class="example">${karte.beispielEN}</div>
</div>
<div class="training-back">
<h2>${karte.deutsch}</h2>
<div class="example">${karte.beispielDE}</div>
</div>
</div>
`;
cardEl.onclick = () => cardEl.classList.toggle("flip");
const actions = document.createElement("div");
actions.className = "training-actions";
actions.innerHTML = `
<button id="knowBtn">Weiß ich</button>
<button id="dontKnowBtn">Weiß ich nicht</button>
`;
actions.querySelector("#knowBtn").onclick = () => antworteAufKarte(true);
actions.querySelector("#dontKnowBtn").onclick = () => antworteAufKarte(false);
container.appendChild(cardEl);
container.appendChild(actions);
}
// Verarbeitet die Antwort des Nutzers im leichten Modus.
function antworteAufKarte(weißIch) {
const karte = trainingsZustand.aktuelleKarte;
if (weißIch) {
trainingsZustand.gelernt.push(karte);
trainingsZustand.aktiveKarten = trainingsZustand.aktiveKarten.filter(k => k !== karte);
} else {
karte.versuche++;
if (karte.versuche >= 5) {
trainingsZustand.nichtGelernt.push(karte);
trainingsZustand.aktiveKarten = trainingsZustand.aktiveKarten.filter(k => k !== karte);
} else {
trainingsZustand.aktiveKarten.push(trainingsZustand.aktiveKarten.splice(trainingsZustand.aktiveKarten.indexOf(karte), 1)[0]);
}
}
if (trainingsZustand.aktiveKarten.length < 3 && trainingsZustand.quelleKarten.length > 0) {
let neueKarte = trainingsZustand.quelleKarten.shift();
neueKarte.versuche = 0;
trainingsZustand.aktiveKarten.push(neueKarte);
}
zeigeNaechsteKarte();
} }
// Blendet alle Trainingslevel-Ansichten aus // Blendet alle Trainingslevel-Ansichten aus
@@ -494,13 +472,11 @@ function showMode(id) {
} }
function showLevel(id) { function showLevel(id) {
console.log("showLevel called with:", id); document.getElementById("trainingLeicht").classList.add("hidden");
document.getElementById("trainingMittel").classList.add("hidden");
document.getElementById("trainingSchwer").classList.add("hidden");
document.getElementById("trainingLeicht").style.display = "none"; document.getElementById(id).classList.remove("hidden");
document.getElementById("trainingMittel").style.display = "none";
document.getElementById("trainingSchwer").style.display = "none";
document.getElementById(id).style.display = "block";
} }
document.querySelectorAll(".level-btn").forEach(btn => { document.querySelectorAll(".level-btn").forEach(btn => {

View File

@@ -368,30 +368,33 @@ h1 {
#pdfPages, #pdfPages,
#onlineTraining, #onlineTraining,
#trainingLeicht,
#trainingMittel, #trainingMittel,
#trainingSchwer { #trainingSchwer {
display: none; display: none;
} }
#trainingMittel { #trainingMittel {
display: flex !important; display: flex;
justify-content: center; justify-content: center;
gap: 10px; gap: 10px;
align-items: flex-start; align-items: flex-start;
} }
.hidden {
display: none !important;
}
.spalte-links { .spalte-links {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-end; align-items: stretch;
gap: 10px; gap: 10px;
} }
.spalte-rechts { .spalte-rechts {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: stretch;
gap: 10px; gap: 10px;
} }