PageSourceSearch

https://www.lucenadelpuerto.es/system/modules/com.saga.sagasuite.e…/js/jquery.eventCalendarBootstrap.js

js lucenadelpuerto.es collected 2026-10-02 22:06:32 UTC 16,227 bytes, 488 lines download raw bytes

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

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.