UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

99 lines (84 loc) 2.92 kB
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; });