Team:UniSalento Lecce/js/cal.js
From 2013.igem.org
/* = jquery.eventCalendar.js version: 0.54 date: 18-04-2013 author: Jaime Fernandez (@vissit) company: Paradigma Tecnologico (@paradigmate)
- /
- $.fn.eventCalendar = function(options){
var eventsOpts = $.extend({}, $.fn.eventCalendar.defaults, options);
// define global vars for the function var flags = { wrap: "", directionLeftMove: "300", eventsJson: {} }
// each eventCalendar will execute this function this.each(function(){
flags.wrap = $(this);
flags.wrap.addClass('eventCalendar-wrap').append("if (eventsOpts.eventsScrollable) { flags.wrap.find('.eventsCalendar-list-content').addClass('scrollable'); }
setCalendarWidth(); $(window).resize(function(){ setCalendarWidth(); }); //flags.directionLeftMove = flags.wrap.width();
// show current month dateSlider("current");
getEvents(eventsOpts.eventsLimit,false,false,false,false);
changeMonth();
flags.wrap.on('click','.eventsCalendar-day a',function(e){ //flags.wrap.find('.eventsCalendar-day a').live('click',function(e){ e.preventDefault(); var year = flags.wrap.attr('data-current-year'), month = flags.wrap.attr('data-current-month'), day = $(this).parent().attr('rel');
getEvents(false, year, month,day, "day"); }); flags.wrap.on('click','.monthTitle', function(e){ //flags.wrap.find('.monthTitle').live('click',function(e){ e.preventDefault(); var year = flags.wrap.attr('data-current-year'), month = flags.wrap.attr('data-current-month');
getEvents(eventsOpts.eventsLimit, year, month,false, "month"); })
});
// show event description flags.wrap.find('.eventsCalendar-list').on('click','.eventTitle',function(e){ //flags.wrap.find('.eventsCalendar-list .eventTitle').live('click',function(e){ if(!eventsOpts.showDescription) { e.preventDefault(); var desc = $(this).parent().find('.eventDesc');
if (!desc.find('a').size()) { var eventUrl = $(this).attr('href'); var eventTarget = $(this).attr('target');
// create a button to go to event url // desc.append('<a href="' + eventUrl + '" target="'+eventTarget+'" class="bt">'+eventsOpts.txt_GoToEventUrl+'</a>') }
if (desc.is(':visible')) { desc.slideUp(); } else { if(eventsOpts.onlyOneDescription) { flags.wrap.find('.eventDesc').slideUp(); } desc.slideDown(); }
} });
function sortJson(a, b){ return a.date.toLowerCase() > b.date.toLowerCase() ? 1 : -1; };
function dateSlider(show, year, month) {
var $eventsCalendarSlider = $(""), $eventsCalendarMonthWrap = $(""), $eventsCalendarTitle = $("$eventsCalendarArrows = $("<a href='#' class='arrow prev'>" + eventsOpts.txt_prev + "</a><a href='#' class='arrow next'>" + eventsOpts.txt_next + "</a>");
$eventsCalendarDaysList = $("date = new Date();
if (!flags.wrap.find('.eventsCalendar-slider').size()) { flags.wrap.prepend($eventsCalendarSlider); $eventsCalendarSlider.append($eventsCalendarMonthWrap); } else { flags.wrap.find('.eventsCalendar-slider').append($eventsCalendarMonthWrap); }
flags.wrap.find('.eventsCalendar-monthWrap.currentMonth').removeClass('currentMonth').addClass('oldMonth'); $eventsCalendarMonthWrap.addClass('currentMonth').append($eventsCalendarTitle, $eventsCalendarDaysList);
// if current show current month & day if (show === "current") { day = date.getDate(); $eventsCalendarSlider.append($eventsCalendarArrows);
} else { date = new Date(flags.wrap.attr('data-current-year'),flags.wrap.attr('data-current-month'),1,0,0,0); // current visible month day = 0; // not show current day in days list
moveOfMonth = 1; if (show === "prev") { moveOfMonth = -1; } date.setMonth( date.getMonth() + moveOfMonth );
var tmpDate = new Date(); if (date.getMonth() === tmpDate.getMonth()) { day = tmpDate.getDate(); }
}
// get date portions var year = date.getFullYear(), // year of the events currentYear = (new Date).getFullYear(), // current year month = date.getMonth(), // 0-11 monthToShow = month + 1;
if (show != "current") { // month change getEvents(eventsOpts.eventsLimit, year, month,false, show); }
flags.wrap.attr('data-current-month',month) .attr('data-current-year',year);
// add current date info $eventsCalendarTitle.find('.monthTitle').html(eventsOpts.monthNames[month] + " " + year);
// print all month days var daysOnTheMonth = 32 - new Date(year, month, 32).getDate(); var daysList = []; if (eventsOpts.showDayAsWeeks) { $eventsCalendarDaysList.addClass('showAsWeek');
// show day name in top of calendar if (eventsOpts.showDayNameInCalendar) { $eventsCalendarDaysList.addClass('showDayNames');
var i = 0; // if week start on monday if (eventsOpts.startWeekOnMonday) { i = 1; }
for (; i < 7; i++) {
daysList.push('' + event.description + '
</li>');i++; } } }
// add mark in the dayList to the days with events if (eventYear == flags.wrap.attr('data-current-year') && eventMonth == flags.wrap.attr('data-current-month')) { flags.wrap.find('.currentMonth .eventsCalendar-daysList #dayList_' + parseInt(eventDay)).addClass('dayWithEvents'); }
}); } // there is no events on this period if (!events.length) {
events.push('' + eventsOpts.txt_noEvents + '
</li>');} flags.wrap.find('.eventsCalendar-loading').hide();
flags.wrap.find('.eventsCalendar-list') .html(events.join());
flags.wrap.find('.eventsCalendar-list').animate({ opacity: 1, height: "toggle" }, eventsOpts.moveSpeed);
});
setCalendarWidth();
}
function changeMonth() { flags.wrap.find('.arrow').click(function(e){ e.preventDefault();
if ($(this).hasClass('next')) { dateSlider("next"); var lastMonthMove = '-=' + flags.directionLeftMove;
} else { dateSlider("prev"); var lastMonthMove = '+=' + flags.directionLeftMove; }
flags.wrap.find('.eventsCalendar-monthWrap.oldMonth').animate({ opacity: eventsOpts.moveOpacity, left: lastMonthMove }, eventsOpts.moveSpeed, function() { flags.wrap.find('.eventsCalendar-monthWrap.oldMonth').remove(); }); }); }
function showError(msg) { flags.wrap.find('.eventsCalendar-list-wrap').html(""+msg+" " +eventsOpts.eventsjson+""); }
function setCalendarWidth(){ // resize calendar width on window resize flags.directionLeftMove = flags.wrap.width(); flags.wrap.find('.eventsCalendar-monthWrap').width(flags.wrap.width() + 'px');
flags.wrap.find('.eventsCalendar-list-wrap').width(flags.wrap.width() + 'px');
} };
// define the parameters with the default values of the function
$.fn.eventCalendar.defaults = {
eventsjson: 'js/events.json',
eventsLimit: 4, monthNames: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], dayNames: [ 'Sunday','Monday','Tuesday','Wednesday', 'Thursday','Friday','Saturday' ], dayNamesShort: [ 'Sun','Mon','Tue','Wed', 'Thu','Fri','Sat' ], txt_noEvents: "There are no events in this period", txt_SpecificEvents_prev: "", txt_SpecificEvents_after: "events:", txt_next: "next", txt_prev: "prev", txt_NextEvents: "Next events:", txt_GoToEventUrl: "See the event", showDayAsWeeks: true, startWeekOnMonday: true, showDayNameInCalendar: true, showDescription: false, onlyOneDescription: true, openEventInNewWindow: false, eventsScrollable: false, jsonDateFormat: 'timestamp', // you can use also "human" 'YYYY-MM-DD HH:MM:SS' moveSpeed: 500, // speed of month move when you clic on a new date moveOpacity: 0.15, // month and events fadeOut to this opacity jsonData: "", // to load and inline json (not ajax calls) cacheJson: true // if true plugin get a json only first time and after plugin filter events // if false plugin get a new json on each date change };