Skip to content

Instantly share code, notes, and snippets.

@shawntan
Created February 15, 2011 16:00
Show Gist options
  • Save shawntan/827699 to your computer and use it in GitHub Desktop.
Save shawntan/827699 to your computer and use it in GitHub Desktop.
Populates a div with events from a Google calendar.
var entries = 4;
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var re = /(-)?(\d{4})-(\d{2})-(\d{2})(T(\d{2}):(\d{2}):(\d{2})(\.\d+)?)?(([\+-])((\d{2}):(\d{2})))?/;
var cal_url = "http://www.google.com/calendar/feeds/"+
"mayflowerscout.org_slg49dbs6rt290ihtrq9oo8hm8@group.calendar.google.com/"+
"public/full?"+
"alt=json-in-script&"+
"callback=showEvents&"+
"orderby=starttime&"+
"max-results="+entries+"&"+
"singleevents=true&"+
"sortorder=ascending&"+
"futureevents=true";
var events;
function loadJS(url){
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
head.appendChild(script);
}
function call_on_load(func){
var temp;
if(window.onload) temp = window.onload;
window.onload = function(){
if(temp) temp();
func();
}
}
function parseTime(dateString) {
var matches = dateString.match(re);
if(matches[5]) return new Date(dateString.replace(re,'$3/$4/$2 $6:$7:$8 GMT$11$13$14'));
return new Date(dateString);
}
function formatEventTime(startTime,endTime,parentElement){
var d = document.createElement("div");
d.className = "event_date";
function dateFormatter(time){
return time.getDate() + " " + months[time.getMonth()];
}
start_day = startTime.getDate();
start_month = startTime.getMonth();
end_day = endTime.getDate();
end_month = endTime.getMonth();
d.innerHTML = dateFormatter(startTime);
if(start_month==end_month) {
if((end_day - start_day) > 1) {
d.innerHTML += " - " + dateFormatter(endTime);
}
}
parentElement.appendChild(d);
}
function showEvents(e){
evts = e.feed.entry;
var event_str = "";
events.removeChild(events.children[0]);
var ev;
for(var i=0;i<evts.length;i++) {
ev = evts[i];
var startTime = parseTime(ev.gd$when[0].startTime);
var endTime = parseTime(ev.gd$when[0].endTime);
var item = document.createElement("div");
item.className = "event_item";
formatEventTime(startTime,endTime,item);
var info = document.createElement("div");
info.className = "event_info";
var t = document.createElement("span");
t.className = "event_title";
t.innerHTML = ev.title.$t;
info.appendChild(t);
var l = document.createElement("span");
l.className = "event_where";
var matches = ev.gd$when[0].startTime.match(re);
if(matches[6]) {
l.innerHTML += matches[6] + matches[7] + "hrs";
}
if(ev.gd$where[0].valueString != "") {
l.innerHTML += " @ "+ ev.gd$where[0].valueString;
}
info.appendChild(l);
item.appendChild(info);
events.appendChild(item);
}
}
(function(){
call_on_load(function(){
loadJS(cal_url);
events = document.getElementById("calendar_events");
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment