-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathform.js
135 lines (118 loc) · 4.43 KB
/
form.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*-----------------------SUBMIT-NEW-CARD-IMPLEMENTATION----------------------*/
const form = document.querySelector('[data-js="add-question-form"]');
const fieldset = document.querySelector('[data-js="fieldset"]');
form.addEventListener("submit", function (event) {
event.preventDefault(); // Verhindere das Standard-Submit-Verhalten
// Lese die eingegebenen Daten aus den Formularfeldern
const question = document.querySelector('[data-js="question"]').value.trim();
const answer = document.querySelector('[data-js="answer"]').value.trim();
const tags = document.querySelector('[data-js="tags"]').value.trim();
if (question && answer) {
// Erstelle den HTML-String für die Karte
let tagsHTML = "";
if (tags) {
tagsHTML = tags
.split(",")
.map((tag) => `<span class="tag">${tag.trim()}</span>`)
.join("");
}
const cardHTML = `
<article class="question-card">
<button
class="bookmark-button"
data-js="bookmark-button"
aria-label="Zu Lesezeichen hinzufügen"
title="Zu Lesezeichen hinzufügen"
>
<i class="fa-regular fa-bookmark fa-2xl"></i>
</button>
<h2 class="question-text">${question}</h2>
<button
class="show-answer"
data-js="answer-button"
aria-label="Antwort"
title="Zeige die Antwort"
>
Antwort
</button>
<div class="answer" data-js="answer">
<p class="answer-text">${answer}</p>
</div>
<div class="tags" aria-label="Schlagwort">
${tagsHTML}
</div>
</article>
`;
// Füge die neue Karte direkt unter dem Fieldset ein
fieldset.insertAdjacentHTML("afterend", cardHTML);
// Füge Event-Listener für den Toggle-Button hinzu
const cardContainer = fieldset.nextElementSibling;
const toggleButton = cardContainer.querySelector(
'[data-js="answer-button"]'
);
const answerDiv = cardContainer.querySelector('[data-js="answer"]');
toggleButton.addEventListener("click", function () {
answerDiv.classList.toggle("visible");
toggleButton.textContent = answerDiv.classList.contains("visible")
? "Antwort verstecken"
: "Antwort";
toggleButton.setAttribute(
"title",
answerDiv.classList.contains("visible")
? "Verstecke die Antwort"
: "Zeige die Antwort"
);
});
// Füge Event-Listener für den Bookmark-Button hinzu
const bookmarkButton = cardContainer.querySelector(
'[data-js="bookmark-button"]'
);
bookmarkButton.addEventListener("click", function () {
const icon = this.querySelector("i");
// Icon-Klasse umschalten zwischen "fa-regular" und "fa-solid"
if (icon.classList.contains("fa-regular")) {
icon.classList.remove("fa-regular");
icon.classList.add("fa-solid");
icon.style.color = "#74c0fc"; // Farbe ändern, falls gewünscht
this.setAttribute("aria-label", "Von Lesezeichen entfernen");
this.setAttribute("title", "Von Lesezeichen entfernen");
} else {
icon.classList.remove("fa-solid");
icon.classList.add("fa-regular");
icon.style.color = ""; // Farbe zurücksetzen
this.setAttribute("aria-label", "Zu Lesezeichen hinzufügen");
this.setAttribute("title", "Zu Lesezeichen hinzufügen");
}
});
// Setze das Formular zurück
form.reset();
}
});
/*-----------------------COUNT-CHARTACTERS-IMPLEMENTATION---------------------*/
const setupCharacterCount = (formSelector, textareaIds, maxLength) => {
const form = document.querySelector(formSelector);
const updateCount = (textarea, countElement) =>
(countElement.textContent = `${
maxLength - textarea.value.length
} Zeichen übrig`);
const resetFunctions = textareaIds.map((id) => {
const textarea = document.getElementById(id);
const countElement = document.querySelector(
`.char-count[data-for="${id}"]`
);
textarea.addEventListener("input", () =>
updateCount(textarea, countElement)
);
updateCount(textarea, countElement);
return () => {
textarea.value = "";
updateCount(textarea, countElement);
};
});
form.addEventListener("submit", (e) => {
e.preventDefault();
console.log("Formular wurde abgesendet");
resetFunctions.forEach((reset) => reset());
});
};
setupCharacterCount("form", ["question", "answer"], 150);