[76] | 1 | /*! |
---|
| 2 | * Ext JS Library 3.4.0 |
---|
| 3 | * Copyright(c) 2006-2011 Sencha Inc. |
---|
| 4 | * licensing@sencha.com |
---|
| 5 | * http://www.sencha.com/license |
---|
| 6 | */ |
---|
| 7 | /** |
---|
| 8 | * @class Ext.Updater |
---|
| 9 | * @extends Ext.util.Observable |
---|
| 10 | * Provides AJAX-style update capabilities for Element objects. Updater can be used to {@link #update} |
---|
| 11 | * an {@link Ext.Element} once, or you can use {@link #startAutoRefresh} to set up an auto-updating |
---|
| 12 | * {@link Ext.Element Element} on a specific interval.<br><br> |
---|
| 13 | * Usage:<br> |
---|
| 14 | * <pre><code> |
---|
| 15 | * var el = Ext.get("foo"); // Get Ext.Element object |
---|
| 16 | * var mgr = el.getUpdater(); |
---|
| 17 | * mgr.update({ |
---|
| 18 | url: "http://myserver.com/index.php", |
---|
| 19 | params: { |
---|
| 20 | param1: "foo", |
---|
| 21 | param2: "bar" |
---|
| 22 | } |
---|
| 23 | * }); |
---|
| 24 | * ... |
---|
| 25 | * mgr.formUpdate("myFormId", "http://myserver.com/index.php"); |
---|
| 26 | * <br> |
---|
| 27 | * // or directly (returns the same Updater instance) |
---|
| 28 | * var mgr = new Ext.Updater("myElementId"); |
---|
| 29 | * mgr.startAutoRefresh(60, "http://myserver.com/index.php"); |
---|
| 30 | * mgr.on("update", myFcnNeedsToKnow); |
---|
| 31 | * <br> |
---|
| 32 | * // short handed call directly from the element object |
---|
| 33 | * Ext.get("foo").load({ |
---|
| 34 | url: "bar.php", |
---|
| 35 | scripts: true, |
---|
| 36 | params: "param1=foo&param2=bar", |
---|
| 37 | text: "Loading Foo..." |
---|
| 38 | * }); |
---|
| 39 | * </code></pre> |
---|
| 40 | * @constructor |
---|
| 41 | * Create new Updater directly. |
---|
| 42 | * @param {Mixed} el The element to update |
---|
| 43 | * @param {Boolean} forceNew (optional) By default the constructor checks to see if the passed element already |
---|
| 44 | * has an Updater and if it does it returns the same instance. This will skip that check (useful for extending this class). |
---|
| 45 | */ |
---|
| 46 | Ext.UpdateManager = Ext.Updater = Ext.extend(Ext.util.Observable, |
---|
| 47 | function() { |
---|
| 48 | var BEFOREUPDATE = "beforeupdate", |
---|
| 49 | UPDATE = "update", |
---|
| 50 | FAILURE = "failure"; |
---|
| 51 | |
---|
| 52 | // private |
---|
| 53 | function processSuccess(response){ |
---|
| 54 | var me = this; |
---|
| 55 | me.transaction = null; |
---|
| 56 | if (response.argument.form && response.argument.reset) { |
---|
| 57 | try { // put in try/catch since some older FF releases had problems with this |
---|
| 58 | response.argument.form.reset(); |
---|
| 59 | } catch(e){} |
---|
| 60 | } |
---|
| 61 | if (me.loadScripts) { |
---|
| 62 | me.renderer.render(me.el, response, me, |
---|
| 63 | updateComplete.createDelegate(me, [response])); |
---|
| 64 | } else { |
---|
| 65 | me.renderer.render(me.el, response, me); |
---|
| 66 | updateComplete.call(me, response); |
---|
| 67 | } |
---|
| 68 | } |
---|
| 69 | |
---|
| 70 | // private |
---|
| 71 | function updateComplete(response, type, success){ |
---|
| 72 | this.fireEvent(type || UPDATE, this.el, response); |
---|
| 73 | if(Ext.isFunction(response.argument.callback)){ |
---|
| 74 | response.argument.callback.call(response.argument.scope, this.el, Ext.isEmpty(success) ? true : false, response, response.argument.options); |
---|
| 75 | } |
---|
| 76 | } |
---|
| 77 | |
---|
| 78 | // private |
---|
| 79 | function processFailure(response){ |
---|
| 80 | updateComplete.call(this, response, FAILURE, !!(this.transaction = null)); |
---|
| 81 | } |
---|
| 82 | |
---|
| 83 | return { |
---|
| 84 | constructor: function(el, forceNew){ |
---|
| 85 | var me = this; |
---|
| 86 | el = Ext.get(el); |
---|
| 87 | if(!forceNew && el.updateManager){ |
---|
| 88 | return el.updateManager; |
---|
| 89 | } |
---|
| 90 | /** |
---|
| 91 | * The Element object |
---|
| 92 | * @type Ext.Element |
---|
| 93 | */ |
---|
| 94 | me.el = el; |
---|
| 95 | /** |
---|
| 96 | * Cached url to use for refreshes. Overwritten every time update() is called unless "discardUrl" param is set to true. |
---|
| 97 | * @type String |
---|
| 98 | */ |
---|
| 99 | me.defaultUrl = null; |
---|
| 100 | |
---|
| 101 | me.addEvents( |
---|
| 102 | /** |
---|
| 103 | * @event beforeupdate |
---|
| 104 | * Fired before an update is made, return false from your handler and the update is cancelled. |
---|
| 105 | * @param {Ext.Element} el |
---|
| 106 | * @param {String/Object/Function} url |
---|
| 107 | * @param {String/Object} params |
---|
| 108 | */ |
---|
| 109 | BEFOREUPDATE, |
---|
| 110 | /** |
---|
| 111 | * @event update |
---|
| 112 | * Fired after successful update is made. |
---|
| 113 | * @param {Ext.Element} el |
---|
| 114 | * @param {Object} oResponseObject The response Object |
---|
| 115 | */ |
---|
| 116 | UPDATE, |
---|
| 117 | /** |
---|
| 118 | * @event failure |
---|
| 119 | * Fired on update failure. |
---|
| 120 | * @param {Ext.Element} el |
---|
| 121 | * @param {Object} oResponseObject The response Object |
---|
| 122 | */ |
---|
| 123 | FAILURE |
---|
| 124 | ); |
---|
| 125 | |
---|
| 126 | Ext.apply(me, Ext.Updater.defaults); |
---|
| 127 | /** |
---|
| 128 | * Blank page URL to use with SSL file uploads (defaults to {@link Ext.Updater.defaults#sslBlankUrl}). |
---|
| 129 | * @property sslBlankUrl |
---|
| 130 | * @type String |
---|
| 131 | */ |
---|
| 132 | /** |
---|
| 133 | * Whether to append unique parameter on get request to disable caching (defaults to {@link Ext.Updater.defaults#disableCaching}). |
---|
| 134 | * @property disableCaching |
---|
| 135 | * @type Boolean |
---|
| 136 | */ |
---|
| 137 | /** |
---|
| 138 | * Text for loading indicator (defaults to {@link Ext.Updater.defaults#indicatorText}). |
---|
| 139 | * @property indicatorText |
---|
| 140 | * @type String |
---|
| 141 | */ |
---|
| 142 | /** |
---|
| 143 | * Whether to show indicatorText when loading (defaults to {@link Ext.Updater.defaults#showLoadIndicator}). |
---|
| 144 | * @property showLoadIndicator |
---|
| 145 | * @type String |
---|
| 146 | */ |
---|
| 147 | /** |
---|
| 148 | * Timeout for requests or form posts in seconds (defaults to {@link Ext.Updater.defaults#timeout}). |
---|
| 149 | * @property timeout |
---|
| 150 | * @type Number |
---|
| 151 | */ |
---|
| 152 | /** |
---|
| 153 | * True to process scripts in the output (defaults to {@link Ext.Updater.defaults#loadScripts}). |
---|
| 154 | * @property loadScripts |
---|
| 155 | * @type Boolean |
---|
| 156 | */ |
---|
| 157 | |
---|
| 158 | /** |
---|
| 159 | * Transaction object of the current executing transaction, or null if there is no active transaction. |
---|
| 160 | */ |
---|
| 161 | me.transaction = null; |
---|
| 162 | /** |
---|
| 163 | * Delegate for refresh() prebound to "this", use myUpdater.refreshDelegate.createCallback(arg1, arg2) to bind arguments |
---|
| 164 | * @type Function |
---|
| 165 | */ |
---|
| 166 | me.refreshDelegate = me.refresh.createDelegate(me); |
---|
| 167 | /** |
---|
| 168 | * Delegate for update() prebound to "this", use myUpdater.updateDelegate.createCallback(arg1, arg2) to bind arguments |
---|
| 169 | * @type Function |
---|
| 170 | */ |
---|
| 171 | me.updateDelegate = me.update.createDelegate(me); |
---|
| 172 | /** |
---|
| 173 | * Delegate for formUpdate() prebound to "this", use myUpdater.formUpdateDelegate.createCallback(arg1, arg2) to bind arguments |
---|
| 174 | * @type Function |
---|
| 175 | */ |
---|
| 176 | me.formUpdateDelegate = (me.formUpdate || function(){}).createDelegate(me); |
---|
| 177 | |
---|
| 178 | /** |
---|
| 179 | * The renderer for this Updater (defaults to {@link Ext.Updater.BasicRenderer}). |
---|
| 180 | */ |
---|
| 181 | me.renderer = me.renderer || me.getDefaultRenderer(); |
---|
| 182 | |
---|
| 183 | Ext.Updater.superclass.constructor.call(me); |
---|
| 184 | }, |
---|
| 185 | |
---|
| 186 | /** |
---|
| 187 | * Sets the content renderer for this Updater. See {@link Ext.Updater.BasicRenderer#render} for more details. |
---|
| 188 | * @param {Object} renderer The object implementing the render() method |
---|
| 189 | */ |
---|
| 190 | setRenderer : function(renderer){ |
---|
| 191 | this.renderer = renderer; |
---|
| 192 | }, |
---|
| 193 | |
---|
| 194 | /** |
---|
| 195 | * Returns the current content renderer for this Updater. See {@link Ext.Updater.BasicRenderer#render} for more details. |
---|
| 196 | * @return {Object} |
---|
| 197 | */ |
---|
| 198 | getRenderer : function(){ |
---|
| 199 | return this.renderer; |
---|
| 200 | }, |
---|
| 201 | |
---|
| 202 | /** |
---|
| 203 | * This is an overrideable method which returns a reference to a default |
---|
| 204 | * renderer class if none is specified when creating the Ext.Updater. |
---|
| 205 | * Defaults to {@link Ext.Updater.BasicRenderer} |
---|
| 206 | */ |
---|
| 207 | getDefaultRenderer: function() { |
---|
| 208 | return new Ext.Updater.BasicRenderer(); |
---|
| 209 | }, |
---|
| 210 | |
---|
| 211 | /** |
---|
| 212 | * Sets the default URL used for updates. |
---|
| 213 | * @param {String/Function} defaultUrl The url or a function to call to get the url |
---|
| 214 | */ |
---|
| 215 | setDefaultUrl : function(defaultUrl){ |
---|
| 216 | this.defaultUrl = defaultUrl; |
---|
| 217 | }, |
---|
| 218 | |
---|
| 219 | /** |
---|
| 220 | * Get the Element this Updater is bound to |
---|
| 221 | * @return {Ext.Element} The element |
---|
| 222 | */ |
---|
| 223 | getEl : function(){ |
---|
| 224 | return this.el; |
---|
| 225 | }, |
---|
| 226 | |
---|
| 227 | /** |
---|
| 228 | * Performs an <b>asynchronous</b> request, updating this element with the response. |
---|
| 229 | * If params are specified it uses POST, otherwise it uses GET.<br><br> |
---|
| 230 | * <b>Note:</b> Due to the asynchronous nature of remote server requests, the Element |
---|
| 231 | * will not have been fully updated when the function returns. To post-process the returned |
---|
| 232 | * data, use the callback option, or an <b><code>update</code></b> event handler. |
---|
| 233 | * @param {Object} options A config object containing any of the following options:<ul> |
---|
| 234 | * <li>url : <b>String/Function</b><p class="sub-desc">The URL to request or a function which |
---|
| 235 | * <i>returns</i> the URL (defaults to the value of {@link Ext.Ajax#url} if not specified).</p></li> |
---|
| 236 | * <li>method : <b>String</b><p class="sub-desc">The HTTP method to |
---|
| 237 | * use. Defaults to POST if the <code>params</code> argument is present, otherwise GET.</p></li> |
---|
| 238 | * <li>params : <b>String/Object/Function</b><p class="sub-desc">The |
---|
| 239 | * parameters to pass to the server (defaults to none). These may be specified as a url-encoded |
---|
| 240 | * string, or as an object containing properties which represent parameters, |
---|
| 241 | * or as a function, which returns such an object.</p></li> |
---|
| 242 | * <li>scripts : <b>Boolean</b><p class="sub-desc">If <code>true</code> |
---|
| 243 | * any <script> tags embedded in the response text will be extracted |
---|
| 244 | * and executed (defaults to {@link Ext.Updater.defaults#loadScripts}). If this option is specified, |
---|
| 245 | * the callback will be called <i>after</i> the execution of the scripts.</p></li> |
---|
| 246 | * <li>callback : <b>Function</b><p class="sub-desc">A function to |
---|
| 247 | * be called when the response from the server arrives. The following |
---|
| 248 | * parameters are passed:<ul> |
---|
| 249 | * <li><b>el</b> : Ext.Element<p class="sub-desc">The Element being updated.</p></li> |
---|
| 250 | * <li><b>success</b> : Boolean<p class="sub-desc">True for success, false for failure.</p></li> |
---|
| 251 | * <li><b>response</b> : XMLHttpRequest<p class="sub-desc">The XMLHttpRequest which processed the update.</p></li> |
---|
| 252 | * <li><b>options</b> : Object<p class="sub-desc">The config object passed to the update call.</p></li></ul> |
---|
| 253 | * </p></li> |
---|
| 254 | * <li>scope : <b>Object</b><p class="sub-desc">The scope in which |
---|
| 255 | * to execute the callback (The callback's <code>this</code> reference.) If the |
---|
| 256 | * <code>params</code> argument is a function, this scope is used for that function also.</p></li> |
---|
| 257 | * <li>discardUrl : <b>Boolean</b><p class="sub-desc">By default, the URL of this request becomes |
---|
| 258 | * the default URL for this Updater object, and will be subsequently used in {@link #refresh} |
---|
| 259 | * calls. To bypass this behavior, pass <code>discardUrl:true</code> (defaults to false).</p></li> |
---|
| 260 | * <li>timeout : <b>Number</b><p class="sub-desc">The number of seconds to wait for a response before |
---|
| 261 | * timing out (defaults to {@link Ext.Updater.defaults#timeout}).</p></li> |
---|
| 262 | * <li>text : <b>String</b><p class="sub-desc">The text to use as the innerHTML of the |
---|
| 263 | * {@link Ext.Updater.defaults#indicatorText} div (defaults to 'Loading...'). To replace the entire div, not |
---|
| 264 | * just the text, override {@link Ext.Updater.defaults#indicatorText} directly.</p></li> |
---|
| 265 | * <li>nocache : <b>Boolean</b><p class="sub-desc">Only needed for GET |
---|
| 266 | * requests, this option causes an extra, auto-generated parameter to be appended to the request |
---|
| 267 | * to defeat caching (defaults to {@link Ext.Updater.defaults#disableCaching}).</p></li></ul> |
---|
| 268 | * <p> |
---|
| 269 | * For example: |
---|
| 270 | <pre><code> |
---|
| 271 | um.update({ |
---|
| 272 | url: "your-url.php", |
---|
| 273 | params: {param1: "foo", param2: "bar"}, // or a URL encoded string |
---|
| 274 | callback: yourFunction, |
---|
| 275 | scope: yourObject, //(optional scope) |
---|
| 276 | discardUrl: true, |
---|
| 277 | nocache: true, |
---|
| 278 | text: "Loading...", |
---|
| 279 | timeout: 60, |
---|
| 280 | scripts: false // Save time by avoiding RegExp execution. |
---|
| 281 | }); |
---|
| 282 | </code></pre> |
---|
| 283 | */ |
---|
| 284 | update : function(url, params, callback, discardUrl){ |
---|
| 285 | var me = this, |
---|
| 286 | cfg, |
---|
| 287 | callerScope; |
---|
| 288 | |
---|
| 289 | if(me.fireEvent(BEFOREUPDATE, me.el, url, params) !== false){ |
---|
| 290 | if(Ext.isObject(url)){ // must be config object |
---|
| 291 | cfg = url; |
---|
| 292 | url = cfg.url; |
---|
| 293 | params = params || cfg.params; |
---|
| 294 | callback = callback || cfg.callback; |
---|
| 295 | discardUrl = discardUrl || cfg.discardUrl; |
---|
| 296 | callerScope = cfg.scope; |
---|
| 297 | if(!Ext.isEmpty(cfg.nocache)){me.disableCaching = cfg.nocache;}; |
---|
| 298 | if(!Ext.isEmpty(cfg.text)){me.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";}; |
---|
| 299 | if(!Ext.isEmpty(cfg.scripts)){me.loadScripts = cfg.scripts;}; |
---|
| 300 | if(!Ext.isEmpty(cfg.timeout)){me.timeout = cfg.timeout;}; |
---|
| 301 | } |
---|
| 302 | me.showLoading(); |
---|
| 303 | |
---|
| 304 | if(!discardUrl){ |
---|
| 305 | me.defaultUrl = url; |
---|
| 306 | } |
---|
| 307 | if(Ext.isFunction(url)){ |
---|
| 308 | url = url.call(me); |
---|
| 309 | } |
---|
| 310 | |
---|
| 311 | var o = Ext.apply({}, { |
---|
| 312 | url : url, |
---|
| 313 | params: (Ext.isFunction(params) && callerScope) ? params.createDelegate(callerScope) : params, |
---|
| 314 | success: processSuccess, |
---|
| 315 | failure: processFailure, |
---|
| 316 | scope: me, |
---|
| 317 | callback: undefined, |
---|
| 318 | timeout: (me.timeout*1000), |
---|
| 319 | disableCaching: me.disableCaching, |
---|
| 320 | argument: { |
---|
| 321 | "options": cfg, |
---|
| 322 | "url": url, |
---|
| 323 | "form": null, |
---|
| 324 | "callback": callback, |
---|
| 325 | "scope": callerScope || window, |
---|
| 326 | "params": params |
---|
| 327 | } |
---|
| 328 | }, cfg); |
---|
| 329 | |
---|
| 330 | me.transaction = Ext.Ajax.request(o); |
---|
| 331 | } |
---|
| 332 | }, |
---|
| 333 | |
---|
| 334 | /** |
---|
| 335 | * <p>Performs an asynchronous form post, updating this element with the response. If the form has the attribute |
---|
| 336 | * enctype="<a href="http://www.faqs.org/rfcs/rfc2388.html">multipart/form-data</a>", it assumes it's a file upload. |
---|
| 337 | * Uses this.sslBlankUrl for SSL file uploads to prevent IE security warning.</p> |
---|
| 338 | * <p>File uploads are not performed using normal "Ajax" techniques, that is they are <b>not</b> |
---|
| 339 | * performed using XMLHttpRequests. Instead the form is submitted in the standard manner with the |
---|
| 340 | * DOM <code><form></code> element temporarily modified to have its |
---|
| 341 | * <a href="http://www.w3.org/TR/REC-html40/present/frames.html#adef-target">target</a> set to refer |
---|
| 342 | * to a dynamically generated, hidden <code><iframe></code> which is inserted into the document |
---|
| 343 | * but removed after the return data has been gathered.</p> |
---|
| 344 | * <p>Be aware that file upload packets, sent with the content type <a href="http://www.faqs.org/rfcs/rfc2388.html">multipart/form-data</a> |
---|
| 345 | * and some server technologies (notably JEE) may require some custom processing in order to |
---|
| 346 | * retrieve parameter names and parameter values from the packet content.</p> |
---|
| 347 | * @param {String/HTMLElement} form The form Id or form element |
---|
| 348 | * @param {String} url (optional) The url to pass the form to. If omitted the action attribute on the form will be used. |
---|
| 349 | * @param {Boolean} reset (optional) Whether to try to reset the form after the update |
---|
| 350 | * @param {Function} callback (optional) Callback when transaction is complete. The following |
---|
| 351 | * parameters are passed:<ul> |
---|
| 352 | * <li><b>el</b> : Ext.Element<p class="sub-desc">The Element being updated.</p></li> |
---|
| 353 | * <li><b>success</b> : Boolean<p class="sub-desc">True for success, false for failure.</p></li> |
---|
| 354 | * <li><b>response</b> : XMLHttpRequest<p class="sub-desc">The XMLHttpRequest which processed the update.</p></li></ul> |
---|
| 355 | */ |
---|
| 356 | formUpdate : function(form, url, reset, callback){ |
---|
| 357 | var me = this; |
---|
| 358 | if(me.fireEvent(BEFOREUPDATE, me.el, form, url) !== false){ |
---|
| 359 | if(Ext.isFunction(url)){ |
---|
| 360 | url = url.call(me); |
---|
| 361 | } |
---|
| 362 | form = Ext.getDom(form); |
---|
| 363 | me.transaction = Ext.Ajax.request({ |
---|
| 364 | form: form, |
---|
| 365 | url:url, |
---|
| 366 | success: processSuccess, |
---|
| 367 | failure: processFailure, |
---|
| 368 | scope: me, |
---|
| 369 | timeout: (me.timeout*1000), |
---|
| 370 | argument: { |
---|
| 371 | "url": url, |
---|
| 372 | "form": form, |
---|
| 373 | "callback": callback, |
---|
| 374 | "reset": reset |
---|
| 375 | } |
---|
| 376 | }); |
---|
| 377 | me.showLoading.defer(1, me); |
---|
| 378 | } |
---|
| 379 | }, |
---|
| 380 | |
---|
| 381 | /** |
---|
| 382 | * Set this element to auto refresh. Can be canceled by calling {@link #stopAutoRefresh}. |
---|
| 383 | * @param {Number} interval How often to update (in seconds). |
---|
| 384 | * @param {String/Object/Function} url (optional) The url for this request, a config object in the same format |
---|
| 385 | * supported by {@link #load}, or a function to call to get the url (defaults to the last used url). Note that while |
---|
| 386 | * the url used in a load call can be reused by this method, other load config options will not be reused and must be |
---|
| 387 | * sepcified as part of a config object passed as this paramter if needed. |
---|
| 388 | * @param {String/Object} params (optional) The parameters to pass as either a url encoded string |
---|
| 389 | * "¶m1=1¶m2=2" or as an object {param1: 1, param2: 2} |
---|
| 390 | * @param {Function} callback (optional) Callback when transaction is complete - called with signature (oElement, bSuccess) |
---|
| 391 | * @param {Boolean} refreshNow (optional) Whether to execute the refresh now, or wait the interval |
---|
| 392 | */ |
---|
| 393 | startAutoRefresh : function(interval, url, params, callback, refreshNow){ |
---|
| 394 | var me = this; |
---|
| 395 | if(refreshNow){ |
---|
| 396 | me.update(url || me.defaultUrl, params, callback, true); |
---|
| 397 | } |
---|
| 398 | if(me.autoRefreshProcId){ |
---|
| 399 | clearInterval(me.autoRefreshProcId); |
---|
| 400 | } |
---|
| 401 | me.autoRefreshProcId = setInterval(me.update.createDelegate(me, [url || me.defaultUrl, params, callback, true]), interval * 1000); |
---|
| 402 | }, |
---|
| 403 | |
---|
| 404 | /** |
---|
| 405 | * Stop auto refresh on this element. |
---|
| 406 | */ |
---|
| 407 | stopAutoRefresh : function(){ |
---|
| 408 | if(this.autoRefreshProcId){ |
---|
| 409 | clearInterval(this.autoRefreshProcId); |
---|
| 410 | delete this.autoRefreshProcId; |
---|
| 411 | } |
---|
| 412 | }, |
---|
| 413 | |
---|
| 414 | /** |
---|
| 415 | * Returns true if the Updater is currently set to auto refresh its content (see {@link #startAutoRefresh}), otherwise false. |
---|
| 416 | */ |
---|
| 417 | isAutoRefreshing : function(){ |
---|
| 418 | return !!this.autoRefreshProcId; |
---|
| 419 | }, |
---|
| 420 | |
---|
| 421 | /** |
---|
| 422 | * Display the element's "loading" state. By default, the element is updated with {@link #indicatorText}. This |
---|
| 423 | * method may be overridden to perform a custom action while this Updater is actively updating its contents. |
---|
| 424 | */ |
---|
| 425 | showLoading : function(){ |
---|
| 426 | if(this.showLoadIndicator){ |
---|
| 427 | this.el.dom.innerHTML = this.indicatorText; |
---|
| 428 | } |
---|
| 429 | }, |
---|
| 430 | |
---|
| 431 | /** |
---|
| 432 | * Aborts the currently executing transaction, if any. |
---|
| 433 | */ |
---|
| 434 | abort : function(){ |
---|
| 435 | if(this.transaction){ |
---|
| 436 | Ext.Ajax.abort(this.transaction); |
---|
| 437 | } |
---|
| 438 | }, |
---|
| 439 | |
---|
| 440 | /** |
---|
| 441 | * Returns true if an update is in progress, otherwise false. |
---|
| 442 | * @return {Boolean} |
---|
| 443 | */ |
---|
| 444 | isUpdating : function(){ |
---|
| 445 | return this.transaction ? Ext.Ajax.isLoading(this.transaction) : false; |
---|
| 446 | }, |
---|
| 447 | |
---|
| 448 | /** |
---|
| 449 | * Refresh the element with the last used url or defaultUrl. If there is no url, it returns immediately |
---|
| 450 | * @param {Function} callback (optional) Callback when transaction is complete - called with signature (oElement, bSuccess) |
---|
| 451 | */ |
---|
| 452 | refresh : function(callback){ |
---|
| 453 | if(this.defaultUrl){ |
---|
| 454 | this.update(this.defaultUrl, null, callback, true); |
---|
| 455 | } |
---|
| 456 | } |
---|
| 457 | }; |
---|
| 458 | }()); |
---|
| 459 | |
---|
| 460 | /** |
---|
| 461 | * @class Ext.Updater.defaults |
---|
| 462 | * The defaults collection enables customizing the default properties of Updater |
---|
| 463 | */ |
---|
| 464 | Ext.Updater.defaults = { |
---|
| 465 | /** |
---|
| 466 | * Timeout for requests or form posts in seconds (defaults to 30 seconds). |
---|
| 467 | * @type Number |
---|
| 468 | */ |
---|
| 469 | timeout : 30, |
---|
| 470 | /** |
---|
| 471 | * True to append a unique parameter to GET requests to disable caching (defaults to false). |
---|
| 472 | * @type Boolean |
---|
| 473 | */ |
---|
| 474 | disableCaching : false, |
---|
| 475 | /** |
---|
| 476 | * Whether or not to show {@link #indicatorText} during loading (defaults to true). |
---|
| 477 | * @type Boolean |
---|
| 478 | */ |
---|
| 479 | showLoadIndicator : true, |
---|
| 480 | /** |
---|
| 481 | * Text for loading indicator (defaults to '<div class="loading-indicator">Loading...</div>'). |
---|
| 482 | * @type String |
---|
| 483 | */ |
---|
| 484 | indicatorText : '<div class="loading-indicator">Loading...</div>', |
---|
| 485 | /** |
---|
| 486 | * True to process scripts by default (defaults to false). |
---|
| 487 | * @type Boolean |
---|
| 488 | */ |
---|
| 489 | loadScripts : false, |
---|
| 490 | /** |
---|
| 491 | * Blank page URL to use with SSL file uploads (defaults to {@link Ext#SSL_SECURE_URL} if set, or "javascript:false"). |
---|
| 492 | * @type String |
---|
| 493 | */ |
---|
| 494 | sslBlankUrl : Ext.SSL_SECURE_URL |
---|
| 495 | }; |
---|
| 496 | |
---|
| 497 | |
---|
| 498 | /** |
---|
| 499 | * Static convenience method. <b>This method is deprecated in favor of el.load({url:'foo.php', ...})</b>. |
---|
| 500 | * Usage: |
---|
| 501 | * <pre><code>Ext.Updater.updateElement("my-div", "stuff.php");</code></pre> |
---|
| 502 | * @param {Mixed} el The element to update |
---|
| 503 | * @param {String} url The url |
---|
| 504 | * @param {String/Object} params (optional) Url encoded param string or an object of name/value pairs |
---|
| 505 | * @param {Object} options (optional) A config object with any of the Updater properties you want to set - for |
---|
| 506 | * example: {disableCaching:true, indicatorText: "Loading data..."} |
---|
| 507 | * @static |
---|
| 508 | * @deprecated |
---|
| 509 | * @member Ext.Updater |
---|
| 510 | */ |
---|
| 511 | Ext.Updater.updateElement = function(el, url, params, options){ |
---|
| 512 | var um = Ext.get(el).getUpdater(); |
---|
| 513 | Ext.apply(um, options); |
---|
| 514 | um.update(url, params, options ? options.callback : null); |
---|
| 515 | }; |
---|
| 516 | |
---|
| 517 | /** |
---|
| 518 | * @class Ext.Updater.BasicRenderer |
---|
| 519 | * <p>This class is a base class implementing a simple render method which updates an element using results from an Ajax request.</p> |
---|
| 520 | * <p>The BasicRenderer updates the element's innerHTML with the responseText. To perform a custom render (i.e. XML or JSON processing), |
---|
| 521 | * create an object with a conforming {@link #render} method and pass it to setRenderer on the Updater.</p> |
---|
| 522 | */ |
---|
| 523 | Ext.Updater.BasicRenderer = function(){}; |
---|
| 524 | |
---|
| 525 | Ext.Updater.BasicRenderer.prototype = { |
---|
| 526 | /** |
---|
| 527 | * This method is called when an Ajax response is received, and an Element needs updating. |
---|
| 528 | * @param {Ext.Element} el The element being rendered |
---|
| 529 | * @param {Object} xhr The XMLHttpRequest object |
---|
| 530 | * @param {Updater} updateManager The calling update manager |
---|
| 531 | * @param {Function} callback A callback that will need to be called if loadScripts is true on the Updater |
---|
| 532 | */ |
---|
| 533 | render : function(el, response, updateManager, callback){ |
---|
| 534 | el.update(response.responseText, updateManager.loadScripts, callback); |
---|
| 535 | } |
---|
| 536 | }; |
---|