diff options
Diffstat (limited to 'core/vendor')
-rw-r--r-- | core/vendor/davclient.js/.bower.json | 13 | ||||
-rw-r--r-- | core/vendor/davclient.js/lib/client.js | 95 |
2 files changed, 83 insertions, 25 deletions
diff --git a/core/vendor/davclient.js/.bower.json b/core/vendor/davclient.js/.bower.json index 5ae36dac534..485af9e0885 100644 --- a/core/vendor/davclient.js/.bower.json +++ b/core/vendor/davclient.js/.bower.json @@ -1,6 +1,6 @@ { "name": "davclient.js", - "version": "0.0.1", + "version": "0.1.1", "authors": [ "Evert Pot <me@evertpot.com>" ], @@ -20,13 +20,14 @@ "test", "tests" ], - "_release": "0.0.1", + "_release": "0.1.1", "_resolution": { "type": "version", - "tag": "0.0.1", - "commit": "2d054c63ba5bf7f7d40de904a742f3ad9c71e63c" + "tag": "0.1.1", + "commit": "a2731f81540816b212c09d14596621cb070a4f10" }, "_source": "https://github.com/evert/davclient.js.git", - "_target": "*", - "_originalSource": "https://github.com/evert/davclient.js.git" + "_target": "0.1.1", + "_originalSource": "https://github.com/evert/davclient.js.git", + "_direct": true }
\ No newline at end of file diff --git a/core/vendor/davclient.js/lib/client.js b/core/vendor/davclient.js/lib/client.js index db1a1954aff..0fc3f61f9f6 100644 --- a/core/vendor/davclient.js/lib/client.js +++ b/core/vendor/davclient.js/lib/client.js @@ -1,3 +1,8 @@ +/* + * vim: expandtab shiftwidth=4 softtabstop=4 + */ + +/* global dav */ if (typeof dav == 'undefined') { dav = {}; }; dav._XML_CHAR_MAP = { @@ -100,10 +105,42 @@ dav.Client.prototype = { }, /** + * Renders a "d:set" block for the given properties. + * + * @param {Object.<String,String>} properties + * @return {String} XML "<d:set>" block + */ + _renderPropSet: function(properties) { + var body = ' <d:set>\n' + + ' <d:prop>\n'; + + for(var ii in properties) { + var property = this.parseClarkNotation(ii); + var propName; + var propValue = properties[ii]; + if (this.xmlNamespaces[property.namespace]) { + propName = this.xmlNamespaces[property.namespace] + ':' + property.name; + } else { + propName = 'x:' + property.name + ' xmlns:x="' + property.namespace + '"'; + } + + // FIXME: hard-coded for now until we allow properties to + // specify whether to be escaped or not + if (propName !== 'd:resourcetype') { + propValue = dav._escapeXml(propValue); + } + body += ' <' + propName + '>' + propValue + '</' + propName + '>\n'; + } + body +=' </d:prop>\n'; + body +=' </d:set>\n'; + return body; + }, + + /** * Generates a propPatch request. * * @param {string} url Url to do the proppatch request on - * @param {Array} properties List of properties to store. + * @param {Object.<String,String>} properties List of properties to store. * @param {Object} [headers] headers * @return {Promise} */ @@ -119,27 +156,48 @@ dav.Client.prototype = { for (namespace in this.xmlNamespaces) { body += ' xmlns:' + this.xmlNamespaces[namespace] + '="' + namespace + '"'; } - body += '>\n' + - ' <d:set>\n' + - ' <d:prop>\n'; + body += '>\n' + this._renderPropSet(properties); + body += '</d:propertyupdate>'; - for(var ii in properties) { + return this.request('PROPPATCH', url, headers, body).then( + function(result) { + return { + status: result.status, + body: result.body, + xhr: result.xhr + }; + }.bind(this) + ); - var property = this.parseClarkNotation(ii); - var propName; - var propValue = properties[ii]; - if (this.xmlNamespaces[property.namespace]) { - propName = this.xmlNamespaces[property.namespace] + ':' + property.name; - } else { - propName = 'x:' + property.name + ' xmlns:x="' + property.namespace + '"'; + }, + + /** + * Generates a MKCOL request. + * If attributes are given, it will use an extended MKCOL request. + * + * @param {string} url Url to do the proppatch request on + * @param {Object.<String,String>} [properties] list of properties to store. + * @param {Object} [headers] headers + * @return {Promise} + */ + mkcol : function(url, properties, headers) { + var body = ''; + headers = headers || {}; + headers['Content-Type'] = 'application/xml; charset=utf-8'; + + if (properties) { + body = + '<?xml version="1.0"?>\n' + + '<d:mkcol'; + var namespace; + for (namespace in this.xmlNamespaces) { + body += ' xmlns:' + this.xmlNamespaces[namespace] + '="' + namespace + '"'; } - body += ' <' + propName + '>' + dav._escapeXml(propValue) + '</' + propName + '>\n'; + body += '>\n' + this._renderPropSet(properties); + body +='</d:mkcol>'; } - body+=' </d:prop>\n'; - body+=' </d:set>\n'; - body+='</d:propertyupdate>'; - return this.request('PROPPATCH', url, headers, body).then( + return this.request('MKCOL', url, headers, body).then( function(result) { return { status: result.status, @@ -293,10 +351,9 @@ dav.Client.prototype = { var propStatNode = propStatIterator.iterateNext(); while(propStatNode) { - var propStat = { status : doc.evaluate('string(d:status)', propStatNode, resolver, XPathResult.ANY_TYPE, null).stringValue, - properties : [], + properties : {}, }; var propIterator = doc.evaluate('d:prop/*', propStatNode, resolver, XPathResult.ANY_TYPE, null); |