I have been working to create a dojo based calendar which can show events in a way similar to google calendar. After searching the web with no results and starting working on my own I found by chance this wonderful tutorial on how to create a dojo calendar.

This only shows how to load the calendar entries from an external XML format (trimmed down format similar to google calendar).

<feed><br></br>    <entry><br></br>        <id>1</id><br></br>        <title>energomontaj IEA 19225</title><br></br>        <summary>When: 2007-07-11T10:00:00 60</summary><br></br>        <content>Intalnire de prezentare energomontaj</content><br></br>        <link href="https://devel.nemesisit.ro/crm/vanzari?service=external/DetaliiClient&amp;sp=l19225" /><br></br>    </entry><br></br><br></br>    <entry><br></br>        <id>2</id><br></br>        <title>americlean, 19841</title><br></br>        <summary>When: 2007-07-12T11:00:00 30</summary><br></br>        <content>Prezentare telefonica</content><br></br>        <link href="https://devel.nemesisit.ro/crm/vanzari?service=external/DetaliiClient&amp;sp=l19841" /><br></br>    </entry><br></br><br></br>    <entry><br></br>        <id>3</id><br></br>        <title>BK technical systems 19077</title><br></br>        <summary>When: 2007-07-14T10:00:00 30</summary><br></br>        <content>Prezentare comerciala</content><br></br>        <link href="https://devel.nemesisit.ro/crm/vanzari?service=external/DetaliiClient&amp;sp=l9077" /><br></br>    </entry><br></br></feed><br></br>

All it took was to modify the widgetValueChanged function:

...<br></br><script language="JavaScript" type="text/javascript"><br></br>			// Dojo configuration<br></br>			djConfig = {<br></br>				isDebug: true,debugContainerId: "dojoDebug"<br></br>			};<br></br>		</script><br></br>		<script language="JavaScript" type="text/javascript" <br></br>			src="dojo/dojo.js"></script><br></br>		<script language="JavaScript" type="text/javascript"><br></br>			dojo.require("dojo.io.*");<br></br>			dojo.require("dojo.xml.*");<br></br>			dojo.require("dojo.string");<br></br>			dojo.require("dojo.date.serialize");<br></br>			dojo.require("dojo.json");<br></br><br></br>			dojo.require("mywidgets.widget.Calendar");<br></br>...<br></br><br></br>function widgetValueChanged(dateObj){<br></br>	dojo.io.bind({<br></br>		url: "calendar.xml",<br></br>		mimetype: "text/xml",<br></br>		load: function(type, xml, e) {<br></br>			var entries = xml.getElementsByTagName("entry");<br></br>			var calEntries = new Object;<br></br>			for(var e=0;e<entries.length;e++){<br></br>				entry = entries.item(e);<br></br>				var id = dojo.string.trim(entry.getElementsByTagName("id")[0].firstChild.nodeValue);<br></br>				var title = dojo.string.trim(entry.getElementsByTagName("title")[0].firstChild.nodeValue);<br></br>				var body = dojo.string.trim(entry.getElementsByTagName("content")[0].firstChild.nodeValue);<br></br>				var dateString = dojo.string.trim(entry.getElementsByTagName("summary")[0].firstChild.nodeValue);						   <br></br>				datePart = dateString.substring(6,25);<br></br>				var eDate = dojo.date.fromIso8601(datePart);<br></br>				var durationString = dojo.string.trim(dateString.substring(26));<br></br>				var endDate = dojo.date.add(eDate, dojo.date.dateParts.MINUTE, parseInt(durationString));<br></br>						    <br></br>				var link = entry.getElementsByTagName("link")[0].attributes.getNamedItem("href").value;<br></br>				//dojo.debug("id: " + id + ", title: " + title + ", date: " + eDate + ", endDate: " + endDate + ", link: " + link);<br></br>				var calEntry = new Object;<br></br>				calEntry.starttime = dojo.date.toRfc3339(eDate);<br></br>				calEntry.endtime = dojo.date.toRfc3339(endDate);<br></br>				calEntry.allday = false;<br></br>				calEntry.repeated = false;<br></br>				calEntry.title = title;<br></br>				calEntry.url = link;<br></br>				calEntry.body = body;<br></br>				calEntry.attributes = "";<br></br>				calEntry.type = ["reminder"];<br></br>				calEntries[id] = calEntry;<br></br>	    <br></br>			}<br></br>			//dojo.debug(dojo.json.serialize(calEntries));<br></br>			oCalendar.setCalendarEntries(calEntries);<br></br>		}<br></br>	});<br></br>}<br></br>

This is not an optimal handling as the xml is loaded each time with all the entries but it’s ok for now.