PageSourceSearch

https://maciejowice.pl/wp-content/themes/itlu/js/jquery.eventcalendar.js

js maciejowice.pl collected 2026-10-02 18:51:59 UTC 21,743 bytes, 509 lines download raw bytes

1/* =
2 jquery.eventCalendar.js
3 version: 0.7
4 date: 13-08-2015
5 author:
6 Jaime Fernandez (@vissit)
7 company:
8 Paradigma Tecnologico (@paradigmate)
9 url:
10 http://www.vissit.com/projects/eventCalendar/
11 */
12;
13(function ($) {
14    $.fn.eventCalendar = function (options) {
15        var calendar = this;
16
17        if (options.locales && typeof (options.locales) == 'string') {
18            $.getJSON(options.locales, function (data) {
19                options.locales = $.extend({}, $.fn.eventCalendar.defaults.locales, data);
20                moment.locale(data.locale, options.locales.moment);
21                moment.locale(data.locale);
22
23                initEventCalendar(calendar, options);
24            }).error(function () {
25                showError("error getting locale json", $(this));
26            });
27        } else {
28            if (options.locales && options.locales.locale) {
29                options.locales = $.extend({}, $.fn.eventCalendar.defaults.locales, options.locales);
30                moment.locale(options.locales.locale, options.locales.moment);
31                moment.locale(options.locales.locale);
32            }
33            initEventCalendar(calendar, options);
34        }
35
36
37    };
38
39
40    // define the parameters with the default values of the function
41    $.fn.eventCalendar.defaults = {
42        eventsjson: 'js/events.json',
43        eventsLimit: 4,
44        locales: {
45            locale: "en",
46            txt_noEvents: "There are no events in this period",
47            txt_SpecificEvents_prev: "",
48            txt_SpecificEvents_after: "events:",
49            txt_next: "next",
50            txt_prev: "prev",
51            txt_NextEvents: "Next events:",
52            txt_GoToEventUrl: "See the event",
53            txt_loading: "loading..."
54        },
55        showDayAsWeeks: true,
56        startWeekOnMonday: true,
57        showDayNameInCalendar: true,
58        showDescription: false,
59        onlyOneDescription: true,
60        openEventInNewWindow: false,
61        eventsScrollable: false,
62        dateFormat: "D/MM/YYYY",
63        jsonDateFormat: 'timestamp', // you can use also "human" 'YYYY-MM-DD HH:MM:SS'
64        moveSpeed: 500, // speed of month move when you clic on a new date
65        moveOpacity: 0.15, // month and events fadeOut to this opacity
66        jsonData: "", // to load and inline json (not ajax calls)
67        cacheJson: true	// if true plugin get a json only first time and after plugin filter events
68                // if false plugin get a new json on each date change
69    };
70
71    function initEventCalendar(that, options) {
72        var eventsOpts = $.extend({}, $.fn.eventCalendar.defaults, options);
73
74        // define global vars for the function
75        var flags = {
76            wrap: "",
77            directionLeftMove: "300",
78            eventsJson: {}
79        };
80
81        // each eventCalendar will execute this function
82        that.each(function () {
83
84            flags.wrap = $(this);
85            flags.wrap.addClass('eventCalendar-wrap').append("<div class='eventCalendar-list-wrap'><a href=\"#close\" id='close_event_list'>x</a><p class='eventCalendar-subtitle'></p><span class='eventCalendar-loading'>" + eventsOpts.locales.txt_loading + "</span><div class='eventCalendar-list-content'><ul class='eventCalendar-list'></ul></div></div>");
86			
87			$("#close_event_list").click(function(event) {
88				event.preventDefault();
89				
90				$(".eventCalendar-list-wrap").removeClass('active');
91			});
92
93            if (eventsOpts.eventsScrollable) {
94                flags.wrap.find('.eventCalendar-list-content').addClass('scrollable');
95            }
96
97            setCalendarWidth(flags);
98            $(window).resize(function () {
99                setCalendarWidth(flags);
100            });
101            //flags.directionLeftMove = flags.wrap.width();
102
103            // show current month
104            dateSlider("current", flags, eventsOpts);
105
106            getEvents(flags, eventsOpts, eventsOpts.eventsLimit, false, false, false, false);
107
108            changeMonth(flags, eventsOpts);
109
110            flags.wrap.on('click', '.eventCalendar-day a', function (e) {
111                //flags.wrap.find('.eventCalendar-day a').live('click',function(e){
112                e.preventDefault();
113                var year = flags.wrap.attr('data-current-year'),
114                        month = flags.wrap.attr('data-current-month'),
115                        day = $(this).parent().attr('rel');
116
117                getEvents(flags, eventsOpts, false, year, month, day, "day");
118				$('.eventCalendar-list-wrap').addClass('active');
119            });
120            flags.wrap.on('click', '.eventCalendar-monthTitle', function (e) {
121                //flags.wrap.find('.eventCalendar-monthTitle').live('click',function(e){
122                e.preventDefault();
123                var year = flags.wrap.attr('data-current-year'),
124                        month = flags.wrap.attr('data-current-month');
125
126                getEvents(flags, eventsOpts, eventsOpts.eventsLimit, year, month, false, "month");
127            });
128        });
129
130        // show event description
131        flags.wrap.find('.eventCalendar-list').on('click', '.eventCalendar-eventTitle', function (e) {
132            //flags.wrap.find('.eventCalendar-list .eventCalendar-eventTitle').live('click',function(e){
133            if (false) {
134                e.preventDefault();
135                var desc = $(this).parent().find('.eventCalendar-eventDesc');
136
137                if (!desc.find('a').size()) {
138                    var eventUrl = $(this).attr('href');
139                    var eventTarget = $(this).attr('target');
140
141                    // create a button to go to event url
142                    desc.append('<a href="' + eventUrl + '" target="' + eventTarget + '" class="bt">' + eventsOpts.locales.txt_GoToEventUrl + '</a>');
143                }
144
145                if (desc.is(':visible')) {
146                    desc.slideUp();
147                } else {
148                    if (eventsOpts.onlyOneDescription) {
149                        flags.wrap.find('.eventCalendar-eventDesc').slideUp();
150                    }
151                    desc.slideDown();
152                }
153
154            }
155        });
156    }
157
158    function sortJson(a, b) {
159        if (typeof a.date === 'string') {
160            return a.date.toLowerCase() > b.date.toLowerCase() ? 1 : -1;
161        }
162        return a.date > b.date ? 1 : -1;
163    }
164
165    function dateSlider(show, flags, eventsOpts) {
166        var $eventsCalendarSlider = $("<div class='eventCalendar-slider'></div>"),
167                $eventsCalendarMonthWrap = $("<div class='eventCalendar-monthWrap'></div>"),
168                $eventsCalendarTitle = $("<div class='eventCalendar-currentTitle'><a href='#' class='eventCalendar-monthTitle'></a></div>"),
169                $eventsCalendarArrows = $("<a href='#' class='eventCalendar-arrow eventCalendar-prev'><span>" + eventsOpts.locales.txt_prev + "</span></a><a href='#' class='eventCalendar-arrow eventCalendar-next'><span>" + eventsOpts.locales.txt_next + "</span></a>");
170        $eventsCalendarDaysList = $("<ul class='eventCalendar-daysList'></ul>"),
171                date = new Date();
172
173        if (!flags.wrap.find('.eventCalendar-slider').length) {
174            flags.wrap.prepend($eventsCalendarSlider);
175            $eventsCalendarSlider.append($eventsCalendarMonthWrap);
176        } else {
177            flags.wrap.find('.eventCalendar-slider').append($eventsCalendarMonthWrap);
178        }
179
180        flags.wrap.find('.eventCalendar-monthWrap.eventCalendar-currentMonth').removeClass('eventCalendar-currentMonth').addClass('eventCalendar-oldMonth');
181        $eventsCalendarMonthWrap.addClass('eventCalendar-currentMonth').append($eventsCalendarTitle, $eventsCalendarDaysList);
182
183
184
185        // if current show current month & day
186        if (show === "current") {
187            day = date.getDate();
188            $eventsCalendarSlider.append($eventsCalendarArrows);
189
190        } else {
191            date = new Date(flags.wrap.attr('data-current-year'), flags.wrap.attr('data-current-month'), 1, 0, 0, 0); // current visible month
192            day = 0; // not show current day in days list
193
194            moveOfMonth = 1;
195            if (show === "prev") {
196                moveOfMonth = -1;
197            }
198            date.setMonth(date.getMonth() + moveOfMonth);
199
200            var tmpDate = new Date();
201            if (date.getMonth() === tmpDate.getMonth()) {
202                day = tmpDate.getDate();
203            }
204
205        }
206
207        // get date portions
208        var year = date.getFullYear(), // year of the events
209                currentYear = new Date().getFullYear(), // current year
210                month = date.getMonth(), // 0-11
211                monthToShow = month + 1;
212
213        if (show != "current") {
214            // month change
215            getEvents(flags, eventsOpts, eventsOpts.eventsLimit, year, month, false, show);
216        }
217
218        flags.wrap.attr('data-current-month', month)
219                .attr('data-current-year', year);
220
221        // add current date info
222        moment.locale(eventsOpts.locales.locale);
223
224        var formatedDate = moment(year + " " + monthToShow, "YYYY MM").format("MMMM YYYY");
225        $eventsCalendarTitle.find('.eventCalendar-monthTitle').html(formatedDate);
226
227        // print all month days
228        var daysOnTheMonth = 32 - new Date(year, month, 32).getDate();
229        var daysList = [],
230                i;
231        if (eventsOpts.showDayAsWeeks) {
232            $eventsCalendarDaysList.addClass('eventCalendar-showAsWeek');
233
234            // show day name in top of calendar
235            if (eventsOpts.showDayNameInCalendar) {
236                $eventsCalendarDaysList.addClass('eventCalendar-showDayNames');
237
238                i = 0;
239                // if week start on monday
240                if (eventsOpts.startWeekOnMonday) {
241                    i = 1;
242                }
243
244                for (; i < 7; i++) {
245                    daysList.push('<li class="eventCalendar-day-header">' + moment()._locale._weekdaysShort[i] + '</li>');
246
247                    if (i === 6 && eventsOpts.startWeekOnMonday) {
248                        // print sunday header
249                        daysList.push('<li class="eventCalendar-day-header">' + moment()._locale._weekdaysShort[0] + '</li>');
250                    }
251
252                }
253            }
254
255            dt = new Date(year, month, 01);
256            var weekDay = dt.getDay(); // day of the week where month starts
257
258            if (eventsOpts.startWeekOnMonday) {
259                weekDay = dt.getDay() - 1;
260            }
261            if (weekDay < 0) {
262                weekDay = 6;
263            } // if -1 is because day starts on sunday(0) and week starts on monday
264
265            for (i = weekDay; i > 0; i--) {
266                daysList.push('<li class="eventCalendar-day eventCalendar-empty"></li>');
267            }
268        }
269        for (dayCount = 1; dayCount <= daysOnTheMonth; dayCount++) {
270            var dayClass = "";
271
272            if (day > 0 && dayCount === day && year === currentYear) {
273                dayClass = "today";
274            }
275            daysList.push('<li id="dayList_' + dayCount + '" rel="' + dayCount + '" class="eventCalendar-day ' + dayClass + '"><a href="#">' + dayCount + '</a></li>');
276        }
277        $eventsCalendarDaysList.append(daysList.join(''));
278
279        $eventsCalendarSlider.css('height', $eventsCalendarMonthWrap.height() + 'px');
280    }
281
282    function getEvents(flags, eventsOpts, limit, year, month, day, direction) {
283        limit = limit || 0;
284        year = year || '';
285        day = day || '';
286
287        // to avoid problem with january (month = 0)
288
289        if (typeof month != 'undefined') {
290            month = month;
291        } else {
292            month = '';
293        }
294
295        //var month = month || '';
296        flags.wrap.find('.eventCalendar-loading').fadeIn();
297
298        if (eventsOpts.jsonData) {
299            // user send a json in the plugin params
300            eventsOpts.cacheJson = true;
301
302            flags.eventsJson = eventsOpts.jsonData;
303            getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction);
304
305        } else if (!eventsOpts.cacheJson || !direction) {
306            // first load: load json and save it to future filters
307            $.getJSON(eventsOpts.eventsjson + "?limit=" + limit + "&year=" + year + "&month=" + month + "&day=" + day, function (data) {
308                flags.eventsJson = data; // save data to future filters
309                getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction);
310            }).error(function () {
311                showError("error getting json: ", flags.wrap);
312            });
313        } else {
314            // filter previus saved json
315            getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction);
316        }
317
318        if (day > '') {
319            flags.wrap.find('.eventCalendar-current').removeClass('eventCalendar-current');
320            flags.wrap.find('#dayList_' + day).addClass('eventCalendar-current');
321        }
322    }
323
324    function getEventsData(flags, eventsOpts, data, limit, year, month, day, direction) {
325        directionLeftMove = "-=" + flags.directionLeftMove;
326        eventContentHeight = "auto";
327
328        subtitle = flags.wrap.find('.eventCalendar-list-wrap .eventCalendar-subtitle');
329
330        if (!direction) {
331            // first load
332            subtitle.html(eventsOpts.locales.txt_NextEvents);
333            eventContentHeight = "auto";
334            directionLeftMove = "-=0";
335        } else {
336            var jsMonth = parseInt(month) + 1,
337                    formatedDate;
338            moment.locale(eventsOpts.locales.locale);
339
340            if (day !== '') {
341                formatedDate = moment(year + " " + jsMonth + " " + day, "YYYY MM DD").format("LL");
342                subtitle.html(eventsOpts.locales.txt_SpecificEvents_prev + formatedDate + " " + eventsOpts.locales.txt_SpecificEvents_after);
343                //eventStringDate = moment(eventDate).format(eventsOpts.dateFormat);
344            } else {
345                formatedDate = moment(year + " " + jsMonth, "YYYY MM").format("MMMM");
346                subtitle.html(eventsOpts.locales.txt_SpecificEvents_prev + formatedDate + " " + eventsOpts.locales.txt_SpecificEvents_after);
347            }
348
349            if (direction === 'eventCalendar-prev') {
350                directionLeftMove = "+=" + flags.directionLeftMove;
351            } else if (direction === 'day' || direction === 'month') {
352                directionLeftMove = "+=0";
353                eventContentHeight = 0;
354            }
355        }
356
357        flags.wrap.find('.eventCalendar-list').animate({
358            opacity: eventsOpts.moveOpacity,
359            left: directionLeftMove,
360            height: eventContentHeight
361        }, eventsOpts.moveSpeed, function () {
362            flags.wrap.find('.eventCalendar-list').css({'left': 0, 'height': 'auto'}).hide();
363            //wrap.find('.eventCalendar-list li').fadeIn();
364
365            var events = [];
366
367            data = $(data).sort(sortJson); // sort event by dates
368            // each event
369            if (data.length) {
370
371                // show or hide event description
372                var eventDescClass = '';
373                if (!eventsOpts.showDescription) {
374                    eventDescClass = 'eventCalendar-hidden';
375                }
376                var eventLinkTarget = "_self";
377                if (eventsOpts.openEventInNewWindow) {
378                    eventLinkTarget = '_blank';
379                }
380
381                var i = 0;
382                $.each(data, function (key, event) {
383                    var eventDateTime, eventDate, eventTime, eventYear, eventMonth, eventDay,
384                            eventMonthToShow, eventHour, eventMinute, eventSeconds;
385                    if (eventsOpts.jsonDateFormat == 'human') {
386                        eventDateTime = event.date.split(" ");
387                        eventDate = eventDateTime[0].split("-");
388                        eventTime = eventDateTime[1].split(":");
389                        eventYear = eventDate[0];
390                        eventMonth = parseInt(eventDate[1]) - 1;
391                        eventDay = parseInt(eventDate[2]);
392                        //eventMonthToShow = eventMonth;
393                        eventMonthToShow = parseInt(eventMonth) + 1;
394                        eventHour = eventTime[0];
395                        eventMinute = eventTime[1];
396                        eventSeconds = eventTime[2];
397                        eventDate = new Date(eventYear, eventMonth, eventDay, eventHour, eventMinute, eventSeconds);
398                    } else {
399                        eventDate = new Date(parseInt(event.date));
400                        eventYear = eventDate.getFullYear();
401                        eventMonth = eventDate.getMonth();
402                        eventDay = eventDate.getDate();
403                        eventMonthToShow = eventMonth + 1;
404                        eventHour = eventDate.getHours();
405                        eventMinute = eventDate.getMinutes();
406
407                    }
408
409                    if (parseInt(eventMinute) <= 9) {
410                        eventMinute = "0" + parseInt(eventMinute);
411                    }
412
413
414                    if (limit === 0 || limit > i) {
415                        // if month or day exist then only show matched events
416
417                        if ((month === false || month == eventMonth) && (day === '' || day == eventDay) && (year === '' || year == eventYear)) {
418                            // if initial load then load only future events
419                            if (month === false && eventDate < new Date()) {
420                            } else {
421                                moment.locale(eventsOpts.locales.locale);
422                                //eventStringDate = eventDay + "/" + eventMonthToShow + "/" + eventYear;
423                                eventStringDate = moment(eventDate).format(eventsOpts.dateFormat);
424                                var eventTitle;
425
426                                if (event.url) {
427                                    eventTitle = '<a href="' + event.url + '" target="' + eventLinkTarget + '" class="eventCalendar-eventTitle">' + event.title + '</a>';
428                                } else {
429                                    eventTitle = '<span class="eventCalendar-eventTitle">' + event.title + '</span>';
430                                }
431                                
432                                if(event.thumb != '') {
433                                    var event_thumb_str = '<div class="thumb">' + event.thumb + '</div><div class="content">';
434                                }
435                                else {
436                                    var event_thumb_str = '<div class="content_full">';
437                                }
438                                
439                                events.push('<li id="' + key + '" class="' + event.type + '">' + event_thumb_str + '<div class="time"><i class="fa fa-calendar"></i> <time datetime="' + eventDate + '"><em>' + eventStringDate + '</em></time></div>' + eventTitle + '<p class="eventCalendar-eventDesc ' + eventDescClass + '">' + event.description + '</p></div><div class="clearfix"></div></li>');
440                                i++;
441                            }
442                        }
443                    }
444
445                    // add mark in the dayList to the days with events
446                    if (eventYear == flags.wrap.attr('data-current-year') && eventMonth == flags.wrap.attr('data-current-month')) {
447                        flags.wrap.find('.eventCalendar-currentMonth .eventCalendar-daysList #dayList_' + parseInt(eventDay)).addClass('eventCalendar-dayWithEvents');
448                    }
449
450                });
451            }
452
453            // there is no events on this period
454            if (!events.length) {
455                events.push('<li class="eventCalendar-noEvents"><p>' + eventsOpts.locales.txt_noEvents + '</p></li>');
456            }
457            flags.wrap.find('.eventCalendar-loading').hide();
458
459            flags.wrap.find('.eventCalendar-list')
460                    .html(events.join(''));
461
462            flags.wrap.find('.eventCalendar-list').animate({
463                opacity: 1,
464                height: "toggle"
465            }, eventsOpts.moveSpeed);
466
467
468        });
469        setCalendarWidth(flags);
470    }
471
472    function changeMonth(flags, eventsOpts) {
473        flags.wrap.find('.eventCalendar-arrow').click(function (e) {
474            e.preventDefault();
475            var lastMonthMove;
476
477            if ($(this).hasClass('eventCalendar-next')) {
478                dateSlider("next", flags, eventsOpts);
479                lastMonthMove = '-=' + flags.directionLeftMove;
480
481            } else {
482                dateSlider("prev", flags, eventsOpts);
483                lastMonthMove = '+=' + flags.directionLeftMove;
484            }
485
486            flags.wrap.find('.eventCalendar-monthWrap.eventCalendar-oldMonth').animate({
487                opacity: eventsOpts.moveOpacity,
488                left: lastMonthMove
489            }, eventsOpts.moveSpeed, function () {
490                flags.wrap.find('.eventCalendar-monthWrap.eventCalendar-oldMonth').remove();
491            });
492        });
493    }
494
495    function showError(msg, wrap) {
496        wrap.find('.eventCalendar-list-wrap').html("<span class='eventCalendar-loading eventCalendar-error'>" + msg + "</span>");
497    }
498
499    function setCalendarWidth(flags) {
500        // resize calendar width on window resize
501        flags.directionLeftMove = flags.wrap.width();
502        flags.wrap.find('.eventCalendar-monthWrap').width(flags.wrap.width() + 'px');
503
504        flags.wrap.find('.eventCalendar-list-wrap').width(flags.wrap.width() + 'px');
505
506    }
507
508
509})(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.