jQuery.fn.updateWithText = function(text, speed) { var dummy = $('
').html(text); if ($(this).html() != dummy.html()) { $(this).fadeOut(speed/2, function() { $(this).html(text); $(this).fadeIn(speed/2, function() { //done }); }); } } jQuery.fn.outerHTML = function(s) { return s ? this.before(s).remove() : jQuery("").append(this.eq(0).clone()).html(); }; function roundVal(temp) { return Math.round(temp * 10) / 10; } jQuery(document).ready(function($) { var news = []; var newsIndex = 0; var eventList = []; var lastCompliment; var compliment; moment.locale(config.lang); //connect do Xbee monitor // var socket = io.connect('http://rpi-alarm.local:8082'); // socket.on('dishwasher', function (dishwasherReady) { // if (dishwasherReady) { // $('.dishwasher').fadeIn(2000); // $('.lower-third').fadeOut(2000); // } else { // $('.dishwasher').fadeOut(2000); // $('.lower-third').fadeIn(2000); // } // }); (function checkVersion() { $.getJSON('githash.php', {}, function(json, textStatus) { if (json) { if (json.gitHash != gitHash) { window.location.reload(); window.location.href=window.location.href; } } }); setTimeout(function() { checkVersion(); }, 3000); })(); time.init(); (function updateCalendarData() { new ical_parser("calendar.php", function(cal){ events = cal.getEvents(); eventList = []; for (var i in events) { var e = events[i]; for (var key in e) { var value = e[key]; var seperator = key.search(';'); if (seperator >= 0) { var mainKey = key.substring(0,seperator); var subKey = key.substring(seperator+1); var dt; if (subKey == 'VALUE=DATE') { //date dt = new Date(value.substring(0,4), value.substring(4,6) - 1, value.substring(6,8)); } else { //time dt = new Date(value.substring(0,4), value.substring(4,6) - 1, value.substring(6,8), value.substring(9,11), value.substring(11,13), value.substring(13,15)); } if (mainKey == 'DTSTART') e.startDate = dt; if (mainKey == 'DTEND') e.endDate = dt; } } if (e.startDate == undefined){ //some old events in Gmail Calendar is "start_date" //FIXME: problems with Gmail's TimeZone var days = moment(e.DTSTART).diff(moment(), 'days'); var seconds = moment(e.DTSTART).diff(moment(), 'seconds'); var startDate = moment(e.DTSTART); } else { var days = moment(e.startDate).diff(moment(), 'days'); var seconds = moment(e.startDate).diff(moment(), 'seconds'); var startDate = moment(e.startDate); } //only add fututre events, days doesn't work, we need to check seconds if (seconds >= 0) { if (seconds <= 60*60*5 || seconds >= 60*60*24*2) { var time_string = moment(startDate).fromNow(); }else { var time_string = moment(startDate).calendar() } if (!e.RRULE) { eventList.push({'description':e.SUMMARY,'seconds':seconds,'days':time_string}); } e.seconds = seconds; } // Special handling for rrule events if (e.RRULE) { var options = new RRule.parseString(e.RRULE); options.dtstart = e.startDate; var rule = new RRule(options); // TODO: don't use fixed end date here, use something like now() + 1 year var dates = rule.between(new Date(), new Date(2016,11,31), true, function (date, i){return i < 10}); for (date in dates) { var dt = new Date(dates[date]); var days = moment(dt).diff(moment(), 'days'); var seconds = moment(dt).diff(moment(), 'seconds'); var startDate = moment(dt); if (seconds >= 0) { if (seconds <= 60*60*5 || seconds >= 60*60*24*2) { var time_string = moment(dt).fromNow(); } else { var time_string = moment(dt).calendar() } eventList.push({'description':e.SUMMARY,'seconds':seconds,'days':time_string}); } } } }; eventList.sort(function(a,b){return a.seconds-b.seconds}); setTimeout(function() { updateCalendarData(); }, 60000); }); })(); (function updateCalendar() { table = $('