Plato on Github
Report Home
dojo/request/handlers.js
Maintainability
69.90
Lines of code
98
Difficulty
23.68
Estimated Errors
0.63
Function weight
By Complexity
By SLOC
define([ '../json', '../_base/kernel', '../_base/array', '../has', '../has!dom?../selector/_loader' // only included for has() qsa tests ], function(JSON, kernel, array, has){ has.add('activex', typeof ActiveXObject !== 'undefined'); has.add('dom-parser', function(global){ return 'DOMParser' in global; }); var handleXML; if(has('activex')){ // GUIDs obtained from http://msdn.microsoft.com/en-us/library/ms757837(VS.85).aspx var dp = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.4.0', 'MSXML2.DOMDocument.3.0', 'MSXML.DOMDocument' // 2.0 ]; var lastParser; handleXML = function(response){ var result = response.data; var text = response.text; if(result && has('dom-qsa2.1') && !result.querySelectorAll && has('dom-parser')){ // http://bugs.dojotoolkit.org/ticket/15631 // IE9 supports a CSS3 querySelectorAll implementation, but the DOM implementation // returned by IE9 xhr.responseXML does not. Manually create the XML DOM to gain // the fuller-featured implementation and avoid bugs caused by the inconsistency result = new DOMParser().parseFromString(text, 'application/xml'); } function createDocument(p) { try{ var dom = new ActiveXObject(p); dom.async = false; dom.loadXML(text); result = dom; lastParser = p; }catch(e){ return false; } return true; } if(!result || !result.documentElement){ // The creation of an ActiveX object is expensive, so we cache the // parser type to avoid trying all parser types each time we handle a // document. There is some concern that some parser types might fail // depending on the document being parsed. If parsing using the cached // parser type fails, we do the more expensive operation of finding one // that works for the given document. // https://bugs.dojotoolkit.org/ticket/15246 if(!lastParser || !createDocument(lastParser)) { array.some(dp, createDocument); } } return result; }; } var handleNativeResponse = function(response) { if(!has('native-xhr2-blob') && response.options.handleAs === 'blob' && typeof Blob !== 'undefined'){ return new Blob([ response.xhr.response ], { type: response.xhr.getResponseHeader('Content-Type') }); } return response.xhr.response; } var handlers = { 'javascript': function(response){ return kernel.eval(response.text || ''); }, 'json': function(response){ return JSON.parse(response.text || null); }, 'xml': handleXML, 'blob': handleNativeResponse, 'arraybuffer': handleNativeResponse, 'document': handleNativeResponse }; function handle(response){ var handler = handlers[response.options.handleAs]; response.data = handler ? handler(response) : (response.data || response.text); return response; } handle.register = function(name, handler){ handlers[name] = handler; }; return handle; });