2 * Ext JS Library 2.2.1
\r
3 * Copyright(c) 2006-2009, Ext JS, LLC.
\r
4 * licensing@extjs.com
\r
6 * http://extjs.com/license
\r
9 // Create and append to the body, a Panel containing a block of code from the passed URL
\r
10 function createCodePanel(url, title) {
\r
11 var panel = new Ext.Panel({
\r
12 hideMode: 'visibility',
\r
16 'margin-top': '10px'
\r
18 hideCollapseTool: true,
\r
19 titleCollapse: true,
\r
23 renderTo: Ext.getBody(),
\r
25 render: function(p) {
\r
26 p.getUpdater().setRenderer({
\r
27 render: Ext.isIE ? function(el, response, scripts, callback) {
\r
29 var np = el.createChild({
\r
36 var t = response.responseText.split("\n");
\r
37 var c = np.child('code', true);
\r
38 for (var i = 0, l = t.length; i < l; i++) {
\r
39 var pre = document.createElement('pre');
\r
41 pre.appendChild(document.createTextNode(t[i]));
\r
43 } else if (i < (l - 1)) {
\r
44 c.appendChild(document.createElement("br"));
\r
48 } : function(el, response, scripts, callback) {
\r
55 html: response.responseText
\r
61 beforeexpand: function(p) {
\r
69 // Patch to allow XHR to local files. From hendricd: http://extjs.com/forum/member.php?u=8730
\r
70 Ext.apply( Ext.lib.Ajax ,
\r
71 { forceActiveX:false,
\r
72 createXhrObject:function(transactionId)
\r
74 var obj={ status:{isError:false}
\r
75 , tId:transactionId}, http;
\r
79 if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");}
\r
81 obj.conn= new XMLHttpRequest();
\r
86 for (var i = 0; i < this.activeX.length; ++i) {
\r
89 obj.conn= new ActiveXObject(this.activeX[i]);
\r
99 obj.status.isError = typeof(obj.conn) === undefined;
\r
105 getHttpStatus: function(reqObj){
\r
107 var statObj = { status:0
\r
115 if(!reqObj)throw('noobj');
\r
116 statObj.status = reqObj.status;
\r
118 statObj.isLocal = !reqObj.status && location.protocol == "file:" ||
\r
119 Ext.isSafari && reqObj.status === undefined;
\r
121 statObj.isOK = (statObj.isLocal || (statObj.status > 199 && statObj.status < 300));
\r
122 statObj.statusText = reqObj.statusText || '';
\r
123 } catch(e){ //status may not avail/valid yet (or called too early).
\r
129 handleTransactionResponse:function(o, callback, isAbort)
\r
133 callback = callback || {};
\r
134 var responseObject=null;
\r
136 if(!o.status.isError){
\r
137 o.status = this.getHttpStatus(o.conn);
\r
138 /* create and enhance the response with proper status and XMLDOM if necessary */
\r
139 responseObject = this.createResponseObject(o, callback.argument);
\r
142 if(o.status.isError){ /* checked again in case exception was raised - ActiveX was disabled during XML-DOM creation? */
\r
143 // And mixin everything the XHR object had to offer as well
\r
144 responseObject = Ext.applyIf(responseObject||{},this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false)));
\r
148 responseObject.options = o.options;
\r
149 responseObject.stat = o.status;
\r
151 if (o.status.isOK && !o.status.isError) {
\r
152 if (callback.success) {
\r
153 if (!callback.scope) {
\r
154 callback.success(responseObject);
\r
157 callback.success.apply(callback.scope, [responseObject]);
\r
162 if (callback.failure) {
\r
163 if (!callback.scope) {
\r
164 callback.failure(responseObject);
\r
167 callback.failure.apply(callback.scope, [responseObject]);
\r
173 if(o.options.async){
\r
174 this.releaseObject(o);
\r
175 responseObject = null;
\r
177 this.releaseObject(o);
\r
178 return responseObject;
\r
182 createResponseObject:function(o, callbackArg)
\r
185 var headerObj = {},headerStr='';
\r
187 try{ //to catch bad encoding problems here
\r
188 obj.responseText = o.conn.responseText;
\r
189 }catch(e){obj.responseText ='';}
\r
191 obj.responseXML = o.conn.responseXML;
\r
194 headerStr = o.conn.getAllResponseHeaders()||'';
\r
197 if(o.status.isLocal){
\r
199 o.status.isOK = ((o.status.status = (!!obj.responseText.length)?200:404) == 200);
\r
201 if(o.status.isOK && (!obj.responseXML || obj.responseXML.childNodes.length == 0)){
\r
204 try{ //ActiveX may be disabled
\r
205 if(typeof(DOMParser) == 'undefined'){
\r
206 xdoc=new ActiveXObject("Microsoft.XMLDOM");
\r
207 xdoc.async="false";
\r
208 xdoc.loadXML(obj.responseText);
\r
211 try{ //Opera 9 will fail parsing non-XML content, so trap here.
\r
212 var domParser = new DOMParser();
\r
213 xdoc = domParser.parseFromString(obj.responseText, 'application\/xml');
\r
215 finally{domParser = null;}
\r
219 o.status.isError = true;
\r
220 o.status.error = ex;
\r
224 obj.responseXML = xdoc;
\r
227 if(obj.responseXML){
\r
229 var parseBad = (obj.responseXML.parseError || 0) != 0 || obj.responseXML.childNodes.length == 0;
\r
231 headerStr = 'Content-Type: ' + (obj.responseXML.contentType || 'text\/xml') + '\n' + headerStr ;
\r
238 var header = headerStr.split('\n');
\r
239 for (var i = 0; i < header.length; i++) {
\r
240 var delimitPos = header[i].indexOf(':');
\r
241 if (delimitPos != -1) {
\r
242 headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
\r
247 obj.status = o.status.status;
\r
248 obj.statusText = o.status.statusText;
\r
249 obj.getResponseHeader = headerObj;
\r
250 obj.getAllResponseHeaders = headerStr;
\r
251 obj.stat = o.status
\r
253 if (typeof callbackArg !== undefined) {
\r
254 obj.argument = callbackArg;
\r
260 request : function(method, uri, cb, data, options) {
\r
262 options = Ext.apply({async:true,
\r
266 xmlData:null }, options||{});
\r
268 var hs = options.headers;
\r
271 if(hs.hasOwnProperty(h)){
\r
272 this.initHeader(h, hs[h], false);
\r
276 if(options.xmlData){
\r
277 this.initHeader('Content-Type', 'text/xml', false);
\r
279 data = options.xmlData;
\r
282 return this.makeRequest(method, uri, cb, data, options);
\r
285 asyncRequest:function(method, uri, callback, postData)
\r
287 var o = this.getConnectionObject();
\r
289 if (!o || o.status.isError) {
\r
293 o.options = options;
\r
295 o.conn.open(method, uri, true);
\r
297 o.status.isError = true;
\r
298 o.status.error = ex;
\r
299 return Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
304 if (this.useDefaultXhrHeader) {
\r
305 if (!this.defaultHeaders['X-Requested-With']) {
\r
306 this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
\r
310 if(postData && this.useDefaultHeader){
\r
311 this.initHeader('Content-Type', this.defaultPostHeader);
\r
314 if (this.hasDefaultHeaders || this.hasHeaders) {
\r
318 this.handleReadyState(o, callback);
\r
320 try{ o.conn.send(postData || null);
\r
322 o.status.isError=true;
\r
323 o.status.error = ex;
\r
324 return Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
332 makeRequest:function(method, uri, callback, postData, options)
\r
334 var o = this.getConnectionObject();
\r
336 if (!o || o.status.isError) {
\r
340 o.options = options;
\r
342 o.conn.open(method, uri, options.async, options.userId, options.password);
\r
344 o.status.isError = true;
\r
345 o.status.error = ex;
\r
346 var r=this.handleTransactionResponse(o, callback);
\r
347 return Ext.apply(o,r);
\r
350 if (this.useDefaultXhrHeader) {
\r
351 if (!this.defaultHeaders['X-Requested-With']) {
\r
352 this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
\r
356 if(postData && this.useDefaultHeader){
\r
357 this.initHeader('Content-Type', this.defaultPostHeader);
\r
360 if (this.hasDefaultHeaders || this.hasHeaders) {
\r
364 if(o.options.async){ //Timers won't work here as it's a blocking call
\r
365 this.handleReadyState(o, callback);
\r
368 try{ o.conn.send(postData || null);
\r
370 //Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
373 return options.async?o:Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
377 Ext.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');/* or other true/false mechanism */