diff options
Diffstat (limited to 'lib/caldav/resources/calendar.js')
-rw-r--r-- | lib/caldav/resources/calendar.js | 84 |
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; + } + + } + } + } }, /** |