diff options
author | James Lal <james@lightsofapollo.com> | 2012-10-02 23:27:19 -0700 |
---|---|---|
committer | James Lal <james@lightsofapollo.com> | 2012-10-02 23:27:19 -0700 |
commit | 13966ebe577c18436332923fb367a3f6ab7b288e (patch) | |
tree | 2e92f1083cfc7ce43c95ff207d7ea79944a98081 /lib/caldav | |
parent | da93e0810d194a2b484f89e0bb4b121e41ad5c0c (diff) | |
download | jsCalDAV-13966ebe577c18436332923fb367a3f6ab7b288e.tar.gz |
replace templates with much improved query/filter interface. Update CalendarQuery to reflect these changes
Diffstat (limited to 'lib/caldav')
-rw-r--r-- | lib/caldav/index.js | 2 | ||||
-rw-r--r-- | lib/caldav/request/calendar_query.js | 24 | ||||
-rw-r--r-- | lib/caldav/templates/calendar_data.js | 115 | ||||
-rw-r--r-- | lib/caldav/templates/calendar_filter.js | 32 | ||||
-rw-r--r-- | lib/caldav/templates/index.js | 13 |
5 files changed, 17 insertions, 169 deletions
diff --git a/lib/caldav/index.js b/lib/caldav/index.js index 4dd6852..cdce101 100644 --- a/lib/caldav/index.js +++ b/lib/caldav/index.js @@ -5,9 +5,9 @@ exports.Responder = ns.require('responder'); exports.Sax = ns.require('sax'); exports.Template = ns.require('template'); + exports.QueryBuilder = ns.require('query_builder'); exports.Xhr = ns.require('xhr'); exports.Request = ns.require('request'); - exports.Templates = ns.require('templates'); exports.Connection = ns.require('connection'); exports.Resources = ns.require('resources'); diff --git a/lib/caldav/request/calendar_query.js b/lib/caldav/request/calendar_query.js index 6ee1ec4..0d48788 100644 --- a/lib/caldav/request/calendar_query.js +++ b/lib/caldav/request/calendar_query.js @@ -1,8 +1,7 @@ (function(module, ns) { var Propfind = ns.require('request/propfind'); - var CalendarData = ns.require('templates/calendar_data'); - var CalendarFilter = ns.require('templates/calendar_filter'); + var Builder = ns.require('query_builder'); /** * Creates a calendar query request. @@ -17,10 +16,19 @@ this.xhr.headers['Depth'] = this.depth || 1; this.xhr.method = 'REPORT'; - this.fields = new CalendarData(); - this.filters = new CalendarFilter(); this.template.rootTag = ['caldav', 'calendar-query']; + + this.data = new Builder({ + template: this.template + }); + + this.filter = new Builder({ + template: this.template, + tag: ['caldav', 'filter'], + propTag: ['caldav', 'prop-filter'], + compTag: ['caldav', 'comp-filter'] + }); } CalendarQuery.prototype = { @@ -32,14 +40,14 @@ props = this._props.join(''); - if (this.fields) { - props += this.fields.render(this.template); + if (this.data) { + props += this.data.toString(); } content = this.template.tag('prop', props); - if (this.filters) { - content += this.filters.render(this.template); + if (this.filter) { + content += this.filter.toString(); } return this.template.render(content); diff --git a/lib/caldav/templates/calendar_data.js b/lib/caldav/templates/calendar_data.js deleted file mode 100644 index 5fcc4e8..0000000 --- a/lib/caldav/templates/calendar_data.js +++ /dev/null @@ -1,115 +0,0 @@ -(function(module, ns) { - - function CalendarData() { - this._hasItems = false; - this.struct = {}; - } - - CalendarData.prototype = { - - rootName: 'calendar-data', - compName: 'comp', - propName: 'prop', - - /** - * Appends a list of fields - * to a given iCalendar field set. - * - * @param {String} type iCal fieldset (VTODO, VEVENT,...). - */ - select: function(type, list) { - if (typeof(list) === 'undefined') { - list = true; - } - - var struct = this.struct; - this._hasItems = true; - - if (!(type in struct)) { - struct[type] = []; - } - - if (list instanceof Array) { - struct[type] = struct[type].concat(list); - } else { - struct[type] = list; - } - - return this; - }, - - /** - * Accepts an object full of arrays - * recuse when encountering another object. - */ - _renderFieldset: function(template, element) { - var tag; - var value; - var i; - var output = ''; - var elementOutput = ''; - - for (tag in element) { - value = element[tag]; - for (i = 0; i < value.length; i++) { - if (typeof(value[i]) === 'object') { - elementOutput += this._renderFieldset( - template, - value[i] - ); - } else { - elementOutput += template.tag( - ['caldav', this.propName], - { name: value[i] } - ); - } - } - output += template.tag( - ['caldav', this.compName], - { name: tag }, - elementOutput || null - ); - elementOutput = ''; - } - - return output; - }, - - _defaultRender: function(template) { - return template.tag(['caldav', this.rootName]); - }, - - /** - * Renders CalendarData with a template. - * - * @param {WebCals.Template} template calendar to render. - * @return {String} <calendardata /> xml output. - */ - render: function(template) { - if (!this._hasItems) { - return this._defaultRender(template); - } - - var struct = this.struct; - var output = template.tag( - ['caldav', this.rootName], - template.tag( - ['caldav', this.compName], - { name: 'VCALENDAR' }, - this._renderFieldset(template, struct) - ) - ); - - return output; - } - }; - - - module.exports = CalendarData; - -}.apply( - this, - (this.Caldav) ? - [Caldav('templates/calendar_data'), Caldav] : - [module, require('../caldav')] -)); diff --git a/lib/caldav/templates/calendar_filter.js b/lib/caldav/templates/calendar_filter.js deleted file mode 100644 index a16f985..0000000 --- a/lib/caldav/templates/calendar_filter.js +++ /dev/null @@ -1,32 +0,0 @@ -(function(module, ns) { - - var CalendarData = ns.require('templates/calendar_data'); - - function CalendarFilter() { - CalendarData.call(this); - } - - CalendarFilter.prototype = { - - __proto__: CalendarData.prototype, - - add: CalendarData.prototype.select, - - _defaultRender: function(template) { - var inner = this._renderFieldset(template, { VCALENDAR: [{ VEVENT: true }] }); - return template.tag(['caldav', this.rootName], inner); - }, - - compName: 'comp-filter', - rootName: 'filter' - }; - - module.exports = CalendarFilter; - -}.apply( - this, - (this.Caldav) ? - [Caldav('templates/calendar_filter'), Caldav] : - [module, require('../caldav')] -)); - diff --git a/lib/caldav/templates/index.js b/lib/caldav/templates/index.js deleted file mode 100644 index 4e06cfd..0000000 --- a/lib/caldav/templates/index.js +++ /dev/null @@ -1,13 +0,0 @@ -(function(module, ns) { - - module.exports = { - CalendarData: ns.require('templates/calendar_data'), - CalendarFilter: ns.require('templates/calendar_filter') - }; - -}.apply( - this, - (this.Caldav) ? - [Caldav('templates'), Caldav] : - [module, require('../caldav')] -)); |