WASHER REPL BY 30303-080112

    WASHER REPL BY 30303-080112

    12 SEK
    Läs mer...

    Leverans: Beställningsvara, leveranstid: ca 1-2 veckor.

    • Leveranstid 1-2 dagar på lagervaror
    • Faktura 30 dagar till privatpersoner och företag
    • Kortbetalning, Visa & Mastercard
    • Direktbank
    • Delbetalning
    • Swish och Apple Pay

    Beskrivning

    Art.nr: CF-30303-080142

    PRODUKTEN ÄR ERSATT AV ANNAN, WASHER REPL BY 30303-080112
    Tillbaka till toppen
    /* BOKNINGSKALENDER – läser bokade datum från en offentlig Abicart-sida. Källa: https://www.eijes.com/bokade-datum På källsidan ska det finnas ett element med id="bokade-datum" och ett datum per rad i formatet ÅÅÅÅ-MM-DD. Lägg skriptet på eijes.com, helst före eller som footer-skript. */ (function () { 'use strict'; const BOOKING_PAGE_URL = 'https://www.eijes.com/bokade-datum'; const init = () => { const root = document.getElementById('slapkalender'); if (!root || root.dataset.calendarInitialized === 'true') return; root.dataset.calendarInitialized = 'true'; const days = root.querySelector('#days'); const monthLabel = root.querySelector('#month'); const status = root.querySelector('#status'); const previous = root.querySelector('#prev'); const next = root.querySelector('#next'); if (!days || !monthLabel || !status || !previous || !next) return; const now = new Date(); let viewYear = now.getFullYear(); let viewMonth = now.getMonth(); let booked = new Set(); let loaded = false; const pad = n => String(n).padStart(2, '0'); const key = (y, m, d) => `${y}-${pad(m + 1)}-${pad(d)}`; const todayKey = key(now.getFullYear(), now.getMonth(), now.getDate()); const validDate = s => { if (!/^\d{4}-\d{2}-\d{2}$/.test(s)) return false; const [y,m,d] = s.split('-').map(Number); const date = new Date(y,m-1,d,12); return date.getFullYear()===y && date.getMonth()===m-1 && date.getDate()===d; }; function render() { monthLabel.textContent = new Intl.DateTimeFormat('sv-SE', {month:'long', year:'numeric'}).format(new Date(viewYear,viewMonth,1)); days.replaceChildren(); ['Mån','Tis','Ons','Tor','Fre','Lör','Sön'].forEach(label => { const item = document.createElement('div'); item.className = 'weekday'; item.textContent = label; days.append(item); }); const offset = (new Date(viewYear,viewMonth,1).getDay()+6)%7; for(let i=0;i {viewMonth--;if(viewMonth<0){viewMonth=11;viewYear--;}render();}); next.addEventListener('click', () => {viewMonth++;if(viewMonth>11){viewMonth=0;viewYear++;}render();}); async function load() { try { const address = new URL(BOOKING_PAGE_URL, window.location.href); if(address.origin !== window.location.origin) { throw new Error('Kalendern och bokningssidan måste ligga på samma domän (inklusive www).'); } address.searchParams.set('calendar_refresh', String(Date.now())); const response = await fetch(address.toString(), {cache:'no-store', credentials:'same-origin'}); if(!response.ok) throw new Error('HTTP '+response.status); const html = await response.text(); const doc = new DOMParser().parseFromString(html, 'text/html'); const dates = doc.getElementById('bokade-datum'); if(!dates) throw new Error('Hittar inte id="bokade-datum" på bokningssidan.'); const items = dates.textContent.split(/\s+/).map(s=>s.trim()).filter(Boolean); if(items.some(s=>!validDate(s))) throw new Error('Felaktigt datumformat på bokningssidan.'); booked = new Set(items); loaded = true; status.className='msg'; status.textContent='Grönt = ledig, rött = bokad. Kontakta oss för att boka.'; } catch (error) { loaded=false; status.className='msg error'; status.textContent='Tillgängligheten kan inte visas just nu. Kontakta oss innan du bokar.'; console.warn('[Släpkalender]', error); } render(); } render(); load(); }; if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',init); else init(); })();