"; } else { /* in Firefox/other */ elementToUpdate.textContent = elementUpdateTemplate.textContent + "\n"; } document.getElementById('jsSourceFinal').style.display = 'block'; } /** * Adds a leading zero to a single-digit number. Used for displaying dates. * * @param {int} num is the number to add a leading zero, if less than 10 */ function padNumber(num) { if (num <= 9) { return "0" + num; } return num; } /** * Determines the full calendarUrl based upon the calendarAddress * argument and calls loadCalendar with the calendarUrl value. * * @param {string} calendarAddress is the email-style address for the calendar */ function loadCalendarByAddress(calendarAddress) { var calendarUrl = 'http://www.google.com/calendar/feeds/' + calendarAddress + '/public/full'; loadCalendar(calendarUrl); } /** * Uses Google data JS client library to retrieve a calendar feed from the specified * URL. The feed is controlled by several query parameters and a callback * function is called to process the feed results. * * @param {string} calendarUrl is the URL for a public calendar feed */ function loadCalendar(calendarUrl) { var D= new Date(); var Sun=new Date(D); var Mon=new Date(D); Sun.setDate(D.getDate()+(7 - D.getDay())); Sun.setHours(0,0,0,0); Mon.setDate(D.getDate()+(8 - D.getDay())); Mon.setHours(0,0,0,0); var service = new google.gdata.calendar.CalendarService('GoogleInc-jsguide-1.0'); var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl); query.setOrderBy('starttime'); query.setSortOrder('ascending'); // query.setFutureEvents(true); // query.setSingleEvents(true); query.setMaxResults(5); //var startMin = google.gdata.DateTime.fromIso8601('2009-12-13T00:00:00.000-08:00'); //var startMax = google.gdata.DateTime.fromIso8601('2009-12-14T00:00:00.000-08:00'); var TMZI=padNumber(D.getTimezoneOffset()/60); var TMZM=padNumber(D.getTimezoneOffset()%60); var YYYY=Sun.getFullYear(); var MM=padNumber(Sun.getMonth()+1); var DD=padNumber(Sun.getDate()); var startMin = google.gdata.DateTime.fromIso8601(YYYY+"-"+MM+"-"+DD+"T00:00:00.000-"+TMZI+":"+TMZM); YYYY=Mon.getFullYear(); MM=padNumber(Mon.getMonth()+1); DD=padNumber(Mon.getDate()); var startMax = google.gdata.DateTime.fromIso8601(YYYY+"-"+MM+"-"+DD+"T00:00:00.000-"+TMZI+":"+TMZM); query.setMinimumStartTime(startMin); query.setMaximumStartTime(startMax); //Sun=query.setMinimumStartTime(); //Mon=query.setMaximumStartTime(); //query.setMinimumStartTime(convertToGDataDate(Sun)); //query.setMaximumStartTime(convertToGDataDate(Mon)); service.getEventsFeed(query, listEvents, handleGDError); } /** * Callback function for the Google data JS client library to call when an error * occurs during the retrieval of the feed. Details available depend partly * on the web browser, but this shows a few basic examples. In the case of * a privileged environment using ClientLogin authentication, there may also * be an e.type attribute in some cases. * * @param {Error} e is an instance of an Error */ function handleGDError(e) { document.getElementById('jsSourceFinal').setAttribute('style', 'display:none'); if (e instanceof Error) { /* alert with the error line number, file and message */ alert('XXX Error at line ' + e.lineNumber + ' in ' + e.fileName + '\n' + 'Message: ' + e.message); /* if available, output HTTP error code and status text */ if (e.cause) { var status = e.cause.status; var statusText = e.cause.statusText; alert('YYY Root cause: HTTP error ' + status + ' with status text of: ' + statusText); } } else { alert(e.toString()); } } /** * Callback function for the Google data JS client library to call with a feed * of events retrieved. * * Creates an unordered list of events in a human-readable form. This list of * events is added into a div called 'events'. The title for the calendar is * placed in a div called 'calendarTitle' * * @param {json} feedRoot is the root of the feed, containing all entries */ function listEvents(feedRoot) { var D= new Date(); var Sun; Sun=new Date(D); Sun.setDate(D.getDate()+(7 - D.getDay())); //document.write ("Today:", D); //document.write ("-- This Sunday:", Sun); //document.writeln (" Day of Month:",Sun.getDate()); //document.write (" # days until Sunday:",7-D.getDay()); var entries = feedRoot.feed.getEntries(); var eventDiv = document.getElementById('events'); if (eventDiv.childNodes.length > 0) { eventDiv.removeChild(eventDiv.childNodes[0]); } /* create a new unordered list */ var ul = document.createElement('ul'); /* set the calendarTitle div with the name of the calendar */ document.getElementById('calendarTitle').innerHTML = "Calendar: " + feedRoot.feed.title.$t; document.getElementById('ThisSunday').innerHTML = Sun; /* loop through each event in the feed */ var len = entries.length; for (var i = 0; i < len; i++) { var entry = entries[i]; var title = entry.getTitle().getText(); var startDateTime = null; var startJSDate = null; var times = entry.getTimes(); var cont = entry.getContent().getText(); if (times.length > 0) { startDateTime = times[0].getStartTime(); startJSDate = startDateTime.getDate(); } var entryLinkHref = null; if (entry.getHtmlLink() != null) { entryLinkHref = entry.getHtmlLink().getHref(); } var dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate(); if (!startDateTime.isDateOnly()) { dateString += " " + startJSDate.getHours() + ":" + padNumber(startJSDate.getMinutes()); } var li = document.createElement('li'); /* if we have a link to the event, create an 'a' element */ if (entryLinkHref != null) { li.appendChild(document.createTextNode(dateString + ' ' + cont + ' - ')); entryLink = document.createElement('a'); entryLink.setAttribute('href', entryLinkHref); entryLink.appendChild(document.createTextNode(title)); li.appendChild(entryLink); } else { li.appendChild(document.createTextNode(dateString + ' ' + cont + ' - ' + title)); } /* append the list item onto the unordered list */ ul.appendChild(li); } eventDiv.appendChild(ul); } google.setOnLoadCallback(init); //-->