PageSourceSearch

https://www.neuchatelville.ch/typo3temp/assets/compressed/AgendaLi…ce9b14f00ce979b8ba42af0a80ed6.js?1783607176

js neuchatelville.ch collected 2026-10-02 05:12:52 UTC 16,816 bytes, 401 lines download raw bytes

1/**
2 * Plugin jQuery pour l'extension agenda
3 */
4(function ($) {
5    $.AgendaList = function (el, options) {
6        var base = this;
7        var $ajaxLoader = $('.tx-culturoscope').find('#ajax-loader');
8
9        // Version jQuery de l'élément
10        var $el = $(el);
11        var $calendarToggle = $('.calendar-toggle');
12
13        // Ajoute une référence inverse sur le plugin dans le DOM
14        $el.data("AgendaList", base);
15
16        /**
17         * Point d'entrée, appelé lors de l'instanciation du plugin
18         */
19        var init = function () {
20            // vérification et assignation des événements de désactivation du calendrier
21            checkCalendar();
22
23            // define locales
24            moment.locale('fr-ch');
25            var weekdays = moment.weekdaysShort()
26            weekdays.push(weekdays.shift());
27
28            // load calendar
29            // if($('#get-calendar-events-url').val()) {
30            //     // filter calendar
31            //     $.ajax({
32            //         url: $('#get-calendar-events-url').val(),
33            //         type: 'post',
34            //         data: {
35            //             'tx_culturoscope_list[timestamp]': Date.now() / 1000
36            //         },
37            //         success: function(data){
38            //             $ajaxLoader.hide();
39            //             var events = $.parseJSON(data);
40            //
41            //             // initiate calendar with clndr.js
42            //             var calendar = $('#calendar').clndr({
43            //                 template: $('#calendar-template').html(),
44            //                 moment: moment,
45            //                 daysOfTheWeek: weekdays,
46            //                 startWithMonth: moment(),
47            //                 events: events,
48            //                 multiDayEvents: {
49            //                     startDate: 'start',
50            //                     endDate: 'end',
51            //                     singleDay: 'date'
52            //                 },
53            //                 clickEvents: {
54            //                     onMonthChange: function(month){
55            //                         $ajaxLoader.show();
56            //                         $.ajax({
57            //                             url: $('#get-calendar-events-url').val(),
58            //                             type: 'post',
59            //                             data: {
60            //                                 'tx_culturoscope_list[timestamp]': month.format('X')
61            //                             },
62            //                             success: function(data){
63            //                                 $ajaxLoader.hide();
64            //                                 calendar.setEvents($.parseJSON(data));
65            //                                 updateSelectedDays();
66            //                             }
67            //                         });
68            //                     },
69            //                     click: function(target){
70            //                         if($(target.element).hasClass('event') && !$(target.element).hasClass('past')){
71            //                             if($(target.element).hasClass('selected')){
72            //                                 removeSelectedDay(target);
73            //                             } else {
74            //                                 addSelectedDay(target);
75            //                             }
76            //                             checkWhenFilter();
77            //                             updateMobileButton();
78            //                         }
79            //                     }
80            //                 }
81            //             });
82            //
83            //             if($('#selected-days').val()){
84            //                 updateSelectedDays();
85            //                 updateMobileButton();
86            //             }
87            //             checkWhenFilter();
88            //         }
89            //     });
90            // } else {
91            //     // schedule calendar
92            //     $ajaxLoader.hide();
93            //
94            //     // get schedule
95            //     var schedule = getEventSchedule();
96            //
97            //     if($.isArray(schedule)) {
98            //         var calendar = $('#calendar').clndr({
99            //             template: $('#calendar-template').html(),
100            //             moment: moment,
101            //             daysOfTheWeek: weekdays,
102            //             events: schedule,
103            //             startWithMonth: moment(),
104            //             multiDayEvents: {
105            //                 startDate: 'start',
106            //                 endDate: 'end',
107            //                 singleDay: 'date'
108            //             },
109            //             clickEvents: {
110            //                 onMonthChange: function() {
111            //                     addTooltipInformation(schedule);
112            //                 }
113            //             },
114            //             ready: function() {
115            //                 addTooltipInformation(schedule);
116            //             }
117            //         });
118            //
119            //         $('.schedule').show();
120            //     } else {
121            //         $('#schedule-value').html(schedule);
122            //         $('.schedule-info').show();
123            //     }
124            // }
125
126            // load more events button
127            if($('#load-more-events').length > 0) {
128                $('#load-more-events').on('click', function(){
129                    var $urlInput = $('#load-more-url');
130                    var url = $urlInput.val();
131                    var data = {};
132                    var $resultsContainer = '';
133
134                    if($urlInput.data('search')) {
135                        $resultsContainer = $('.results');
136                        data = $('#filters-form').serialize();
137                        data += '&tx_culturoscope_list[offset]=' + $('.results').children('.event').length;
138                    } else {
139                        $resultsContainer = $('.current-events');
140                        var visibleEvents = '';
141                        $('.event').each(function(){
142                            visibleEvents += $(this).find('.period-uid').val() + ',';
143                        });
144                        visibleEvents = visibleEvents.slice(0, -1);
145                        data = {
146                            'tx_culturoscope_list[fromTimestamp]': $('.event:last-child').find('.period-timestamp').val(),
147                            'tx_culturoscope_list[limit]': $('#nb-events-to-show').val(),
148                            'tx_culturoscope_list[visiblePeriods]': visibleEvents
149                        };
150                    }
151
152                    $.ajax({
153                        url: url,
154                        type: 'post',
155                        data: data,
156                        success: function(data){
157                            $resultsContainer.append(data);
158                            $resultsContainer.find('.event').slideDown('slow');
159                            $('.event-hidden').removeClass('event-hidden');
160                            if(!$('#show-load-more-button').val()){
161                                $('#load-more-events').hide('slow');
162                            }
163                            $('#show-load-more-button').remove();
164                        }
165                    });
166                });
167            }
168
169            // load more permanent events button
170            if($('#load-more-permanent-events').length > 0) {
171                $('#load-more-permanent-events').on('click', function(){
172                    var $urlInput = $('#load-more-permanent-event-url');
173                    var url = $urlInput.val();
174                    var data = {};
175                    var $resultsContainer = '';
176
177                    if($urlInput.data('search')) {
178                        $resultsContainer = $('.results');
179                        data = $('#filters-form').serialize();
180                        data += '&tx_culturoscope_permanent[offset]=' + $('.results').children('.permanent-event').length;
181                    } else {
182                        $resultsContainer = $('.current-events');
183                        var visibleEvents = '';
184                        $('.permanent-event').each(function(){
185                            visibleEvents += $(this).find('.event-uid').val() + ',';
186                        });
187                        visibleEvents = visibleEvents.slice(0, -1);
188                        data = {
189                            'tx_culturoscope_permanent[fromTimestamp]': $('.permanent-event:last-child').find('.event-timestamp').val(),
190                            'tx_culturoscope_permanent[limit]': $('#nb-permanent-events-to-show').val(),
191                            'tx_culturoscope_permanent[visibleEvents]': visibleEvents
192                        };
193                    }
194
195                    $.ajax({
196                        url: url,
197                        type: 'post',
198                        data: data,
199                        success: function(data){
200                            $resultsContainer.append(data);
201                            $resultsContainer.find('.permanent-event').slideDown('slow');
202                            $('.event-hidden').removeClass('event-hidden');
203                            if(!$('#show-load-more-button').val()){
204                                $('#load-more-events').hide('slow');
205                            }
206                            $('#show-load-more-button').remove();
207                        }
208                    });
209                });
210            }
211
212            // Button to toggle the calendar on mobile
213            $calendarToggle.on('click', function() {
214                if(!$(this).hasClass('disable')) {
215                    $('.calendar-content').toggleClass('active');
216                }
217            });
218        };
219
220        /**
221         * Fetch event's periods and return an array of schedule
222         *
223         * @return array
224         */
225        var getEventSchedule = function() {
226            var schedule = [];
227            if($('.periods').length > 0 && $('.periods').children('div').length > 0) {
228                $('.periods').children('div').each(function(){
229                    var periodStart = moment($(this).data('periodStart'));
230                    var periodEnd = moment($(this).data('periodEnd'));
231
232                    if(periodEnd.format('X') - periodStart.format('X') <= 86400 && $('.periods').children('div').length === 1) {
233                        schedule = periodStart.format('H:mm') + '-' + periodEnd.format('H:mm');
234                    } else {
235                        var days = $(this).data('periodDays');
236                        var scheduleTime = periodStart.format('H:mm') + '-' + periodEnd.format('H:mm');
237                        var end = periodEnd.add(1, 'days');
238
239                        for(var day = periodStart; day.format('DD MM YYYY') !== end.format('DD MM YYYY'); day.add(1, 'days')) {
240                            var dayStr = day.format('dd').toLowerCase();
241                            if(days.indexOf(dayStr) !== -1) {
242                                schedule.push({
243                                    date: day.format('YYYY-MM-DD'),
244                                    schedule: scheduleTime
245                                });
246                            }
247                        }
248                    }
249                });
250            }
251
252            return schedule;
253        }
254
255        /**
256         * Add tooltip information
257         *
258         * @param array
259         * @return void
260         */
261        var addTooltipInformation = function(schedule) {
262            for(var i = 0; i < schedule.length; i++) {
263                $('.calendar-day-' + schedule[i]['date'])
264                    .attr('data-toggle', 'tooltip')
265                    .attr('data-placement', 'top')
266                    .attr('title', schedule[i]['schedule'])
267                    .attr('data-schedule', schedule[i]['schedule']);
268            }
269            $('[data-toggle="tooltip"]').tooltip();
270        }
271
272        var checkCalendar = function(){
273            disableCalendar($('#when').val());
274            $('#when').on('change', function(){
275                disableCalendar($(this).val());
276            });
277        }
278
279        var disableCalendar = function($value){
280            var $disableCalendar = $('#disable-calendar');
281            // Uniquement mobile
282            var $elementsToDisable = $('.calendar-toggle, .calendar-content');
283            if($value){
284                $disableCalendar.show();
285                $elementsToDisable.addClass('disable');
286            } else {
287                $disableCalendar.hide();
288                $elementsToDisable.removeClass('disable');
289            }
290        }
291
292        var checkWhenFilter = function(){
293            if($('#calendar').find('.selected').length > 0) {
294                $('#when').attr('disabled', 'disabled');
295            } else {
296                $('#when').removeAttr('disabled');
297            }
298        }
299
300        /**
301         * Add selected day to calendar
302         * @param target Target day object from clndr.js
303         */
304        var addSelectedDay = function(target){
305            var $element = $(target.element);
306            $element.addClass('selected');
307
308            var selectedDays = [];
309            if($('#selected-days').val()){
310                selectedDays = $.parseJSON($('#selected-days').val());
311                selectedDays.push(target.date.format('X'));
312            } else {
313                selectedDays = [];
314                selectedDays.push(target.date.format('X'));
315            }
316
317            $('#selected-days').val(JSON.stringify(selectedDays));
318        };
319
320        /**
321         * Remove selected day to calendar
322         * @param target Target day object from clndr.js
323         */
324        var removeSelectedDay = function(target){
325            var $element = $(target.element);
326            $element.removeClass('selected');
327
328            var selectedDays = $.parseJSON($('#selected-days').val());
329            selectedDays.splice(selectedDays.indexOf(target.date.format('X')), 1);
330
331            $('#selected-days').val(JSON.stringify(selectedDays));
332        };
333
334        /**
335         * Update selected days after month change
336         */
337        var updateSelectedDays = function(){
338            var selectedDays = $.parseJSON($('#selected-days').val());
339            var date = '';
340            var $dayElement = '';
341            for (var i = 0; i < selectedDays.length; i++){
342                date = moment.unix(selectedDays[i]);
343                $dayElement = $('.calendar-day-' + date.format('YYYY-MM-DD'));
344                if($dayElement.hasClass('event')){
345                    $('.calendar-day-' + date.format('YYYY-MM-DD')).addClass('selected');
346                }
347            }
348        }
349
350        /**
351         * Update label of the mobile button
352         */
353        var updateMobileButton = function() {
354            var stringSelectedDates = $('#selected-days').val();
355            var selectedDates = JSON.parse(stringSelectedDates);
356
357            // Tableau associatif pour avoir les noms des mois unique
358            var selectedMonths = [];
359            var selectedYears = [];
360            for(var i = 0; i < selectedDates.length; i++) {
361                var date = moment.unix(selectedDates[i]);
362                var month = date.format('MMMM');
363                var year = date.format('YYYY');
364                selectedMonths[month] = '';
365                selectedYears[year] = '';
366            }
367
368            var calendarToggleText = '';
369
370            var tempSelectedMonth = [];
371            for (var key in selectedMonths) {
372                tempSelectedMonth.push(key);
373            }
374            var tempSelectedYears = [];
375            for (var key in selectedYears) {
376                tempSelectedYears.push(key);
377            }
378
379            calendarToggleText = tempSelectedMonth.join(', ');
380            calendarToggleText += ' ' + tempSelectedYears.join(', ');
381
382            $calendarToggle.find('.text').text(calendarToggleText);
383
384            if($.trim($calendarToggle.find('.text').text()).length == 0) {
385                $calendarToggle.find('.text').addClass('empty');
386            } else {
387                $calendarToggle.find('.text').removeClass('empty');
388            }
389        }
390
391        // Initialisation du plugin
392        init();
393    };
394
395    $.fn.AgendaList = function (options) {
396        return this.each(function () {
397            (new $.AgendaList(this, options));
398        });
399    };
400
401})(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.