3 <title>The source code</title>
\r
4 <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
\r
5 <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
\r
7 <body onload="prettyPrint();">
\r
8 <pre class="prettyprint lang-js">// Create and append to the body, a Panel containing a block of code from the passed URL
\r
9 function createCodePanel(url, title) {
\r
10 var panel = new Ext.Panel({
\r
11 hideMode: 'visibility',
\r
15 'margin-top': '10px'
\r
17 hideCollapseTool: true,
\r
18 titleCollapse: true,
\r
22 renderTo: Ext.getBody(),
\r
24 render: function(p) {
\r
25 p.getUpdater().setRenderer({
\r
26 render: Ext.isIE ? function(el, response, scripts, callback) {
\r
28 var np = el.createChild({
\r
35 var t = response.responseText.split("\n");
\r
36 var c = np.child('code', true);
\r
37 for (var i = 0, l = t.length; i < l; i++) {
\r
38 var pre = document.createElement('pre');
\r
40 pre.appendChild(document.createTextNode(t[i]));
\r
42 } else if (i < (l - 1)) {
\r
43 c.appendChild(document.createElement("br"));
\r
47 } : function(el, response, scripts, callback) {
\r
54 html: response.responseText
\r
60 beforeexpand: function(p) {
\r
68 // Patch to allow XHR to local files. From hendricd: http://extjs.com/forum/member.php?u=8730
\r
69 Ext.apply( Ext.lib.Ajax ,
\r
70 { forceActiveX:false,
\r
71 createXhrObject:function(transactionId)
\r
73 var obj={ status:{isError:false}
\r
74 , tId:transactionId}, http;
\r
78 if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");}
\r
80 obj.conn= new XMLHttpRequest();
\r
85 for (var i = 0; i < this.activeX.length; ++i) {
\r
88 obj.conn= new ActiveXObject(this.activeX[i]);
\r
98 obj.status.isError = typeof(obj.conn) === undefined;
\r
104 getHttpStatus: function(reqObj){
\r
106 var statObj = { status:0
\r
114 if(!reqObj)throw('noobj');
\r
115 statObj.status = reqObj.status;
\r
117 statObj.isLocal = !reqObj.status && location.protocol == "file:" ||
\r
118 Ext.isSafari && reqObj.status === undefined;
\r
120 statObj.isOK = (statObj.isLocal || (statObj.status > 199 && statObj.status < 300));
\r
121 statObj.statusText = reqObj.statusText || '';
\r
122 } catch(e){ //status may not avail/valid yet (or called too early).
\r
128 handleTransactionResponse:function(o, callback, isAbort)
\r
132 callback = callback || {};
\r
133 var responseObject=null;
\r
135 if(!o.status.isError){
\r
136 o.status = this.getHttpStatus(o.conn);
\r
137 /* create and enhance the response with proper status and XMLDOM if necessary */
\r
138 responseObject = this.createResponseObject(o, callback.argument);
\r
141 if(o.status.isError){ /* checked again in case exception was raised - ActiveX was disabled during XML-DOM creation? */
\r
142 // And mixin everything the XHR object had to offer as well
\r
143 responseObject = Ext.applyIf(responseObject||{},this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false)));
\r
147 responseObject.options = o.options;
\r
148 responseObject.stat = o.status;
\r
150 if (o.status.isOK && !o.status.isError) {
\r
151 if (callback.success) {
\r
152 if (!callback.scope) {
\r
153 callback.success(responseObject);
\r
156 callback.success.apply(callback.scope, [responseObject]);
\r
161 if (callback.failure) {
\r
162 if (!callback.scope) {
\r
163 callback.failure(responseObject);
\r
166 callback.failure.apply(callback.scope, [responseObject]);
\r
172 if(o.options.async){
\r
173 this.releaseObject(o);
\r
174 responseObject = null;
\r
176 this.releaseObject(o);
\r
177 return responseObject;
\r
181 createResponseObject:function(o, callbackArg)
\r
184 var headerObj = {},headerStr='';
\r
186 try{ //to catch bad encoding problems here
\r
187 obj.responseText = o.conn.responseText;
\r
188 }catch(e){obj.responseText ='';}
\r
190 obj.responseXML = o.conn.responseXML;
\r
193 headerStr = o.conn.getAllResponseHeaders()||'';
\r
196 if(o.status.isLocal){
\r
198 o.status.isOK = ((o.status.status = (!!obj.responseText.length)?200:404) == 200);
\r
200 if(o.status.isOK && (!obj.responseXML || obj.responseXML.childNodes.length == 0)){
\r
203 try{ //ActiveX may be disabled
\r
204 if(typeof(DOMParser) == 'undefined'){
\r
205 xdoc=new ActiveXObject("Microsoft.XMLDOM");
\r
206 xdoc.async="false";
\r
207 xdoc.loadXML(obj.responseText);
\r
210 try{ //Opera 9 will fail parsing non-XML content, so trap here.
\r
211 var domParser = new DOMParser();
\r
212 xdoc = domParser.parseFromString(obj.responseText, 'application\/xml');
\r
214 finally{domParser = null;}
\r
218 o.status.isError = true;
\r
219 o.status.error = ex;
\r
223 obj.responseXML = xdoc;
\r
226 if(obj.responseXML){
\r
228 var parseBad = (obj.responseXML.parseError || 0) != 0 || obj.responseXML.childNodes.length == 0;
\r
230 headerStr = 'Content-Type: ' + (obj.responseXML.contentType || 'text\/xml') + '\n' + headerStr ;
\r
237 var header = headerStr.split('\n');
\r
238 for (var i = 0; i < header.length; i++) {
\r
239 var delimitPos = header[i].indexOf(':');
\r
240 if (delimitPos != -1) {
\r
241 headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
\r
246 obj.status = o.status.status;
\r
247 obj.statusText = o.status.statusText;
\r
248 obj.getResponseHeader = headerObj;
\r
249 obj.getAllResponseHeaders = headerStr;
\r
250 obj.stat = o.status
\r
252 if (typeof callbackArg !== undefined) {
\r
253 obj.argument = callbackArg;
\r
259 request : function(method, uri, cb, data, options) {
\r
261 options = Ext.apply({async:true,
\r
265 xmlData:null }, options||{});
\r
267 var hs = options.headers;
\r
270 if(hs.hasOwnProperty(h)){
\r
271 this.initHeader(h, hs[h], false);
\r
275 if(options.xmlData){
\r
276 this.initHeader('Content-Type', 'text/xml', false);
\r
278 data = options.xmlData;
\r
281 return this.makeRequest(method, uri, cb, data, options);
\r
284 asyncRequest:function(method, uri, callback, postData)
\r
286 var o = this.getConnectionObject();
\r
288 if (!o || o.status.isError) {
\r
292 o.options = options;
\r
294 o.conn.open(method, uri, true);
\r
296 o.status.isError = true;
\r
297 o.status.error = ex;
\r
298 return Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
303 if (this.useDefaultXhrHeader) {
\r
304 if (!this.defaultHeaders['X-Requested-With']) {
\r
305 this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
\r
309 if(postData && this.useDefaultHeader){
\r
310 this.initHeader('Content-Type', this.defaultPostHeader);
\r
313 if (this.hasDefaultHeaders || this.hasHeaders) {
\r
317 this.handleReadyState(o, callback);
\r
319 try{ o.conn.send(postData || null);
\r
321 o.status.isError=true;
\r
322 o.status.error = ex;
\r
323 return Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
331 makeRequest:function(method, uri, callback, postData, options)
\r
333 var o = this.getConnectionObject();
\r
335 if (!o || o.status.isError) {
\r
339 o.options = options;
\r
341 o.conn.open(method, uri, options.async, options.userId, options.password);
\r
343 o.status.isError = true;
\r
344 o.status.error = ex;
\r
345 var r=this.handleTransactionResponse(o, callback);
\r
346 return Ext.apply(o,r);
\r
349 if (this.useDefaultXhrHeader) {
\r
350 if (!this.defaultHeaders['X-Requested-With']) {
\r
351 this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
\r
355 if(postData && this.useDefaultHeader){
\r
356 this.initHeader('Content-Type', this.defaultPostHeader);
\r
359 if (this.hasDefaultHeaders || this.hasHeaders) {
\r
363 if(o.options.async){ //Timers won't work here as it's a blocking call
\r
364 this.handleReadyState(o, callback);
\r
367 try{ o.conn.send(postData || null);
\r
369 //Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
372 return options.async?o:Ext.apply(o,this.handleTransactionResponse(o, callback));
\r
376 Ext.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');/* or other true/false mechanism */</pre>
\r