Ordnerstruktur aufgesetzt und files nach big merge aufgeräumt, stylings und script im login und signup extrahiert und in seperate files gesetzt, alle verlinkungen überprüft. Namen der Files angepasst für einheitliche benennung.

This commit is contained in:
viiivo 2026-03-27 10:12:58 +01:00
parent f8cba9cfcf
commit 17a6984571
19 changed files with 615 additions and 891 deletions

View File

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

323
css/login_signup.css Normal file
View File

@ -0,0 +1,323 @@
/* Grundlegende Resets */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
display: flex;
flex-direction: column;
min-height: 100vh;
}
/* Header Styles */
.header {
background-color: white;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
padding: 15px 30px;
display: flex;
justify-content: space-between;
align-items: center;
}
.header-logo {
font-size: 24px;
font-weight: bold;
color: #0084ff;
text-decoration: none;
letter-spacing: 1px;
}
.header-buttons {
display: flex;
gap: 15px;
align-items: center;
}
.header-btn {
padding: 10px 20px;
border: none;
border-radius: 4px;
font-size: 14px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
text-decoration: none;
display: inline-block;
}
.header-btn-secondary {
background-color: transparent;
color: #0084ff;
border: 2px solid #0084ff;
}
.header-btn-secondary:hover {
background-color: #0084ff;
color: white;
}
.header-btn-primary {
background-color: #0084ff;
color: white;
}
.header-btn-primary:hover {
background-color: #0073e6;
}
/* Main content wrapper */
.main-content {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
padding: 20px;
}
.container {
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
max-width: 1000px;
width: 100%;
display: flex;
gap: 20px;
overflow: hidden;
}
.image-section {
flex: 1;
background-color: #e8f4f8;
display: flex;
align-items: center;
justify-content: center;
min-height: 500px;
}
.image-section img {
width: 100%;
height: 100%;
object-fit: cover;
}
.form-section {
flex: 1;
padding: 40px;
display: flex;
flex-direction: column;
justify-content: center;
}
/* Formularelemente */
h1 {
color: #333;
margin-bottom: 20px;
text-align: center;
}
.info-box {
background-color: #e8f4f8;
border-left: 4px solid #0084ff;
padding: 15px;
margin-bottom: 30px;
border-radius: 4px;
font-size: 14px;
color: #333;
line-height: 1.5;
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 6px;
color: #333;
font-weight: bold;
font-size: 14px;
}
input[type="text"],
input[type="email"],
input[type="password"] {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.3s ease;
font-family: Arial, sans-serif;
}
input:focus {
outline: none;
border-color: #0084ff;
box-shadow: 0 0 5px rgba(0, 132, 255, 0.3);
}
button {
width: 100%;
padding: 12px;
background-color: #0084ff;
color: white;
border: none;
border-radius: 4px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
}
button:hover {
background-color: #0073e6;
}
button:active {
background-color: #0063cc;
}
/* Hilfstexte & Fehler */
.signup-hint, .login-hint {
text-align: center;
margin-top: 20px;
color: #666;
font-size: 14px;
}
.signup-hint a, .login-hint a {
color: #0084ff;
text-decoration: none;
font-weight: bold;
transition: color 0.3s ease;
}
.signup-hint a:hover, .login-hint a:hover {
text-decoration: underline;
}
.error-message {
color: #d32f2f;
font-size: 13px;
margin-top: 5px;
display: none;
}
.form-group.has-error input {
border-color: #d32f2f;
box-shadow: 0 0 5px rgba(211, 47, 47, 0.3);
}
.form-group.has-error .error-message {
display: block;
}
/* Modal / Popup Styles */
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4);
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.modal.show {
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
background-color: white;
padding: 40px;
border-radius: 8px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
max-width: 500px;
width: 90%;
text-align: center;
animation: slideIn 0.3s ease;
}
@keyframes slideIn {
from { transform: translateY(-50px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.modal-header {
position: relative;
margin-bottom: 20px;
}
.modal-header h2 {
color: #0084ff;
font-size: 24px;
}
.close-btn {
position: absolute;
right: 0;
top: 0;
font-size: 28px;
color: #999;
background: none;
border: none;
cursor: pointer;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
}
.modal-body {
color: #333;
font-size: 16px;
line-height: 1.6;
margin-bottom: 30px;
}
.modal-footer {
display: flex;
gap: 10px;
justify-content: center;
}
/* Responsive Anpassungen */
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.image-section {
min-height: 300px;
}
.header {
flex-direction: column;
gap: 15px;
}
.header-buttons {
width: 100%;
flex-direction: column;
}
.header-btn {
width: 100%;
text-align: center;
}
}

View File

View File

@ -4,8 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Event erstellen | Invité</title>
<link rel="stylesheet" href="stylesheet.css">
<link rel="stylesheet" href="event-create.css" />
<link rel="stylesheet" href="css/event_create.css" />
</head>
<body>
<header class="site-header">
@ -347,6 +346,6 @@
<p>&copy; Social Cooking</p>
</footer>
<script src="event-create.js"></script>
<script src="js/event_create.js"></script>
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Event-Detail</title>
<link rel="stylesheet" href="css/event_overview_stylesheet.css">
<link rel="stylesheet" href="css/event_overview.css">
</head>
<body>
@ -22,7 +22,7 @@
</div>
</main>
<script src="js/event_overview_script.js"></script>
<script src="js/event_overview.js"></script>
<script src="js/event_detail.js"></script>
</body>

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Event-Overview</title>
<link rel="stylesheet" href="css/event_overview_stylesheet.css">
<link rel="stylesheet" href="css/event_overview.css">
</head>
<body>
<header class="navbar">
@ -31,6 +31,6 @@
<section id="event-grid" class="event-list"></section>
</main>
<script src="js/event_overview_script.js"></script>
<script src="js/event_overview.js"></script>
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Social Cooking Wireframe</title>
<link rel="stylesheet" href="stylesheet.css" />
<link rel="stylesheet" href="css/landingpage.css" />
</head>
<body>
<div class="page-wrapper">
@ -61,5 +61,6 @@
</section>
</main>
</div>
<script src="js/landingpage.js"></script>
</body>
</html>

View File

69
js/login.js Normal file
View File

@ -0,0 +1,69 @@
const loginForm = document.getElementById('loginForm');
const emailInput = document.getElementById('email');
const passwortInput = document.getElementById('passwort');
const emailError = document.getElementById('emailError');
const passwortError = document.getElementById('passwortError');
// Validierungsfunktion
function validateForm(event) {
event.preventDefault();
let isValid = true;
// Email-Validierung
const emailValue = emailInput.value.trim();
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const emailGroup = emailInput.parentElement;
if (!emailValue) {
emailGroup.classList.add('has-error');
emailError.textContent = 'Bitte gib deine E-Mail Adresse ein.';
isValid = false;
} else if (!emailRegex.test(emailValue)) {
emailGroup.classList.add('has-error');
emailError.textContent = 'Bitte gib eine gültige E-Mail Adresse ein.';
isValid = false;
} else {
emailGroup.classList.remove('has-error');
}
// Passwort-Validierung
const passwortValue = passwortInput.value;
const passwortGroup = passwortInput.parentElement;
if (!passwortValue) {
passwortGroup.classList.add('has-error');
passwortError.textContent = 'Bitte gib dein Passwort ein.';
isValid = false;
} else if (passwortValue.length < 6) {
passwortGroup.classList.add('has-error');
passwortError.textContent = 'Dein Passwort ist zu kurz. Bitte überprüfe dein Passwort.';
isValid = false;
} else {
passwortGroup.classList.remove('has-error');
}
// Wenn alle Validierungen bestanden, Form absenden
if (isValid) {
alert('Login erfolgreich! (Dies ist eine Demo)');
// Hier würde später die Anmeldung zum Backend gesendet
}
}
// Fehlerbehandlung bei Input-Änderung (entfernt Fehler wenn Benutzer korrigiert)
emailInput.addEventListener('input', function() {
const emailGroup = this.parentElement;
if (this.value.trim()) {
emailGroup.classList.remove('has-error');
}
});
passwortInput.addEventListener('input', function() {
const passwortGroup = this.parentElement;
if (this.value) {
passwortGroup.classList.remove('has-error');
}
});
// Form Submit Event
loginForm.addEventListener('submit', validateForm);

125
js/signup.js Normal file
View File

@ -0,0 +1,125 @@
const signupForm = document.getElementById('signupForm');
const vornameInput = document.getElementById('vorname');
const nachnameInput = document.getElementById('nachname');
const emailInput = document.getElementById('email');
const passwortInput = document.getElementById('passwort');
const welcomeModal = document.getElementById('welcomeModal');
// Funktion zum Öffnen des Welcome Modals
function openWelcomeModal() {
welcomeModal.classList.add('show');
document.body.style.overflow = 'hidden';
}
// Funktion zum Schließen des Welcome Modals
function closeWelcomeModal() {
welcomeModal.classList.remove('show');
document.body.style.overflow = 'auto';
}
// Validierungsfunktion
function validateForm(event) {
event.preventDefault();
let isValid = true;
// Vorname-Validierung
const vornameValue = vornameInput.value.trim();
const vornameGroup = vornameInput.parentElement;
if (!vornameValue) {
vornameGroup.classList.add('has-error');
isValid = false;
} else {
vornameGroup.classList.remove('has-error');
}
// Nachname-Validierung
const nachnameValue = nachnameInput.value.trim();
const nachnameGroup = nachnameInput.parentElement;
if (!nachnameValue) {
nachnameGroup.classList.add('has-error');
isValid = false;
} else {
nachnameGroup.classList.remove('has-error');
}
// Email-Validierung
const emailValue = emailInput.value.trim();
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const emailGroup = emailInput.parentElement;
if (!emailValue) {
emailGroup.classList.add('has-error');
document.getElementById('emailError').textContent = 'Bitte gib deine E-Mail Adresse ein.';
isValid = false;
} else if (!emailRegex.test(emailValue)) {
emailGroup.classList.add('has-error');
document.getElementById('emailError').textContent = 'Bitte gib eine gültige E-Mail Adresse ein.';
isValid = false;
} else {
emailGroup.classList.remove('has-error');
}
// Passwort-Validierung
const passwortValue = passwortInput.value;
const passwortGroup = passwortInput.parentElement;
if (!passwortValue) {
passwortGroup.classList.add('has-error');
document.getElementById('passwortError').textContent = 'Bitte gib ein Passwort ein.';
isValid = false;
} else if (passwortValue.length < 8) {
passwortGroup.classList.add('has-error');
document.getElementById('passwortError').textContent = 'Dein Passwort muss mindestens 8 Zeichen lang sein.';
isValid = false;
} else {
passwortGroup.classList.remove('has-error');
}
// Wenn alle Validierungen bestanden, Modal anzeigen
if (isValid) {
openWelcomeModal();
// Hier würde später die Registrierung zum Backend gesendet
}
}
// Fehlerbehandlung bei Input-Änderung (entfernt Fehler wenn Benutzer korrigiert)
vornameInput.addEventListener('input', function() {
const vornameGroup = this.parentElement;
if (this.value.trim()) {
vornameGroup.classList.remove('has-error');
}
});
nachnameInput.addEventListener('input', function() {
const nachnameGroup = this.parentElement;
if (this.value.trim()) {
nachnameGroup.classList.remove('has-error');
}
});
emailInput.addEventListener('input', function() {
const emailGroup = this.parentElement;
if (this.value.trim()) {
emailGroup.classList.remove('has-error');
}
});
passwortInput.addEventListener('input', function() {
const passwortGroup = this.parentElement;
if (this.value) {
passwortGroup.classList.remove('has-error');
}
});
// Modal schließen wenn außerhalb geklickt wird
welcomeModal.addEventListener('click', function(event) {
if (event.target === welcomeModal) {
closeWelcomeModal();
}
});
// Form Submit Event
signupForm.addEventListener('submit', validateForm);

View File

@ -1,573 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kontaktseite - Invité</title>
<link rel="stylesheet" href="stylesheet.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
display: flex;
flex-direction: column;
min-height: 100vh;
padding: 0;
margin: 0;
}
/* Header Styles */
.header {
background-color: white;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
padding: 15px 30px;
display: flex;
justify-content: space-between;
align-items: center;
}
.header-logo {
font-size: 24px;
font-weight: bold;
color: #0084ff;
text-decoration: none;
letter-spacing: 1px;
}
.header-buttons {
display: flex;
gap: 15px;
align-items: center;
}
.header-btn {
padding: 10px 20px;
border: none;
border-radius: 4px;
font-size: 14px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
text-decoration: none;
display: inline-block;
}
.header-btn-secondary {
background-color: transparent;
color: #0084ff;
border: 2px solid #0084ff;
}
.header-btn-secondary:hover {
background-color: #0084ff;
color: white;
}
.header-btn-primary {
background-color: #0084ff;
color: white;
}
.header-btn-primary:hover {
background-color: #0073e6;
}
/* Main content wrapper */
.main-content {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
padding: 20px;
}
.container {
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
max-width: 1000px;
width: 100%;
display: flex;
gap: 20px;
overflow: hidden;
}
.image-section {
flex: 1;
background-color: #e8f4f8;
display: flex;
align-items: center;
justify-content: center;
min-height: 500px;
}
.image-section img {
width: 100%;
height: 100%;
object-fit: cover;
}
.form-section {
flex: 1;
padding: 40px;
display: flex;
flex-direction: column;
justify-content: center;
}
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.image-section {
min-height: 300px;
}
.header {
flex-direction: column;
gap: 15px;
}
.header-buttons {
width: 100%;
flex-direction: column;
}
.header-btn {
width: 100%;
text-align: center;
}
}
h1 {
color: #333;
margin-bottom: 10px;
text-align: center;
}
.info-box {
background-color: #e8f4f8;
border-left: 4px solid #0084ff;
padding: 15px;
margin-bottom: 30px;
border-radius: 4px;
font-size: 14px;
color: #333;
line-height: 1.5;
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 6px;
color: #333;
font-weight: bold;
font-size: 14px;
}
input[type="text"],
input[type="email"],
input[type="password"] {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.3s ease;
font-family: Arial, sans-serif;
}
input[type="text"]:focus,
input[type="email"]:focus,
input[type="password"]:focus {
outline: none;
border-color: #0084ff;
box-shadow: 0 0 5px rgba(0, 132, 255, 0.3);
}
button {
width: 100%;
padding: 12px;
background-color: #0084ff;
color: white;
border: none;
border-radius: 4px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #0073e6;
}
button:active {
background-color: #0063cc;
}
.login-hint {
text-align: center;
margin-top: 20px;
color: #666;
font-size: 14px;
}
.login-hint a {
color: #0084ff;
text-decoration: none;
font-weight: bold;
transition: color 0.3s ease;
}
.login-hint a:hover {
color: #0073e6;
text-decoration: underline;
}
.error-message {
color: #d32f2f;
font-size: 13px;
margin-top: 5px;
display: none;
}
.form-group.has-error input {
border-color: #d32f2f;
box-shadow: 0 0 5px rgba(211, 47, 47, 0.3);
}
.form-group.has-error .error-message {
display: block;
}
/* Modal Styles */
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4);
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.modal.show {
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
background-color: white;
padding: 40px;
border-radius: 8px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
max-width: 500px;
width: 90%;
text-align: center;
animation: slideIn 0.3s ease;
}
@keyframes slideIn {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
.modal-header {
position: relative;
margin-bottom: 20px;
}
.modal-header h2 {
color: #0084ff;
font-size: 24px;
margin-bottom: 10px;
}
.close-btn {
position: absolute;
right: 0;
top: 0;
font-size: 28px;
font-weight: bold;
color: #999;
background: none;
border: none;
cursor: pointer;
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
transition: color 0.3s ease;
}
.close-btn:hover {
color: #333;
}
.modal-body {
color: #333;
font-size: 16px;
line-height: 1.6;
margin-bottom: 30px;
}
.modal-footer {
display: flex;
gap: 10px;
justify-content: center;
}
.modal-footer button {
padding: 10px 30px;
font-size: 14px;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.modal-footer .btn-primary {
background-color: #0084ff;
color: white;
}
.modal-footer .btn-primary:hover {
background-color: #0073e6;
}
</style>
</head>
<body>
<!-- Header -->
<header class="header">
<div class="header-logo">Invité</div>
<div class="header-buttons">
<button class="header-btn header-btn-secondary">Event finden</button>
<a href="login.html" class="header-btn header-btn-primary">Login</a>
</div>
</header>
<!-- Main Content -->
<div class="main-content">
<div class="container">
<div class="image-section">
<img src="cooking.jpg" alt="Social Cooking">
</div>
<div class="form-section">
<h1>Erstelle deinen Account</h1>
<div class="info-box">
<strong>Hinweis:</strong> Sichtbar auf der Plattform ist nur der Vorname, erst einer Anmeldung zum Event ist der Nachname für die Teilnehmenden sichtbar.
</div>
<form id="signupForm">
<div class="form-group">
<label for="vorname">Vorname *</label>
<input type="text" id="vorname" name="vorname" required placeholder="Dein Vorname">
<div class="error-message" id="vornameError">Bitte gib deinen Vornamen ein.</div>
</div>
<div class="form-group">
<label for="nachname">Nachname *</label>
<input type="text" id="nachname" name="nachname" required placeholder="Dein Nachname">
<div class="error-message" id="nachnameError">Bitte gib deinen Nachnamen ein.</div>
</div>
<div class="form-group">
<label for="email">E-Mail Adresse *</label>
<input type="email" id="email" name="email" required placeholder="deine.email@example.com">
<div class="error-message" id="emailError">Bitte gib eine gültige E-Mail Adresse ein.</div>
</div>
<div class="form-group">
<label for="passwort">Passwort *</label>
<input type="password" id="passwort" name="passwort" required placeholder="Mindestens 8 Zeichen">
<div class="error-message" id="passwortError">Dein Passwort muss mindestens 8 Zeichen lang sein.</div>
</div>
<button type="submit">Konto erstellen</button>
<div class="login-hint">
Du hast bereits einen Account? <a href="login.html">Hier geht's zum Log-in</a>
</div>
</form>
</div>
</div>
</div> <!-- Schließt main-content -->
<!-- Welcome Modal -->
<div id="welcomeModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<button class="close-btn" onclick="closeWelcomeModal()">&times;</button>
<h2>🎉 Willkommen bei Invité!</h2>
</div>
<div class="modal-body">
Hier findest du die Übersicht zu den aktuellsten Events.
</div>
<div class="modal-footer">
<button class="btn-primary" onclick="closeWelcomeModal()">Weiter zu den Events</button>
</div>
</div>
</div>
<script>
const signupForm = document.getElementById('signupForm');
const vornameInput = document.getElementById('vorname');
const nachnameInput = document.getElementById('nachname');
const emailInput = document.getElementById('email');
const passwortInput = document.getElementById('passwort');
const welcomeModal = document.getElementById('welcomeModal');
// Funktion zum Öffnen des Welcome Modals
function openWelcomeModal() {
welcomeModal.classList.add('show');
document.body.style.overflow = 'hidden';
}
// Funktion zum Schließen des Welcome Modals
function closeWelcomeModal() {
welcomeModal.classList.remove('show');
document.body.style.overflow = 'auto';
}
// Validierungsfunktion
function validateForm(event) {
event.preventDefault();
let isValid = true;
// Vorname-Validierung
const vornameValue = vornameInput.value.trim();
const vornameGroup = vornameInput.parentElement;
if (!vornameValue) {
vornameGroup.classList.add('has-error');
isValid = false;
} else {
vornameGroup.classList.remove('has-error');
}
// Nachname-Validierung
const nachnameValue = nachnameInput.value.trim();
const nachnameGroup = nachnameInput.parentElement;
if (!nachnameValue) {
nachnameGroup.classList.add('has-error');
isValid = false;
} else {
nachnameGroup.classList.remove('has-error');
}
// Email-Validierung
const emailValue = emailInput.value.trim();
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const emailGroup = emailInput.parentElement;
if (!emailValue) {
emailGroup.classList.add('has-error');
document.getElementById('emailError').textContent = 'Bitte gib deine E-Mail Adresse ein.';
isValid = false;
} else if (!emailRegex.test(emailValue)) {
emailGroup.classList.add('has-error');
document.getElementById('emailError').textContent = 'Bitte gib eine gültige E-Mail Adresse ein.';
isValid = false;
} else {
emailGroup.classList.remove('has-error');
}
// Passwort-Validierung
const passwortValue = passwortInput.value;
const passwortGroup = passwortInput.parentElement;
if (!passwortValue) {
passwortGroup.classList.add('has-error');
document.getElementById('passwortError').textContent = 'Bitte gib ein Passwort ein.';
isValid = false;
} else if (passwortValue.length < 8) {
passwortGroup.classList.add('has-error');
document.getElementById('passwortError').textContent = 'Dein Passwort muss mindestens 8 Zeichen lang sein.';
isValid = false;
} else {
passwortGroup.classList.remove('has-error');
}
// Wenn alle Validierungen bestanden, Modal anzeigen
if (isValid) {
openWelcomeModal();
// Hier würde später die Registrierung zum Backend gesendet
}
}
// Fehlerbehandlung bei Input-Änderung (entfernt Fehler wenn Benutzer korrigiert)
vornameInput.addEventListener('input', function() {
const vornameGroup = this.parentElement;
if (this.value.trim()) {
vornameGroup.classList.remove('has-error');
}
});
nachnameInput.addEventListener('input', function() {
const nachnameGroup = this.parentElement;
if (this.value.trim()) {
nachnameGroup.classList.remove('has-error');
}
});
emailInput.addEventListener('input', function() {
const emailGroup = this.parentElement;
if (this.value.trim()) {
emailGroup.classList.remove('has-error');
}
});
passwortInput.addEventListener('input', function() {
const passwortGroup = this.parentElement;
if (this.value) {
passwortGroup.classList.remove('has-error');
}
});
// Modal schließen wenn außerhalb geklickt wird
welcomeModal.addEventListener('click', function(event) {
if (event.target === welcomeModal) {
closeWelcomeModal();
}
});
// Form Submit Event
signupForm.addEventListener('submit', validateForm);
</script>
</body>
</html>

View File

@ -4,241 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login - Social Cooking</title>
<link rel="stylesheet" href="stylesheet.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
display: flex;
flex-direction: column;
min-height: 100vh;
padding: 0;
margin: 0;
}
/* Header Styles */
.header {
background-color: white;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
padding: 15px 30px;
display: flex;
justify-content: space-between;
align-items: center;
}
.header-logo {
font-size: 24px;
font-weight: bold;
color: #0084ff;
text-decoration: none;
letter-spacing: 1px;
}
.header-buttons {
display: flex;
gap: 15px;
align-items: center;
}
.header-btn {
padding: 10px 20px;
border: none;
border-radius: 4px;
font-size: 14px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
text-decoration: none;
display: inline-block;
}
.header-btn-secondary {
background-color: transparent;
color: #0084ff;
border: 2px solid #0084ff;
}
.header-btn-secondary:hover {
background-color: #0084ff;
color: white;
}
.header-btn-primary {
background-color: #0084ff;
color: white;
}
.header-btn-primary:hover {
background-color: #0073e6;
}
/* Main content wrapper */
.main-content {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
padding: 20px;
}
.container {
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
max-width: 1000px;
width: 100%;
display: flex;
gap: 20px;
overflow: hidden;
}
.image-section {
flex: 1;
background-color: #e8f4f8;
display: flex;
align-items: center;
justify-content: center;
min-height: 500px;
}
.image-section img {
width: 100%;
height: 100%;
object-fit: cover;
}
.form-section {
flex: 1;
padding: 40px;
display: flex;
flex-direction: column;
justify-content: center;
}
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.image-section {
min-height: 300px;
}
.header {
flex-direction: column;
gap: 15px;
}
.header-buttons {
width: 100%;
flex-direction: column;
}
.header-btn {
width: 100%;
text-align: center;
}
}
h1 {
color: #333;
margin-bottom: 30px;
text-align: center;
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 6px;
color: #333;
font-weight: bold;
font-size: 14px;
}
input[type="email"],
input[type="password"] {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.3s ease;
font-family: Arial, sans-serif;
}
input[type="email"]:focus,
input[type="password"]:focus {
outline: none;
border-color: #0084ff;
box-shadow: 0 0 5px rgba(0, 132, 255, 0.3);
}
button {
width: 100%;
padding: 12px;
background-color: #0084ff;
color: white;
border: none;
border-radius: 4px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
}
button:hover {
background-color: #0073e6;
}
button:active {
background-color: #0063cc;
}
.signup-hint {
text-align: center;
margin-top: 20px;
color: #666;
font-size: 14px;
}
.signup-hint a {
color: #0084ff;
text-decoration: none;
font-weight: bold;
transition: color 0.3s ease;
}
.signup-hint a:hover {
color: #0073e6;
text-decoration: underline;
}
.error-message {
color: #d32f2f;
font-size: 13px;
margin-top: 5px;
display: none;
}
.form-group.has-error input {
border-color: #d32f2f;
box-shadow: 0 0 5px rgba(211, 47, 47, 0.3);
}
.form-group.has-error .error-message {
display: block;
}
</style>
<link rel="stylesheet" href="css/login_signup.css">
</head>
<body>
<!-- Header -->
@ -246,7 +12,7 @@
<div class="header-logo">Invité</div>
<div class="header-buttons">
<button class="header-btn header-btn-secondary">Event finden</button>
<a href="kontakt.html" class="header-btn header-btn-primary">Anmeldung</a>
<a href="signup.html" class="header-btn header-btn-primary">Anmeldung</a>
</div>
</header>
@ -254,7 +20,7 @@
<div class="main-content">
<div class="container">
<div class="image-section">
<img src="cooking.jpg" alt="Social Cooking">
<img src="assets/cooking.jpg" alt="Social Cooking">
</div>
<div class="form-section">
@ -276,83 +42,12 @@
<button type="submit">Login</button>
<div class="signup-hint">
Du hast noch keinen Account? <a href="kontakt.html">Hier geht es zur Anmeldung</a>
Du hast noch keinen Account? <a href="signup.html">Hier geht es zur Anmeldung</a>
</div>
</form>
</div>
</div>
</div> <!-- Schließt main-content -->
<script>
const loginForm = document.getElementById('loginForm');
const emailInput = document.getElementById('email');
const passwortInput = document.getElementById('passwort');
const emailError = document.getElementById('emailError');
const passwortError = document.getElementById('passwortError');
// Validierungsfunktion
function validateForm(event) {
event.preventDefault();
let isValid = true;
// Email-Validierung
const emailValue = emailInput.value.trim();
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const emailGroup = emailInput.parentElement;
if (!emailValue) {
emailGroup.classList.add('has-error');
emailError.textContent = 'Bitte gib deine E-Mail Adresse ein.';
isValid = false;
} else if (!emailRegex.test(emailValue)) {
emailGroup.classList.add('has-error');
emailError.textContent = 'Bitte gib eine gültige E-Mail Adresse ein.';
isValid = false;
} else {
emailGroup.classList.remove('has-error');
}
// Passwort-Validierung
const passwortValue = passwortInput.value;
const passwortGroup = passwortInput.parentElement;
if (!passwortValue) {
passwortGroup.classList.add('has-error');
passwortError.textContent = 'Bitte gib dein Passwort ein.';
isValid = false;
} else if (passwortValue.length < 6) {
passwortGroup.classList.add('has-error');
passwortError.textContent = 'Dein Passwort ist zu kurz. Bitte überprüfe dein Passwort.';
isValid = false;
} else {
passwortGroup.classList.remove('has-error');
}
// Wenn alle Validierungen bestanden, Form absenden (hier kannst du später Backend Integration vornehmen)
if (isValid) {
alert('Login erfolgreich! (Dies ist eine Demo)');
// Hier würde später die Anmeldung zum Backend gesendet
}
}
// Fehlerbehandlung bei Input-Änderung (entfernt Fehler wenn Benutzer korrigiert)
emailInput.addEventListener('input', function() {
const emailGroup = this.parentElement;
if (this.value.trim()) {
emailGroup.classList.remove('has-error');
}
});
passwortInput.addEventListener('input', function() {
const passwortGroup = this.parentElement;
if (this.value) {
passwortGroup.classList.remove('has-error');
}
});
// Form Submit Event
loginForm.addEventListener('submit', validateForm);
</script>
<script src="js/login.js"></script>
</body>
</html>

85
signup.html Normal file
View File

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kontaktseite - Invité</title>
<link rel="stylesheet" href="css/login_signup.css">
</head>
<body>
<!-- Header -->
<header class="header">
<div class="header-logo">Invité</div>
<div class="header-buttons">
<button class="header-btn header-btn-secondary">Event finden</button>
<a href="login.html" class="header-btn header-btn-primary">Login</a>
</div>
</header>
<!-- Main Content -->
<div class="main-content">
<div class="container">
<div class="image-section">
<img src="assets/cooking.jpg" alt="Social Cooking">
</div>
<div class="form-section">
<h1>Erstelle deinen Account</h1>
<div class="info-box">
<strong>Hinweis:</strong> Sichtbar auf der Plattform ist nur der Vorname, erst einer Anmeldung zum Event ist der Nachname für die Teilnehmenden sichtbar.
</div>
<form id="signupForm">
<div class="form-group">
<label for="vorname">Vorname *</label>
<input type="text" id="vorname" name="vorname" required placeholder="Dein Vorname">
<div class="error-message" id="vornameError">Bitte gib deinen Vornamen ein.</div>
</div>
<div class="form-group">
<label for="nachname">Nachname *</label>
<input type="text" id="nachname" name="nachname" required placeholder="Dein Nachname">
<div class="error-message" id="nachnameError">Bitte gib deinen Nachnamen ein.</div>
</div>
<div class="form-group">
<label for="email">E-Mail Adresse *</label>
<input type="email" id="email" name="email" required placeholder="deine.email@example.com">
<div class="error-message" id="emailError">Bitte gib eine gültige E-Mail Adresse ein.</div>
</div>
<div class="form-group">
<label for="passwort">Passwort *</label>
<input type="password" id="passwort" name="passwort" required placeholder="Mindestens 8 Zeichen">
<div class="error-message" id="passwortError">Dein Passwort muss mindestens 8 Zeichen lang sein.</div>
</div>
<button type="submit">Konto erstellen</button>
<div class="login-hint">
Du hast bereits einen Account? <a href="login.html">Hier geht's zum Log-in</a>
</div>
</form>
</div>
</div>
</div> <!-- Schließt main-content -->
<!-- Welcome Modal -->
<div id="welcomeModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<button class="close-btn" onclick="closeWelcomeModal()">&times;</button>
<h2>🎉 Willkommen bei Invité!</h2>
</div>
<div class="modal-body">
Hier findest du die Übersicht zu den aktuellsten Events.
</div>
<div class="modal-footer">
<button class="btn-primary" onclick="closeWelcomeModal()">Weiter zu den Events</button>
</div>
</div>
</div>
<script src="js/signup.js"></script>
</body>
</html>