PageSourceSearch

https://www.ronin-hoerverlag.de/wp-content/plugins/ronin-adventskalender/assets/js/calendar.js?ver=1.0.2

js ronin-hoerverlag.de collected 2026-09-26 11:25:05 UTC 6,639 bytes, 174 lines download raw bytes

1(function($) {
2    'use strict';
3    
4    function initCalendar() {
5        console.log('Ronin Adventskalender wird initialisiert...');
6        
7        // Prüfen ob roninAdvent verfügbar ist
8        if (typeof roninAdvent === 'undefined') {
9            console.error('roninAdvent ist nicht definiert!');
10            return;
11        }
12        
13        const calendarElement = $('#advent-calendar');
14        
15        if (calendarElement.length === 0) {
16            console.error('Kalender-Element #advent-calendar nicht gefunden!');
17            return;
18        }
19        
20        const modal = $('#door-modal');
21        const closeModal = $('.modal-close');
22        
23        // Deals aus WordPress holen
24        const deals = roninAdvent.deals || [];
25        console.log('Anzahl Deals:', deals.length);
26        
27        // Logik: Datum und Monats-Check
28        const today = new Date().getDate();
29        const currentMonth = new Date().getMonth(); // 11 ist Dezember
30        const currentYear = new Date().getFullYear();
31        
32        console.log('Heute ist der:', today, 'Monat:', currentMonth);
33        
34        // LocalStorage-Funktionen
35        const getOpenedDoors = function() {
36            try {
37                const stored = localStorage.getItem('ronin_advent_doors_' + currentYear);
38                return stored ? JSON.parse(stored) : [];
39            } catch (e) {
40                console.error('LocalStorage Fehler:', e);
41                return [];
42            }
43        };
44        
45        const saveOpenedDoor = function(day) {
46            let openedDoors = getOpenedDoors();
47            if (!openedDoors.includes(day)) {
48                openedDoors.push(day);
49                // Nur im Dezember speichern
50                if (currentMonth === 11) {
51                    try {
52                        localStorage.setItem('ronin_advent_doors_' + currentYear, JSON.stringify(openedDoors));
53                    } catch(e) {
54                        console.error('Fehler beim Speichern:', e);
55                    }
56                }
57            }
58        };
59        
60        // 1. Alle Türchen generieren
61        console.log('Generiere Türchen...');
62        for (let i = 1; i <= 24; i++) {
63            const door = $('<div></div>')
64                .addClass('advent-door')
65                .attr('data-day', i);
66            
67            const doorNumber = $('<span></span>')
68                .addClass('advent-door-number')
69                .text(i);
70            
71            door.append(doorNumber);
72            
73            // Ist der Kalender aktiv und das Datum in der Zukunft?
74            // Türchen ist gesperrt wenn: Tag noch nicht erreicht (im Dezember) ODER nicht Dezember
75            const isLocked = (i > today && currentMonth === 11) || currentMonth !== 11;
76            const hasBeenOpened = getOpenedDoors().includes(i);
77            const deal = deals.find(function(d) { return parseInt(d.day) === i; });
78            
79            if (hasBeenOpened && deal) {
80                door.addClass('is-open');
81                // Produktbild als Hintergrund setzen
82                door.css('background-image', 'url(' + deal.img + ')');
83                door.css('background-size', 'cover');
84                door.css('background-position', 'center');
85                doorNumber.hide(); // Nummer ausblenden bei geöffnetem Türchen
86            }
87            
88            if (isLocked) {
89                door.addClass('is-locked');
90            }
91            
92            if (deal) {
93                door.data('deal', deal);
94            }
95            
96            calendarElement.append(door);
97        }
98        
99        console.log('24 Türchen generiert!');
100        
101        // 2. Klick-Handler für die Türchen
102        calendarElement.on('click', '.advent-door', function() {
103            const door = $(this);
104            const day = parseInt(door.attr('data-day'));
105            
106            if (door.hasClass('is-locked')) {
107                // Hinweis für gesperrte Türchen
108                const monthName = currentMonth === 11 ? 'Dezember' : 'Advent';
109                alert('🎄 Dieses Türchen kann erst am ' + day + '. ' + monthName + ' geöffnet werden!\n\nBitte habe noch etwas Geduld. ⏰');
110                return;
111            }
112            
113            const deal = door.data('deal');
114            
115            if (deal) {
116                const wasAlreadyOpen = door.hasClass('is-open');
117                
118                // Türchen-Label und Titel getrennt setzen
119                $('#modal-day-label').text('Türchen ' + day);
120                $('#modal-title').text(deal.title);
121                $('#modal-image').attr('src', deal.img).attr('alt', deal.title);
122                $('#modal-text').html(deal.text);
123                
124                // Button-Text: wenn schon geöffnet "Zum Bestseller", sonst Custom-Text
125                const buttonText = wasAlreadyOpen ? 'Zum Bestseller' : (roninAdvent.buttonText || 'Nur HEUTE für 5 EUR sichern >');
126                $('#modal-button').attr('href', deal.url).text(buttonText);
127                
128                modal.show();
129                
130                // Türchen als geöffnet markieren (nur wenn noch nicht offen)
131                if (!wasAlreadyOpen) {
132                    door.addClass('is-open');
133                    // Produktbild als Hintergrund setzen
134                    door.css('background-image', 'url(' + deal.img + ')');
135                    door.css('background-size', 'cover');
136                    door.css('background-position', 'center');
137                    // Nummer ausblenden
138                    door.find('.advent-door-number').fadeOut(300);
139                    
140                    saveOpenedDoor(day);
141                }
142            } else {
143                alert('Türchen ' + day + ' ist offen, aber der Deal muss noch eingetragen werden!');
144            }
145        });
146        
147        // 3. Modal schließen
148        closeModal.on('click', function() {
149            modal.hide();
150        });
151        
152        $(window).on('click', function(event) {
153            if ($(event.target).is('#door-modal')) {
154                modal.hide();
155            }
156        });
157        
158        // ESC-Taste zum Schließen
159        $(document).on('keydown', function(event) {
160            if (event.key === 'Escape' && modal.is(':visible')) {
161                modal.hide();
162            }
163        });
164        
165        console.log('Kalender erfolgreich initialisiert!');
166    }
167    
168    // Initialisieren wenn DOM bereit ist
169    $(document).ready(function() {
170        console.log('DOM Ready - starte Kalender');
171        initCalendar();
172    });
173    
174})(jQuery);

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.