diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/webcals/request/abstract.js | 65 | ||||
-rw-r--r-- | lib/webcals/xhr.js | 2 |
2 files changed, 65 insertions, 2 deletions
diff --git a/lib/webcals/request/abstract.js b/lib/webcals/request/abstract.js index 7d31540..fe47de9 100644 --- a/lib/webcals/request/abstract.js +++ b/lib/webcals/request/abstract.js @@ -1,9 +1,72 @@ (function(module, ns) { - function Abstract() { + var SAX = ns.require('sax'); + var XHR = ns.require('xhr'); + + /** + * Creates an (Web/Cal)Dav request. + * + * @param {String} url location of resource. + * @param {Object} options additional options for request. + */ + function Abstract(url, options) { + var key; + + if (typeof(url) === 'undefined' || !url) { + throw new Error('request requires a url'); + } + + this.url = url; + this.sax = new SAX(); + + for (key in options) { + if (options.hasOwnProperty(key)) { + this[key] = options[key]; + } + } } + Abstract.prototype = { + + _createXhr: function() { + return new XHR({ + url: this.url + }); + }, + + _createPayload: function() { + return ''; + }, + + /** + * Sends request to server. + * + * @param {Function} callback node style callback. + * Receives three arguments + * error, parsedData, xhr. + */ + send: function(callback) { + var self = this; + var req = this.xhr = this._createXhr(); + req.data = this._createPayload(); + + // in the future we may stream data somehow + req.send(function xhrResult() { + var xhr = req.xhr; + if (xhr.status > 199 && xhr.status < 300) { + // success + self.sax.write(xhr.responseText).close(); + + callback(null, self.sax.root, req); + } else { + // fail + callback(new Error('http error code: ' + xhr.status)); + } + }); + } + }; + module.exports = Abstract; }.apply( diff --git a/lib/webcals/xhr.js b/lib/webcals/xhr.js index f049c3f..f20415f 100644 --- a/lib/webcals/xhr.js +++ b/lib/webcals/xhr.js @@ -92,7 +92,7 @@ if (xhr.readyState === 4) { data = xhr.responseText; this.waiting = false; - callback(data, xhr); + callback(null, xhr); } }.bind(this); |