aboutsummaryrefslogtreecommitdiffstats
path: root/lib/caldav/request/propfind.js
diff options
context:
space:
mode:
authorJames Lal <james@lightsofapollo.com>2012-07-06 08:13:15 -0700
committerJames Lal <james@lightsofapollo.com>2012-07-06 08:13:15 -0700
commit20711f003e97a4a57d1e2838ba78a994c5faf6c0 (patch)
treeb060e5de05a9ffefc2ec836469c087fffa99dcef /lib/caldav/request/propfind.js
parentc8e85fe1e0a1d2e15df580068244324ff536a23a (diff)
downloadjsCalDAV-20711f003e97a4a57d1e2838ba78a994c5faf6c0.tar.gz
webcals -> caldav rename (yes, back again)
Diffstat (limited to 'lib/caldav/request/propfind.js')
-rw-r--r--lib/caldav/request/propfind.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/caldav/request/propfind.js b/lib/caldav/request/propfind.js
new file mode 100644
index 0000000..7202ea5
--- /dev/null
+++ b/lib/caldav/request/propfind.js
@@ -0,0 +1,69 @@
+(function(module, ns) {
+
+ var Abstract = ns.require('request/abstract'),
+ Template = ns.require('template'),
+ DavResponse = ns.require('sax/dav_response');
+
+ /**
+ * Creates a propfind request.
+ *
+ * @param {String} url location to make request.
+ * @param {Object} options options for propfind.
+ */
+ function Propfind(url, options) {
+ Abstract.apply(this, arguments);
+
+ this.template = new Template('propfind');
+ this._props = [];
+ this.sax.registerHandler(
+ 'DAV:/response',
+ DavResponse
+ );
+
+ this.xhr.headers['Depth'] = this.depth;
+ this.xhr.method = 'PROPFIND';
+ }
+
+ Propfind.prototype = {
+ __proto__: Abstract.prototype,
+
+ depth: 0,
+
+ /**
+ * Adds property to request.
+ *
+ * @param {String|Array} tagDesc tag description.
+ * @param {Object} [attr] optional tag attrs.
+ * @param {Obj} [content] optional content.
+ */
+ prop: function(tagDesc, attr, content) {
+ this._props.push(this.template.tag(tagDesc, attr, content));
+ },
+
+ _createPayload: function() {
+ var content = this.template.tag('prop', this._props.join(''));
+ return this.template.render(content);
+ },
+
+ _processResult: function(req, callback) {
+ if ('multistatus' in this.sax.root) {
+ callback(null, this.sax.root.multistatus, req);
+ } else {
+ //XXX: Improve error handling
+ callback(
+ new Error('unexpected xml result'),
+ this.sax.root, req
+ );
+ }
+ }
+
+ };
+
+ module.exports = Propfind;
+
+}.apply(
+ this,
+ (this.Caldav) ?
+ [Caldav('request/propfind'), Caldav] :
+ [module, require('../caldav')]
+));