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&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&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&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.