Compare commits

...

3 Commits

6 changed files with 426 additions and 65 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.vs/

View File

@@ -7,29 +7,52 @@
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Flashcards Generator</h1>
<header class="main-header">
<h1>Flashcards Generator</h1>
</header>
<div class="main-wrapper">
<div class="section-title" id="title">
<div class="content" ">
<label for="inputText" class="inputText">Sende deine Wortliste an ChatGPT mit folgender Anweisung:</label>
</div>
<div id="aufgabe_fuer_gpt">
<pre id="formatText">
Bitte formatiere meine Wortliste exakt nach folgendem Schema.
Jeder Eintrag muss durch eine Leerzeile getrennt sein.
<label for="inputText">Sende deine Wortliste an ChatGPT mit folgender Anweisung:</label>
Englisches Wort
[IPA-Transkription]
Beispielsatz auf Englisch
Deutsche Übersetzung des Wortes
Beispielsatz auf Deutsch
</pre>
<button id="copyButton" style="position: absolute; top: 5px; right: 5px; cursor: pointer;">📋</button>
</div>
<div id="inputHinweis">
<div class="content">
<label for="inputText" class="section-title">Füge deinen Text hier ein</label>
<textarea id="inputText" placeholder="Hier Text einfügen..."></textarea>
</div>
</div>
</div>
<div class="button-wrapper">
<button id="kartenErstellen">Karten erstellen</button>
</div>
<div id="modusAuswahlSeite" style="display:none; text-align:center; margin-top:20px;">
<h2>Wählt einen Modus:</h2>
<button class="modus-btn" data-modus="druck">📄 PDF erstellen</button>
<button class="modus-btn" data-modus="training_einfach">🃏 Online-Training</button>
<div id="aufgabe_fuer_gpt">
<pre id="formatText">
Bitte formatiere meine Wortliste exakt nach folgendem Schema.
Jeder Eintrag muss durch eine Leerzeile getrennt sein.
<button class="modus-btn" data-modus="statistik">📊 Statistik</button>
</div>
Englisches Wort
[IPA-Transkription]
Beispielsatz auf Englisch
Deutsche Übersetzung des Wortes
Beispielsatz auf Deutsch
<div id="kartenContainer"></div>
</pre>
<button id="copyButton" style="position: absolute; top: 5px; right: 5px; cursor: pointer;">📋</button>
</div>
<textarea id="inputText" rows="10" cols="50" placeholder="Hier Text einfügen..."></textarea>
<div id="kartenContainer"></div>
<button id="kartenErstellen">Karten erstellen</button>
<div id="flashcards-container"></div>
<script src="eigenerCode.js"></script>
<div id="flashcards-container"></div>
<div class="button-wrapper">
<button id="druckenBtn" style="display:none;">Drucken</button>
</div>
<script src="eigenerCode.js"></script>
</div>
</body>
</html>

BIN
MainPage/stas/drucker.jfif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -1,4 +1,6 @@
document.getElementById('copyButton').addEventListener('click', () => {
let parsedArray = [];
document.getElementById('copyButton').addEventListener('click', () => {
const text = document.getElementById('formatText').innerText;
navigator.clipboard.writeText(text).then(() => {
@@ -6,10 +8,31 @@
}).catch(err => {
console.error('Konnte nicht kopieren: ', err);
});
for (let i = 0; i < parsedArray.length; i += 8) {
const pageFront = document.createElement("div");
pageFront.className = "page_front";
const pageBack = document.createElement("div");
pageBack.className = "page_back";
const currentSlice = parsedArray.slice(i, i + 8);
currentSlice.forEach(karte => {
const frontCard = document.createElement("div");
frontCard.className = "card";
frontCard.innerHTML = `<h2>${karte.englisch}</h2><div>${karte.ipa}</div><p>${karte.beispielEN}</p>`;
pageFront.appendChild(frontCard);
const backCard = document.createElement("div");
backCard.className = "card";
backCard.innerHTML = `<h2>${karte.deutsch}</h2><p>${karte.beispielDE}</p>`;
pageBack.appendChild(backCard);
});
container.appendChild(pageFront);
container.appendChild(pageBack);
}
});
const inputText = document.getElementById("inputText").value;
const cards = parseWordText(inputText);
function parseWordText(inputText) {
const wortBlocks = inputText.trim().split("\n\n");
const wortListe = [];
@@ -31,35 +54,98 @@ function parseWordText(inputText) {
};
wortListe.push(wortObj);
console.log(wortObj);
}
return wortListe;
}
function createPagePair() {
const frontPage = document.createElement("div");
frontPage.className = "page page-front";
const backPage = document.createElement("div");
backPage.className = "page page-back";
return { frontPage, backPage };
}
const button = document.getElementById("kartenErstellen");
const container = document.getElementById("kartenContainer");
const onlineContainer = document.getElementById("kartenContainer");
const frontPage = document.querySelector(".page_front");
const backPage = document.querySelector(".page_back");
button.addEventListener("click", () => {
container.innerHTML = "";
parsedArray.forEach((karte, index) => {
const karteDiv = document.createElement("div");
karteDiv.classList.add("karte");
const inputText = document.getElementById("inputText").value;
parsedArray = parseWordText(inputText);
karteDiv.innerHTML = `
<div class="karte-inhalt">
<div class="karte-vorderseite">
<h2>${karte.englisch}</h2>
<p><em>${karte.ipa}</em></p>
<p>Beispiel: ${karte.beispielEN}</p>
</div>
<div class="karte-rückseite">
<h2>${karte.deutsch}</h2>
<p>Beispiel: ${karte.beispielDE}</p>
</div>
</div>
`;
container.appendChild(karteDiv);
if(parsedArray.length === 0) {
alert("Kein gültiges Format erkannt. Bitte überprüfe deine Eingabe.");
return;
}
alert("Karten erfolgreich erstellt!");
document.getElementById("title").style.display = "none";
button.style.display = "none";
document.getElementById("modusAuswahlSeite").style.display = "block";
});
document.querySelectorAll(".modus-btn").forEach(button => {
button.addEventListener("click", () => {
const modus = button.dataset.modus;
if (modus === "druck") {
createPDFPages(parsedArray);
} else {
console.log("Gewählter Modus:", modus);
}
});
});
function createPDFPages(wordArray) {
const kartenContainer = document.getElementById("kartenContainer");
kartenContainer.innerHTML = "";
kartenContainer.style.display = "flex";
kartenContainer.style.flexDirection = "column";
for (let i = 0; i < parsedArray.length; i += 8) {
const { frontPage, backPage } = createPagePair();
parsedArray.slice(i, i + 8).forEach((karte) => {
const frontCard = document.createElement("div");
frontCard.className = "card card-en";
frontCard.innerHTML = `
<h2>${karte.englisch}</h2>
<div class="ipa">${karte.ipa}</div>
<div class="example">${karte.beispielEN}</div>
`;
frontPage.appendChild(frontCard);
const backCard = document.createElement("div");
backCard.className = "card card-de";
backCard.innerHTML = `
<h2>${karte.deutsch}</h2>
<div class="example">${karte.beispielDE}</div>
`;
backPage.appendChild(backCard);
});
kartenContainer.appendChild(frontPage);
kartenContainer.appendChild(backPage);
document.getElementById("druckenBtn").style.display = "block";
}
alert("PDF-Seiten wurden erstellt! Du kannst sie jetzt druken.");
}
document.getElementById("druckenBtn").addEventListener("click", () => {
window.print();
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

View File

@@ -1,31 +1,282 @@
#aufgabe_fuer_gpt {
position: relative;
border: 1px solid #ccc;
padding: 10px;
border-radius: 5px;
width: 500px;
background: #f9f9f9;
body {
margin: 0;
padding: 0;
font-family: "Arial", sans-serif;
background-color: #f4f6fb;
color: #333;
}
h1 {
text-align: center;
margin-top: 30px;
margin-bottom: 20px;
}
.main-header {
position: relative;
top: 0;
width: 100%;
background-color: #880b75;
color: white;
padding: 18px 0;
text-align: center;
z-index: 1000;
}
.main-header h1 {
margin: 0;
font-size: 46px;
font-weight: 600;
font-family: -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.5;
}
.main-wrapper {
max-width: 900px;
margin: 0 auto;
margin-top: 10px;
padding: 20px;
background-color: #d9cfe0;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0,0,0,0.08);
}
.input-section {
margin-bottom: 30px;
}
.input-section h2 {
margin-bottom: 10px;
}
.hint-text {
font-size: 14px;
color: #666;
margin-bottom: 10px;
}
#aufgabe_fuer_gpt {
position: relative;
background-color: #f0f3ff;
border: 1px dashed #9aa5ff;
border-radius: 8px;
padding: 12px;
margin: 20px;
margin-top: 0;
}
#aufgabe_fuer_gpt pre {
margin: 0;
font-size: 13px;
white-space: pre-wrap;
}
#copyButton {
position: absolute;
top: 8px;
right: 8px;
background: white;
border: 1px solid #ccc;
border-radius: 6px;
cursor: pointer;
padding: 4px 6px;
}
.content {
max-width: 900px;
margin: 0 auto;
padding: 30px 20px;
}
.section-title {
display: block;
font-size: 18px;
font-weight: 600;
margin-bottom: 10px;
}
#inputText {
width: 100%;
min-height: 220px;
padding: 14px;
font-size: 16px;
line-height: 1.5;
border-radius: 6px;
border: 1px solid #ccc;
resize: vertical;
box-sizing: border-box;
}
#kartenContainer {
margin-top: 30px;
display: none;
flex-direction: column;
gap: 40px;
align-items: center;
}
.page {
width: 190mm;
height: 277mm;
padding: 0;
box-sizing: border-box;
background: white;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(4, 1fr);
page-break-after: always;
}
.page-back {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(4, 1fr);
direction: rtl;
}
.page-back .card {
direction: ltr;
}
.card {
position: relative;
overflow: hidden;
border: 1px dashed #333;
border-radius: 0;
padding: 25px;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: center;
font-family: Arial, sans-serif;
}
.card::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10mm;
}
.card-en::before {
background-color: #f4c430;
}
.card-de::before {
background-color: #ccc;
}
.card h2 {
margin: 0;
margin-bottom: 6px;
font-size: 22px;
}
.card .ipa {
font-size: 14px;
color: #666;
}
.card .example {
margin-top: 80px;
font-size: 14px;
color: #333;
}
.button-wrapper {
max-width: 900px;
margin: 20px auto;
padding: 10px 20px;
display: flex;
gap: 15px;
flex-wrap: wrap;
justify-content: center;
}
.karte {
width: 120px;
height: 180px;
border: 2px solid #333;
border-radius: 10px;
background-color: white;
box-shadow: 2px 2px 8px rgba(0,0,0,0.1);
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
#kartenErstellen {
width: 100%;
height: 100px;
font-size: 46px;
font-weight: 600;
font-family: -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
color: #dc6743;
border: none;
border-radius: 8px;
cursor: pointer;
user-select: none;
transition: transform 0.2s;
box-sizing: border-box;
background: linear-gradient(rgba(255,255,255,0.7), rgba(255,255,255,0.9)), url("flashcards.webp");
background-size: cover;
background-position: center;
}
#druckenBtn {
width: 500px;
height: 100px;
font-size: 46px;
font-weight: 600;
font-family: -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
color: #dc6743;
border: none;
border-radius: 8px;
cursor: pointer;
box-sizing: border-box;
background: linear-gradient(rgba(255,255,255,0.7), rgba(255,255,255,0.9)), url("drucker.jfif");
background-repeat: repeat;
background-size: 80px;
}
.erfolgsmeldung,
.modus-auswahl {
display: none;
max-width: 600px;
margin: 20px auto;
text-align: center;
}
.erfolgsmeldung {
background-color: #e6f4f1;
color: #005b5b;
padding: 12px;
border-radius: 6px;
font-weight: 600;
}
.modus-auswahl p {
margin-bottom: 12px;
font-weight: 500;
}
.modus-btn {
margin: 6px;
padding: 10px 16px;
border: none;
border-radius: 6px;
background-color: #005b5b;
color: white;
cursor: pointer;
}
.modus-btn:hover {
background-color: #007070;
}
@media print {
body * {
visibility: hidden;
}
#kartenContainer, #kartenContainer * {
visibility: visible;
}
#kartenContainer {
position: absolute;
left: 0;
top: 0;
width: 100%;
margin: 0;
padding: 0;
}
}