3 * Copyright(c) 2006-2010 Ext JS, LLC
5 * http://www.extjs.com/license
7 // Create and append to the body, a Panel containing a block of code from the passed URL
\r
8 function createCodePanel(url, title) {
\r
9 var panel = new Ext.Panel({
\r
10 hideMode: 'visibility',
\r
14 'margin-top': '10px'
\r
16 hideCollapseTool: true,
\r
17 titleCollapse: true,
\r
21 renderTo: Ext.getBody(),
\r
23 render: function(p) {
\r
24 p.getUpdater().setRenderer({
\r
25 render: Ext.isIE ? function(el, response, scripts, callback) {
\r
27 var np = el.createChild({
\r
34 var t = response.responseText.split("\n");
\r
35 var c = np.child('code', true);
\r
36 for (var i = 0, l = t.length; i < l; i++) {
\r
37 var pre = document.createElement('pre');
\r
39 pre.appendChild(document.createTextNode(t[i]));
\r
41 } else if (i < (l - 1)) {
\r
42 c.appendChild(document.createElement("br"));
\r
46 } : function(el, response, scripts, callback) {
\r
53 html: response.responseText
\r
59 beforeexpand: function(p) {
\r
67 // Patch to allow XHR to local files. From hendricd: http://extjs.com/forum/member.php?u=8730
\r
68 Ext.apply( Ext.lib.Ajax ,
\r
69 { forceActiveX:false,
\r
70 createXhrObject:function(transactionId)
\r
72 var obj={ status:{isError:false}
\r
73 , tId:transactionId}, http;
\r
77 if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");}
\r
79 obj.conn= new XMLHttpRequest();
\r
84 for (var i = 0; i < this.activeX.length; ++i) {
\r
87 obj.conn= new ActiveXObject(this.activeX[i]);
\r
97 obj.status.isError = typeof(obj.conn) === undefined;
\r
103 getHttpStatus: function(reqObj){
\r
105 var statObj = { status:0
\r
113 if(!reqObj)throw('noobj');
\r
114 statObj.status = reqObj.status;
\r
116 statObj.isLocal = !reqObj.status && location.protocol == "file:" ||
\r
117 Ext.isSafari && reqObj.status === undefined;
\r
119 statObj.isOK = (statObj.isLocal || (statObj.status > 199 && statObj.status < 300));
\r
120 statObj.statusText = reqObj.statusText || '';
\r
121 } catch(e){ //status may not avail/valid yet (or called too early).
\r
127 handleTransactionResponse:function(o, callback, isAbort)
\r
131 callback = callback || {};
\r
132 var responseObject=null;
\r
134 if(!o.status.isError){
\r
135 o.status = this.getHttpStatus(o.conn);
\r
136 /* create and enhance the response with proper status and XMLDOM if necessary */
\r
137 responseObject = this.createResponseObject(o, callback.argument);
\r
140 if(o.status.isError){ /* checked again in case exception was raised - ActiveX was disabled during XML-DOM creation? */
\r
141 // And mixin everything the XHR object had to offer as well
\r
142 responseObject = Ext.applyIf(responseObject||{},this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false)));
\r
146 responseObject.options = o.options;
\r
147 responseObject.stat = o.status;
\r
149 if (o.status.isOK && !o.status.isError) {
\r
150 if (callback.success) {
\r
151 if (!callback.scope) {
\r
152 callback.success(responseObject);
\r
155 callback.success.apply(callback.scope, [responseObject]);
\r
160 if (callback.failure) {
\r
161 if (!callback.scope) {
\r
162 callback.failure(responseObject);
\r
165 callback.failure.apply(callback.scope, [responseObject]);
\r
171 if(o.options.async){
\r
172 this.releaseObject(o);
\r
173 responseObject = null;
\r
175 this.releaseObject(o);
\r
176 return responseObject;
\r
180 createResponseObject:function(o, callbackArg)
\r
183 var headerObj = {},headerStr='';
\r
185 try{ //to catch bad encoding problems here
\r
186 obj.responseText = o.conn.responseText;
\r
187 }catch(e){obj.responseText ='';}
\r
189 obj.responseXML = o.conn.responseXML;
\r
192 headerStr = o.conn.getAllResponseHeaders()||'';
\r
195 if(o.status.isLocal){
\r
197 o.status.isOK = ((o.status.status = (!!obj.responseText.length)?200:404) == 200);
\r
199 if(o.status.isOK && (!obj.responseXML || obj.responseXML.childNodes.length == 0)){
\r
202 try{ //ActiveX may be disabled
\r
203 if(typeof(DOMParser) == 'undefined'){
\r
204 xdoc=new ActiveXObject("Microsoft.XMLDOM");
\r
205 xdoc.async="false";
\r
206 xdoc.loadXML(obj.responseText);
\r
209 try{ //Opera 9 will fail parsing non-XML content, so trap here.
\r
210 var domParser = new DOMParser();
\r
211 xdoc = domParser.parseFromString(obj.responseText, 'application\/xml');
\r
213 finally{domParser = null;}
\r
217 o.status.isError = true;
\r
218 o.status.error = ex;
\r
222 obj.responseXML = xdoc;
\r
225 if(obj.responseXML){
\r
227 var parseBad = (obj.responseXML.parseError || 0) != 0 || obj.responseXML.childNodes.length == 0;
\r
229 headerStr = 'Content-Type: ' + (obj.responseXML.contentType || 'text\/xml') + '\n' + headerStr ;
\r
236 var header = headerStr.split('\n');
\r
237 for (var i = 0; i < header.length; i++) {
\r
238 var delimitPos = header[i].indexOf(':');
\r
239 if (delimitPos != -1) {
\r
240 headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
\r
245 obj.status = o.status.status;
\r
246 obj.statusText = o.status.statusText;
\r
247 obj.getResponseHeader = headerObj;
\r
248 obj.getAllResponseHeaders = headerStr;
\r
249 obj.stat = o.status
\r
251 if (typeof callbackArg !== undefined) {
\r
252 obj.argument = callbackArg;
\r
258 request : function(method, uri, cb, data, options) {
\r
260 options = Ext.apply({async:true,
\r
264 xmlData:null }, options||{});
\r
266 var hs = options.headers;
\r
269 if(hs.hasOwnProperty(h)){
\r
270 this.initHeader(h, hs[h], false);
\r
274 if(options.xmlData){
\r
275 this.initHeader('Content-Type', 'text/xml', false);
\r
277 data = options.xmlData;
\r
280 return this.makeRequest(method, uri, cb, data, options);
\r
283 asyncRequest:function(method, uri, callback, postData)
\r
285 var o = this.getConnectionObject();
\r
287 if (!o || o.status.isError) {
\r
291 o.options = options;
\r
293 o.conn.open(method, uri, true);
\r
295 o.status.isError = true;
\r
296 o.status.error = ex;
\r
297 return Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
302 if (this.useDefaultXhrHeader) {
\r
303 if (!this.defaultHeaders['X-Requested-With']) {
\r
304 this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
\r
308 if(postData && this.useDefaultHeader){
\r
309 this.initHeader('Content-Type', this.defaultPostHeader);
\r
312 if (this.hasDefaultHeaders || this.hasHeaders) {
\r
316 this.handleReadyState(o, callback);
\r
318 try{ o.conn.send(postData || null);
\r
320 o.status.isError=true;
\r
321 o.status.error = ex;
\r
322 return Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
330 makeRequest:function(method, uri, callback, postData, options)
\r
332 var o = this.getConnectionObject();
\r
334 if (!o || o.status.isError) {
\r
338 o.options = options;
\r
340 o.conn.open(method, uri, options.async, options.userId, options.password);
\r
342 o.status.isError = true;
\r
343 o.status.error = ex;
\r
344 var r=this.handleTransactionResponse(o, callback);
\r
345 return Ext.apply(o,r);
\r
348 if (this.useDefaultXhrHeader) {
\r
349 if (!this.defaultHeaders['X-Requested-With']) {
\r
350 this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
\r
354 if(postData && this.useDefaultHeader){
\r
355 this.initHeader('Content-Type', this.defaultPostHeader);
\r
358 if (this.hasDefaultHeaders || this.hasHeaders) {
\r
362 if(o.options.async){ //Timers won't work here as it's a blocking call
\r
363 this.handleReadyState(o, callback);
\r
366 try{ o.conn.send(postData || null);
\r
368 //Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
371 return options.async?o:Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
375 Ext.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');/* or other true/false mechanism */