📖 Visual storytelling

Vandaag rij je door…
Selecteer een trip om het verhaal te laden.
🗓️ Trip-highlights

🏕️ Campings + omgeving (bij aankomst)

✉️ Stuur dit reisverhaal naar jezelf

🚐 Klaar om deze reis te maken?

Bekijk welke Hellow Happy Camper beschikbaar is voor jouw reis.

🔎 Zoek beschikbare camper

🚐 Mijn camperreis

Route

    ${routeRows}

${storyTitle || 'Reisverhaal'}

${storyText || ''}

🏕️ Campings + omgeving

${campings || '

Geen campings geselecteerd.

'}

Gemaakt met Hellow Happy Camper Route Storytelling.

`; const blob = new Blob([html], { type: 'text/html;charset=utf-8' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'hellow-happy-camper-reisplan.html'; document.body.appendChild(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000); setStatus('✅ Reisplan gedownload', 'green'); } catch (e) { console.error('HHC download fout:', e); setStatus('❌ Downloaden mislukt', 'red'); } }); let mailBusy = false; root.querySelector('[data-action="mail"]').addEventListener('click', function () { if (mailBusy) return; const email = (emailInput.value || '').trim(); if (!email) { setStatus('❌ Vul een e-mailadres in', 'red'); return; } mailBusy = true; setStatus('⏳ Mail versturen...', MAIN); post('hhc_rs_mail', { email: email, route: JSON.stringify(DATA), context: JSON.stringify(CONTEXT) }) .then(res => { if (res.success) setStatus('✅ Mail verzonden', 'green'); else { const msg = res.data && res.data.msg; setStatus(msg === 'already_sent' ? '⚠️ Net al verzonden (probeer later opnieuw)' : '❌ Mailen mislukt', 'red'); } }) .catch(() => setStatus('❌ Netwerkfout', 'red')) .finally(() => { mailBusy = false; }); }); // Start buildTripButtons(); const firstValidIndex = DATA.findIndex((p, i) => i < DATA.length - 1 && isValidPoint(p) && isValidPoint(DATA[i + 1])); if (firstValidIndex >= 0) { initMap(); showTrip(firstValidIndex); } else console.warn('HHC Storytelling: geen geldige lat/lon-combinaties bij init'); }); // Losse shortcode instances buiten storytelling document.addEventListener('DOMContentLoaded', function(){ document.querySelectorAll('.hhc-campchoice').forEach(initCampingChoice); }); })();
'+routeClone.outerHTML+storyClone.outerHTML+'
'; const blob=new Blob([html],{type:'text/html;charset=utf-8'}),url=URL.createObjectURL(blob),a=document.createElement('a'); a.href=url;a.download='HHC-camperreis-'+String(country).toLowerCase().replace(/[^a-z0-9]+/g,'-')+'.html';document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),2000); }catch(e){console.error('HHC volledige download fout',e);alert('Download maken is mislukt. Probeer het opnieuw.');} finally{btn.disabled=false;btn.textContent=oldText;} } document.addEventListener('click',downloadGuide,true); document.addEventListener('DOMContentLoaded',()=>{render66();setTimeout(render66,1000);}); window.addEventListener('hhc:routeDataReady',()=>setTimeout(render66,100)); let sig=''; setInterval(()=>{const d=route();const s=JSON.stringify(d.map(x=>[x.name,x.lat,x.lon]));if(s!==sig){sig=s;render66();} addPoiSelectors();},1200); })();