7 Commits

Author SHA1 Message Date
greggy
bbd1db63a2 refactor(js): remove jQuery dependency and replace with vanilla JS
- Rewrite haus-schleusingen.js entirely in vanilla JavaScript
- Use IntersectionObserver instead of scroll event for scroll animations
- Replace jQuery slideUp/slideDown with display toggle for accordion
- Replace jQuery fadeIn with CSS opacity transition for form success
- Remove jQuery CDN script tag from haus-schleusingen.html
- Delete unused masonry.pkgd.min.js
- Remove jquery globals from eslint.config.js

Ref #19
2026-05-13 23:06:57 +00:00
88780c300a Merge pull request 'Fix #15: Kontaktformular – mailto:-Integration für echte Anfragen' (#20) from feature/issue-15-kontaktformular-backend into main
Reviewed-on: #20
2026-05-14 00:45:55 +02:00
Claw
cc7b2d8d70 fix(kontakt): replace simulated form submit with mailto: link
- Generate mailto: link with all form data on submit
- Opens user's email client with pre-filled email to mki@kies-media.de
- Subject includes interest type, body contains all form fields
- Update success message to reflect email client behavior
- Remove fake setTimeout simulation

Fix #15
2026-05-13 22:39:42 +00:00
ea85280cde Merge pull request 'Fix #11: Kontakt-Section mit Email hinzufügen' (#14) from feature/issue-11 into main
Reviewed-on: #14
2026-05-11 12:50:05 +02:00
958f52fd5d Fix #11: Kontakt-Section mit Email hinzufügen
- Email mki@kies-media.de als direkter Kontaktlink unter dem Formular
- Neues .contact-details CSS passend zum bestehenden Design
- Minimaler Eingriff: bestehendes Design bleibt erhalten
2026-05-11 06:38:28 +00:00
9c68365ab8 Merge pull request 'Fix #4: Impressum-Link im Footer hinzufügen' (#5) from feature/issue-4 into main
Reviewed-on: #5
2026-05-10 23:00:47 +02:00
5b304730fa feat: update Impressum-Link im Footer (Issue #4) 2026-05-10 21:22:14 +02:00
5 changed files with 147 additions and 75 deletions

View File

@@ -928,6 +928,29 @@ nav.scrolled .nav-links a:hover {
color: var(--stone); color: var(--stone);
} }
.contact-details {
text-align: center;
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 1px solid var(--warm);
}
.contact-details p {
font-size: 0.95rem;
color: var(--stone);
}
.contact-details a {
color: var(--accent);
text-decoration: none;
font-weight: 600;
transition: color 0.2s;
}
.contact-details a:hover {
color: var(--accent-light);
}
/* FOOTER */ /* FOOTER */
footer { footer {
background: var(--dark); background: var(--dark);

View File

@@ -13,7 +13,6 @@ module.exports = [
sourceType: "script", sourceType: "script",
globals: { globals: {
...globals.browser, ...globals.browser,
...globals.jquery,
}, },
}, },
plugins: { plugins: {

View File

@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Einfamilienhaus zur Miete - Schleusingen</title> <title>Einfamilienhaus zur Miete - Schleusingen</title>
<link rel="stylesheet" href="fonts/fonts.css" /> <link rel="stylesheet" href="fonts/fonts.css" />
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<link rel="stylesheet" href="css/haus-schleusingen.css" /> <link rel="stylesheet" href="css/haus-schleusingen.css" />
</head> </head>
<body> <body>
@@ -527,16 +526,19 @@
<div class="form-success" id="formSuccess"> <div class="form-success" id="formSuccess">
<p>Vielen Dank für Ihre Anfrage!</p> <p>Vielen Dank für Ihre Anfrage!</p>
<br /> <br />
<small>Wir melden uns schnellstmöglich bei Ihnen.</small> <small>Ihr E-Mail-Programm wurde geöffnet. Bitte senden Sie die E-Mail ab, damit Ihre Anfrage bei uns eingeht.</small>
</div> </div>
</div> </div>
<div class="contact-details">
<p>Oder schreiben Sie uns direkt: <a href="mailto:mki@kies-media.de">mki@kies-media.de</a></p>
</div>
</div> </div>
</section> </section>
<footer> <footer>
<div class="footer-logo">Bahnhofstraße 10 · Schleusingen</div> <div class="footer-logo">Bahnhofstraße 10 · Schleusingen</div>
<div class="footer-links"> <div class="footer-links">
<a href="#">Impressum</a> <a href="/impressum" target="_blank">Impressum</a>
<a href="#">Datenschutz</a> <a href="#">Datenschutz</a>
</div> </div>
</footer> </footer>

View File

@@ -1,84 +1,141 @@
$(function () { document.addEventListener("DOMContentLoaded", function () {
// Navbar scroll // Navbar scroll
$(window).on("scroll", function () { var navbar = document.getElementById("navbar");
if ($(this).scrollTop() > 60) $("#navbar").addClass("scrolled"); window.addEventListener("scroll", function () {
else $("#navbar").removeClass("scrolled"); if (window.scrollY > 60) navbar.classList.add("scrolled");
else navbar.classList.remove("scrolled");
}); });
// Hero animation on load // Hero animation on load
setTimeout(function () { setTimeout(function () {
$("#heroContent").addClass("visible"); document.getElementById("heroContent").classList.add("visible");
$("#heroBg").addClass("loaded"); document.getElementById("heroBg").classList.add("loaded");
}, 200); }, 200);
// Scroll animations // Scroll animations via IntersectionObserver
function checkVisible() { var animElements = document.querySelectorAll(".fact, [data-animate]");
$(".fact, [data-animate]").each(function () { animElements.forEach(function (el) {
var el = $(this); el.style.opacity = "0";
var top = el.offset().top; el.style.transform = "translateY(30px)";
var windowBottom = $(window).scrollTop() + $(window).height(); el.style.transition = "opacity 0.8s ease, transform 0.8s ease";
if (windowBottom > top + 60) { });
el.addClass("visible");
el.css({ opacity: 1, transform: "translateY(0)" }); if ("IntersectionObserver" in window) {
var observer = new IntersectionObserver(
function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting) {
entry.target.classList.add("visible");
entry.target.style.opacity = "1";
entry.target.style.transform = "translateY(0)";
observer.unobserve(entry.target);
} }
}); });
} },
$("[data-animate]").css({ { rootMargin: "0px 0px -60px 0px" }
opacity: 0, );
transform: "translateY(30px)", animElements.forEach(function (el) {
transition: "opacity 0.8s ease, transform 0.8s ease", observer.observe(el);
}); });
$(window).on("scroll", checkVisible); } else {
checkVisible(); // Fallback: show all immediately
animElements.forEach(function (el) {
el.classList.add("visible");
el.style.opacity = "1";
el.style.transform = "translateY(0)";
});
}
// Floor accordion // Floor accordion
$(".floor-header").on("click", function () { document.querySelectorAll(".floor-header").forEach(function (header) {
var item = $(this).closest(".floor-item"); header.addEventListener("click", function () {
var isOpen = item.hasClass("open"); var item = this.closest(".floor-item");
$(".floor-item").removeClass("open"); var isOpen = item.classList.contains("open");
$(".floor-body").slideUp(300); var allItems = document.querySelectorAll(".floor-item");
// Close all
allItems.forEach(function (fi) {
fi.classList.remove("open");
var body = fi.querySelector(".floor-body");
if (body) body.style.display = "none";
});
// Open clicked if it was closed
if (!isOpen) { if (!isOpen) {
item.addClass("open"); item.classList.add("open");
item.find(".floor-body").slideDown(300); var body = item.querySelector(".floor-body");
if (body) body.style.display = "block";
} }
}); });
});
// Lightbox gallery grid items // Lightbox gallery grid items
$(document).on("click", ".grid-item", function () { document.querySelectorAll(".grid-item").forEach(function (item) {
var src = $(this).data("img") || $(this).find("img").attr("src"); item.addEventListener("click", function () {
$("#lightboxImg").attr("src", src); var src = this.dataset.img || this.querySelector("img").getAttribute("src");
$("#lightbox").addClass("open"); openLightbox(src);
$("body").css("overflow", "hidden"); });
}); });
// Lightbox floor plan images in Raumaufteilung // Lightbox floor plan images in Raumaufteilung
$(document).on("click", ".floor-plan img[data-img]", function () { document.querySelectorAll(".floor-plan img[data-img]").forEach(function (img) {
var src = $(this).data("img"); img.addEventListener("click", function () {
$("#lightboxImg").attr("src", src); openLightbox(this.dataset.img);
$("#lightbox").addClass("open");
$("body").css("overflow", "hidden");
}); });
$("#lightboxClose, #lightbox").on("click", function (e) {
if (e.target === this) {
$("#lightbox").removeClass("open");
$("body").css("overflow", "");
}
});
$(document).on("keydown", function (e) {
if (e.key === "Escape") {
$("#lightbox").removeClass("open");
$("body").css("overflow", "");
}
}); });
// Form submit function openLightbox(src) {
$("#contactForm").on("submit", function (e) { document.getElementById("lightboxImg").setAttribute("src", src);
document.getElementById("lightbox").classList.add("open");
document.body.style.overflow = "hidden";
}
function closeLightbox() {
document.getElementById("lightbox").classList.remove("open");
document.body.style.overflow = "";
}
document.getElementById("lightboxClose").addEventListener("click", closeLightbox);
document.getElementById("lightbox").addEventListener("click", function (e) {
if (e.target === this) closeLightbox();
});
document.addEventListener("keydown", function (e) {
if (e.key === "Escape") closeLightbox();
});
// Form submit opens email client with pre-filled mailto: link
document.getElementById("contactForm").addEventListener("submit", function (e) {
e.preventDefault(); e.preventDefault();
var btn = $(this).find(".btn-submit");
btn.text("Wird gesendet...").prop("disabled", true); var fname = document.getElementById("fname").value.trim();
setTimeout(function () { var lname = document.getElementById("lname").value.trim();
$("#contactForm").hide(); var email = document.getElementById("email").value.trim();
$("#formSuccess").fadeIn(400); var phone = document.getElementById("phone").value.trim();
}, 1200); var interest = document.getElementById("interest").value;
var message = document.getElementById("message").value.trim();
var subject = "Kontaktanfrage: " + interest;
var body = "Von: " + fname + " " + lname + "\n";
body += "E-Mail: " + email + "\n";
if (phone) body += "Telefon: " + phone + "\n";
body += "Anliegen: " + interest + "\n\n";
body += message;
var mailto =
"mailto:mki@kies-media.de" +
"?subject=" + encodeURIComponent(subject) +
"&body=" + encodeURIComponent(body);
window.location.href = mailto;
// Show success message
this.style.display = "none";
var success = document.getElementById("formSuccess");
success.style.display = "block";
success.style.opacity = "0";
success.style.transition = "opacity 0.4s ease";
requestAnimationFrame(function () {
success.style.opacity = "1";
});
}); });
}); });

File diff suppressed because one or more lines are too long