diff --git a/modules/parse.js b/modules/parse.js index 5439da3..ac2f3fb 100644 --- a/modules/parse.js +++ b/modules/parse.js @@ -1,14 +1,15 @@ var mimetypes = { - xml: 'application/xml', + xml: 'application/xml', html: 'text/html', - svg: 'image/svg+xml' + svg: 'image/svg+xml' }; function parse(type, string) { if (!string) { return; } - var mimetype = mimetypes[type.toLowerCase()]; + // Accept 'svg' or 'SVG' or 'image/svg+xml' + var mimetype = mimetypes[type.toLowerCase()] || type; var xml; // Cludged from jQuery source... diff --git a/modules/request.js b/modules/request.js index bb6ea34..29d8155 100644 --- a/modules/request.js +++ b/modules/request.js @@ -1,8 +1,8 @@ import choose from '../../fn/modules/choose.js'; import id from '../../fn/modules/id.js'; -import create from './create.js'; -import { parseHTML } from './parse.js'; +import create from './create.js'; +import { parseHTML, parseSVG } from './parse.js'; const assign = Object.assign; @@ -195,15 +195,30 @@ function respondText(response) { function respondDOM(response) { return response.text().then((text) => ( + // Is it a document? /^\s*/.test(text) ? parseHTML(text) : create('fragment', text) )); } +function respondSVG(response) { + return response.text().then((text) => ( + // Is it a document? + /^\s*<\?xml/.test(text) ? + parseSVG(text) : + // TODO: untested, don't know if this works on partial SVG + // fragments, I think probably not, I think we need to maybe + // make a instead. You have been warned. + (console.warn('Untested SVG fragment parsing in request.js!'), + create('fragment', text)) + )); +} + const responders = { 'text/plain': respondText, 'text/html': respondDOM, + 'image/svg+xml': respondSVG, 'application/json': respondJSON, 'multipart/form-data': respondForm, 'application/x-www-form-urlencoded': respondForm, @@ -232,6 +247,10 @@ function respond(response) { } const mimetype = contentType.replace(/\;.*$/, ''); + if (window.DEBUG && !responders[mimetype]) { + console.warn('request() has no built-in response parser for mimetype "' + mimetype + '"'); + } + return responders[mimetype](response); }