aboutsummaryrefslogtreecommitdiffstats
path: root/lib/caldav/resources/calendar.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/caldav/resources/calendar.js')
-rw-r--r--lib/caldav/resources/calendar.js84
1 files changed, 73 insertions, 11 deletions
diff --git a/lib/caldav/resources/calendar.js b/lib/caldav/resources/calendar.js
index fd921cb..a17c5c4 100644
--- a/lib/caldav/resources/calendar.js
+++ b/lib/caldav/resources/calendar.js
@@ -14,60 +14,122 @@
options = {};
}
+ if (options.url) {
+ this.url = options.url;
+ }
+
this.updateFromServer(options);
}
Calendar.prototype = {
+ _map: {
+ 'displayname': 'name',
+
+ 'calendar-color': 'color',
+
+ 'calendar-description': 'description',
+
+ 'getctag': 'ctag',
+
+ 'resourcetype': {
+ field: 'resourcetype',
+ defaults: []
+ },
+
+ 'current-user-privilege-set': {
+ field: 'privilegeSet',
+ defaults: []
+ }
+
+ },
+
/**
* location of calendar resource
*/
url: null,
/**
- * color of calendar as defined by ical spec
- */
- color: null,
-
- /**
* displayname as defined by webdav spec
+ * Maps to: displayname
*/
name: null,
/**
- * description of calendar as described by caldav spec
+ * color of calendar as defined by ical spec
+ * Maps to: calendar-color
*/
- description: null,
+ color: null,
/**
- * Available ical components (like VEVENT)
- * @type Array
+ * description of calendar as described by caldav spec
+ * Maps to: calendar-description
*/
- componentSet: null,
+ description: null,
/**
* change tag (as defined by calendarserver spec)
* used to determine if a change has occurred to this
* calendar resource.
+ *
+ * Maps to: getctag
*/
ctag: null,
/**
* Resource types of this resource will
* always contain 'calendar'
+ *
+ * Maps to: resourcetype
+ *
* @type Array
*/
resourcetype: null,
/**
* Set of privileges available to the user.
+ *
+ * Maps to: current-user-privilege-set
*/
privilegeSet: null,
/**
* Updates calendar details from server.
*/
- updateFromServer: function() {
+ updateFromServer: function(options) {
+ var key;
+ var defaultTo;
+ var mapName;
+ var value;
+ var descriptor;
+
+ if (typeof(options) === 'undefined') {
+ options = {};
+ }
+
+ for (key in options) {
+ if (options.hasOwnProperty(key)) {
+ if (key in this._map) {
+ descriptor = this._map[key];
+ value = options[key];
+
+ if (typeof(descriptor) === 'object') {
+ defaultTo = descriptor.defaults;
+ mapName = descriptor.field;
+ } else {
+ defaultTo = '';
+ mapName = descriptor;
+ }
+
+ if (value.status !== '200') {
+ this[mapName] = defaultTo;
+ } else {
+ this[mapName] = value.value;
+ }
+
+ }
+ }
+ }
},
/**