PageSourceSearch

https://aalborgzoo.dk/wp-content/plugins/zoo-opening-hours/js/calendar.js?ver=1.0.38

js aalborgzoo.dk collected 2026-09-24 20:19:32 UTC 6,260 bytes, 194 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function() {
2    // Tjek om kalenderen findes på denne side
3    if (!document.getElementById('openingHoursCalendar')) {
4        return; // Afslut hvis kalenderen ikke findes
5    }
6
7    let currentMonth = new Date().getMonth();
8    let currentYear = new Date().getFullYear();
9    let openingHoursData = null;
10
11    // Hent åbningstider via AJAX
12    function fetchOpeningHours() {
13        jQuery.ajax({
14            url: zoo_calendar.ajaxurl,
15            type: 'POST',
16            data: {
17                action: 'get_calendar_hours',
18                nonce: zoo_calendar.nonce
19            },
20            success: function(response) {
21                if (response.success && response.data.hours) {
22                    openingHoursData = response.data.hours;
23                    loadCalendar();
24                }
25            }
26        });
27    }
28
29    // Opdater måned display
30    function updateMonthDisplay() {
31        const monthDisplay = document.getElementById('monthDisplay');
32        if (monthDisplay) {
33            monthDisplay.textContent = zooTranslations.months[currentMonth] + ' ' + currentYear;
34        }
35    }
36
37    // Få åbningstider for en specifik dato
38    function getOpeningHoursForDate(year, month, day) {
39        // Nytårsaften er altid lukket
40        if (month === 11 && day === 31) {
41            return 'Lukket';
42        }
43
44        // YYYY-MM-DD format med korrekt padding
45        const dateStr = year + '-' +
46                       (month + 1).toString().padStart(2, '0') + '-' +
47                       day.toString().padStart(2, '0');
48
49        // Check for specielle datoer
50        if (openingHoursData && openingHoursData.special_dates && openingHoursData.special_dates[dateStr]) {
51            return openingHoursData.special_dates[dateStr];
52        }
53
54        // Returner standard åbningstid for måneden
55        if (openingHoursData && openingHoursData.default_hours) {
56            return openingHoursData.default_hours[month + 1] || 'Lukket';
57        }
58
59        return 'Lukket';
60    }
61
62    // Bestem dot class baseret på åbningstider
63  function getDotClass(hours) {
64    if (hours === 'Lukket') return '';
65
66    // Tildel klasse baseret på lukketid
67    if (hours.includes('-')) {
68        const closeTime = parseInt(hours.split('-')[1]);
69
70        if (closeTime === 13) return 'very-early'; // orange
71        if (closeTime === 15) return 'early';      // grøn
72        if (closeTime === 17) return 'normal';     // blå
73        if (closeTime === 18) return 'medium';     // gul
74        if (closeTime === 19) return 'late';       // lilla
75        if (closeTime >= 20) return 'very-late';   // pink
76    }
77
78    return '';
79}
80
81    // Load kalender
82   // Load kalender
83function loadCalendar() {
84    updateMonthDisplay();
85
86    const uniqueHours = new Set();
87    let hasClosedDays = false;
88    const daysContainer = document.getElementById('calendarDays');
89    if (!daysContainer) return;
90
91    daysContainer.innerHTML = '';
92
93    // Beregn første og sidste dag i måneden
94    const firstDay = new Date(currentYear, currentMonth, 1);
95    const lastDay = new Date(currentYear, currentMonth + 1, 0);
96    const daysInMonth = lastDay.getDate();
97
98    // Tilføj tomme celler for dage før første dag i måneden
99    const firstDayWeekday = (firstDay.getDay() + 6) % 7; // Konverter til mandag-først format
100    for (let i = 0; i < firstDayWeekday; i++) {
101        const emptyCell = document.createElement('div');
102        emptyCell.className = 'empty-day';
103        daysContainer.appendChild(emptyCell);
104    }
105
106    // Tilføj dage i måneden
107    for (let day = 1; day <= daysInMonth; day++) {
108        const dayCell = document.createElement('div');
109        dayCell.className = 'calendar-day';
110
111        // Hent åbningstid for denne specifikke dato
112        const openingHours = getOpeningHoursForDate(currentYear, currentMonth, day);
113
114        // Saml unikke åbningstider til legend
115// Saml unikke åbningstider til legend
116if (openingHours !== 'Lukket' && openingHours !== 'LUKKET') {
117    uniqueHours.add(openingHours);
118} else {
119    hasClosedDays = true;
120}
121        // Bestem dot class
122        const dotClass = getDotClass(openingHours);
123
124        // Opret html for dagen
125        if (openingHours !== 'LUKKET') {
126            dayCell.innerHTML = `
127                <div class="day-number">${day}</div>
128                <div class="dots-container">
129                    <div class="dot ${dotClass}"></div>
130                </div>
131            `;
132        } else {
133            dayCell.innerHTML = `<div class="day-number">${day}</div>`;
134        }
135
136        daysContainer.appendChild(dayCell);
137    }
138
139    // Hvis hele måneden er lukket (ingen åbningstider men har lukkede dage), tilføj "Lukket" til legend
140    if (hasClosedDays) {
141        uniqueHours.add('LUKKET');
142    }
143
144    // Opdater forklaring
145    updateLegend(uniqueHours);
146}
147
148    // Opdater forklaring
149    function updateLegend(uniqueHours) {
150        const legendContainer = document.getElementById('legendContainer');
151        if (!legendContainer) return;
152
153        legendContainer.innerHTML = '';
154
155        // Sorter efter lukketid
156        const sortedHours = Array.from(uniqueHours).sort((a, b) => {
157            if (a.includes('-') && b.includes('-')) {
158                const [, aClose] = a.split('-').map(Number);
159                const [, bClose] = b.split('-').map(Number);
160                return aClose - bClose;
161            }
162            return 0;
163        });
164
165        // Opret legend items
166        sortedHours.forEach(hours => {
167            const dotClass = getDotClass(hours);
168            legendContainer.innerHTML += `
169                <div class="legend-item">
170                    <div class="legend-dot ${dotClass}"></div>
171                    <div class="legend-text">Åbningstid: ${hours}</div>
172                </div>
173            `;
174        });
175    }
176
177    // Event handlers for måned navigation
178    window.changeMonth = function(delta) {
179        currentMonth += delta;
180
181        if (currentMonth < 0) {
182            currentMonth = 11;
183            currentYear--;
184        } else if (currentMonth > 11) {
185            currentMonth = 0;
186            currentYear++;
187        }
188
189        loadCalendar();
190    };
191
192    // Initial load
193    fetchOpeningHours();
194});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.