X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/c930e9176a5a85509c5b0230e2bff5c22a591432..25ef3491bd9ae007ff1fc2b0d7943e6eaaccf775:/src/adapter/prototype-bridge.js diff --git a/src/adapter/prototype-bridge.js b/src/adapter/prototype-bridge.js index 4866ae0d..11c7d167 100644 --- a/src/adapter/prototype-bridge.js +++ b/src/adapter/prototype-bridge.js @@ -1,5 +1,5 @@ /*! - * Ext JS Library 3.0.0 + * Ext JS Library 3.0.3 * Copyright(c) 2006-2009 Ext JS, LLC * licensing@extjs.com * http://www.extjs.com/license @@ -10,34 +10,13 @@ var libFlyweight, version = Prototype.Version.split('.'), mouseEnterSupported = (parseInt(version[0]) >= 2) || (parseInt(version[1]) >= 7) || (parseInt(version[2]) >= 1), mouseCache = {}, - isXUL = Ext.isGecko ? function(node){ - return Object.prototype.toString.call(node) == '[object XULElement]'; - } : function(){}, - isTextNode = Ext.isGecko ? function(node){ - try{ - return node.nodeType == 3; - }catch(e) { - return false; - } - - } : function(node){ - return node.nodeType == 3; - }, elContains = function(parent, child) { if(parent && parent.firstChild){ while(child) { if(child === parent) { return true; } - try { - child = child.parentNode; - } catch(e) { - // In FF if you mouseout an text input element - // thats inside a div sometimes it randomly throws - // Permission denied to get property HTMLDivElement.parentNode - // See https://bugzilla.mozilla.org/show_bug.cgi?id=208427 - return false; - } + child = child.parentNode; if(child && (child.nodeType != 1)) { child = null; } @@ -46,8 +25,7 @@ var libFlyweight, return false; }, checkRelatedTarget = function(e) { - var related = Ext.lib.Event.getRelatedTarget(e); - return !(isXUL(related) || elContains(e.currentTarget,related)); + return !elContains(e.currentTarget, pub.getRelatedTarget(e)); }; Ext.lib.Dom = { @@ -95,27 +73,22 @@ Ext.lib.Dom = { }, isAncestor : function(p, c){ // missing from prototype? + var ret = false; + p = Ext.getDom(p); c = Ext.getDom(c); - if (!p || !c) {return false;} - - if(p.contains && !Ext.isSafari) { - return p.contains(c); - }else if(p.compareDocumentPosition) { - return !!(p.compareDocumentPosition(c) & 16); - }else{ - var parent = c.parentNode; - while (parent) { - if (parent == p) { - return true; - } - else if (!parent.tagName || parent.tagName.toUpperCase() == "HTML") { - return false; + if (p && c) { + if (p.contains) { + return p.contains(c); + } else if (p.compareDocumentPosition) { + return !!(p.compareDocumentPosition(c) & 16); + } else { + while (c = c.parentNode) { + ret = c == p || ret; } - parent = parent.parentNode; - } - return false; - } + } + } + return ret; }, getRegion : function(el){ @@ -238,8 +211,17 @@ Ext.lib.Event = { return Event.element(e.browserEvent || e); }, - resolveTextNode: function(node) { - return node && !isXUL(node) && isTextNode(node) ? node.parentNode : node; + resolveTextNode: Ext.isGecko ? function(node){ + if(!node){ + return; + } + var s = HTMLElement.prototype.toString.call(node); + if(s == '[xpconnect wrapped native prototype]' || s == '[object XULElement]'){ + return; + } + return node.nodeType == 3 ? node.parentNode : node; + } : function(node){ + return node && node.nodeType == 3 ? node.parentNode : node; }, getRelatedTarget: function(ev) { // missing from prototype? @@ -325,22 +307,44 @@ Ext.lib.Event = { Ext.lib.Ajax = function(){ var createSuccess = function(cb){ return cb.success ? function(xhr){ - cb.success.call(cb.scope||window, { - responseText: xhr.responseText, - responseXML : xhr.responseXML, - argument: cb.argument - }); + cb.success.call(cb.scope||window, createResponse(cb, xhr)); } : Ext.emptyFn; }; var createFailure = function(cb){ return cb.failure ? function(xhr){ - cb.failure.call(cb.scope||window, { - responseText: xhr.responseText, - responseXML : xhr.responseXML, - argument: cb.argument - }); + cb.failure.call(cb.scope||window, createResponse(cb, xhr)); } : Ext.emptyFn; }; + var createResponse = function(cb, xhr){ + var headerObj = {}, + headerStr, + t, + s; + + try { + headerStr = xhr.getAllResponseHeaders(); + Ext.each(headerStr.replace(/\r\n/g, '\n').split('\n'), function(v){ + t = v.indexOf(':'); + if(t >= 0){ + s = v.substr(0, t).toLowerCase(); + if(v.charAt(t + 1) == ' '){ + ++t; + } + headerObj[s] = v.substr(t + 1); + } + }); + } catch(e) {} + + return { + responseText: xhr.responseText, + responseXML : xhr.responseXML, + argument: cb.argument, + status: xhr.status, + statusText: xhr.statusText, + getResponseHeader : function(header){return headerObj[header.toLowerCase()];}, + getAllResponseHeaders : function(){return headerStr} + }; + }; return { request : function(method, uri, cb, data, options){ var o = {