/* ====================================================================== Estella Zorg & Coaching — site engine (do not edit) Reads everything from content.txt and fills the page in. To change text, photos or contact details, edit content.txt instead — see owners-guide.html. ====================================================================== */ (function (global) { var C = (typeof CONTENT !== 'undefined') ? CONTENT : { nl: {}, en: {} }; function getLang() { try { var saved = window.localStorage.getItem('estella_lang'); if (saved === 'nl' || saved === 'en') return saved; } catch (e) {} return 'nl'; } function setLang(lang) { try { window.localStorage.setItem('estella_lang', lang); } catch (e) {} } function formatPhone(digits) { if (!digits) return null; if (digits.length === 10) { return { display: digits.slice(0, 2) + '-' + digits.slice(2), intl: '31' + digits.slice(1) }; } return { display: digits, intl: digits.replace(/\D/g, '') }; } function applyFields(scopeData, attr, mode) { document.querySelectorAll('[' + attr + ']').forEach(function (el) { var key = el.getAttribute(attr); if (scopeData[key] === undefined) return; if (mode === 'html') el.innerHTML = scopeData[key]; else el.textContent = scopeData[key]; }); } function render(pageKey) { var lang = getLang(); var langData = C[lang] || C.nl || {}; var site = langData.site || {}; var page = langData[pageKey] || {}; document.documentElement.setAttribute('lang', lang); if (page.page_title) document.title = page.page_title; // site-wide fields (nav, footer, contact) applyFields(site, 'data-site', 'text'); applyFields(site, 'data-site-html', 'html'); // page-specific fields applyFields(page, 'data-key', 'text'); applyFields(page, 'data-key-html', 'html'); document.querySelectorAll('[data-key-href]').forEach(function (el) { var key = el.getAttribute('data-key-href'); if (page[key] !== undefined) el.setAttribute('href', page[key]); }); document.querySelectorAll('[data-key-placeholder]').forEach(function (el) { var key = el.getAttribute('data-key-placeholder'); if (page[key] !== undefined) el.setAttribute('placeholder', page[key]); }); // nav active state document.querySelectorAll('nav.main-nav a[data-page]').forEach(function (a) { a.classList.toggle('active', a.getAttribute('data-page') === pageKey); }); // language switch buttons document.querySelectorAll('.lang-switch button[data-lang]').forEach(function (btn) { btn.classList.toggle('active', btn.getAttribute('data-lang') === lang); }); // contact chips: email document.querySelectorAll('[data-email-link]').forEach(function (el) { if (site.email) el.setAttribute('href', 'mailto:' + site.email); }); document.querySelectorAll('[data-email-text]').forEach(function (el) { el.textContent = site.email || ''; }); // contact chips: phone (honest placeholder when unknown) var phone = formatPhone((site.phone_number || '').replace(/\D/g, '')); document.querySelectorAll('[data-phone-chip]').forEach(function (el) { if (phone) { el.setAttribute('href', 'tel:+' + phone.intl); el.classList.remove('muted'); var textEl = el.querySelector('[data-phone-text]'); if (textEl) textEl.textContent = phone.display; } else { el.removeAttribute('href'); el.classList.add('muted'); var textEl2 = el.querySelector('[data-phone-text]'); if (textEl2) textEl2.textContent = site.phone_placeholder || ''; } }); document.querySelectorAll('[data-whatsapp-link]').forEach(function (el) { if (phone) { el.style.display = ''; el.setAttribute('href', 'https://wa.me/' + phone.intl); } else { el.style.display = 'none'; } }); // socials document.querySelectorAll('[data-insta-link]').forEach(function (el) { if (site.instagram_url) el.setAttribute('href', site.instagram_url); }); document.querySelectorAll('[data-insta-text]').forEach(function (el) { el.textContent = '@' + (site.instagram_username || ''); }); document.querySelectorAll('[data-tiktok-link]').forEach(function (el) { if (site.tiktok_url) el.setAttribute('href', site.tiktok_url); }); } function initNavToggle() { var toggle = document.querySelector('.nav-toggle'); var nav = document.querySelector('nav.main-nav'); if (!toggle || !nav) return; toggle.addEventListener('click', function () { nav.classList.toggle('open'); }); } function initLangSwitch(pageKey) { document.querySelectorAll('.lang-switch button[data-lang]').forEach(function (btn) { btn.addEventListener('click', function () { setLang(btn.getAttribute('data-lang')); render(pageKey); }); }); } function initWaitlistForm() { var form = document.querySelector('form[data-waitlist-form]'); if (!form) return; form.addEventListener('submit', function (e) { // Netlify handles the actual submission natively (data-netlify + normal // POST navigation is disabled here so we can show an inline message). if (window.location.hostname === 'localhost' || window.location.protocol === 'file:') { e.preventDefault(); } else { return; // let Netlify's own success page handle it in production } var success = document.querySelector('[data-form-success]'); if (success) success.classList.add('show'); form.reset(); }); } global.EstellaSite = { init: function (pageKey) { render(pageKey); initNavToggle(); initLangSwitch(pageKey); initWaitlistForm(); } }; })(window);