| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-ElementLoader'>/**</span> * A class used to load remote content to an Element. Sample usage: * *     Ext.get('el').load({ *         url: 'myPage.php', *         scripts: true, *         params: { *             id: 1 *         } *     }); * * In general this class will not be instanced directly, rather the {@link Ext.Element#method-load} method * will be used. */Ext.define('Ext.ElementLoader', {    /* Begin Definitions */    mixins: {        observable: 'Ext.util.Observable'    },    uses: [        'Ext.data.Connection',        'Ext.Ajax'    ],    statics: {        Renderer: {            Html: function(loader, response, active){                loader.getTarget().update(response.responseText, active.scripts === true);                return true;            }        }    },    /* End Definitions */<span id='Ext-ElementLoader-cfg-url'>    /**</span>     * @cfg {String} url (required)     * The url to retrieve the content from.     */    url: null,<span id='Ext-ElementLoader-cfg-params'>    /**</span>     * @cfg {Object} params     * Any params to be attached to the Ajax request. These parameters will     * be overridden by any params in the load options.     */    params: null,<span id='Ext-ElementLoader-cfg-baseParams'>    /**</span>     * @cfg {Object} baseParams Params that will be attached to every request. These parameters     * will not be overridden by any params in the load options.     */    baseParams: null,<span id='Ext-ElementLoader-cfg-autoLoad'>    /**</span>     * @cfg {Boolean/Object} autoLoad     * True to have the loader make a request as soon as it is created.     * This argument can also be a set of options that will be passed to {@link #method-load} is called.     */    autoLoad: false,<span id='Ext-ElementLoader-cfg-target'>    /**</span>     * @cfg {HTMLElement/Ext.Element/String} target     * The target element for the loader. It can be the DOM element, the id or an {@link Ext.Element}.     */    target: null,<span id='Ext-ElementLoader-cfg-loadMask'>    /**</span>     * @cfg {Boolean/String} loadMask     * True or a string to show when the element is loading.     */    loadMask: false,<span id='Ext-ElementLoader-cfg-ajaxOptions'>    /**</span>     * @cfg {Object} ajaxOptions     * Any additional options to be passed to the request, for example timeout or headers.     */    ajaxOptions: null,<span id='Ext-ElementLoader-cfg-scripts'>    /**</span>     * @cfg {Boolean} scripts     * True to parse any inline script tags in the response.     */    scripts: false,<span id='Ext-ElementLoader-cfg-success'>    /**</span>     * @cfg {Function} success     * A function to be called when a load request is successful.     * Will be called with the following config parameters:     *     * - this - The ElementLoader instance.     * - response - The response object.     * - options - Ajax options.     */<span id='Ext-ElementLoader-cfg-failure'>    /**</span>     * @cfg {Function} failure A function to be called when a load request fails.     * Will be called with the following config parameters:     *     * - this - The ElementLoader instance.     * - response - The response object.     * - options - Ajax options.     */<span id='Ext-ElementLoader-cfg-callback'>    /**</span>     * @cfg {Function} callback A function to be called when a load request finishes.     * Will be called with the following config parameters:     *     * - this - The ElementLoader instance.     * - success - True if successful request.     * - response - The response object.     * - options - Ajax options.     */<span id='Ext-ElementLoader-cfg-scope'>    /**</span>     * @cfg {Object} scope     * The scope to execute the {@link #success} and {@link #failure} functions in.     */<span id='Ext-ElementLoader-cfg-renderer'>    /**</span>     * @cfg {Function} renderer     * A custom function to render the content to the element. The function should     * return false if the renderer could not be applied. The passed parameters are:     *     * - The loader     * - The response     * - The active request     */<span id='Ext-ElementLoader-property-isLoader'>    /**</span>     * @property {Boolean} isLoader     * `true` in this class to identify an object as an instantiated ElementLoader, or subclass thereof.     */    isLoader: true,    constructor: function(config) {        var me = this,            autoLoad;        config = config || {};        Ext.apply(me, config);        me.setTarget(me.target);        me.addEvents(<span id='Ext-ElementLoader-event-beforeload'>            /**</span>             * @event beforeload             * Fires before a load request is made to the server.             * Returning false from an event listener can prevent the load             * from occurring.             * @param {Ext.ElementLoader} this             * @param {Object} options The options passed to the request             */            'beforeload',<span id='Ext-ElementLoader-event-exception'>            /**</span>             * @event exception             * Fires after an unsuccessful load.             * @param {Ext.ElementLoader} this             * @param {Object} response The response from the server             * @param {Object} options The options passed to the request             */            'exception',<span id='Ext-ElementLoader-event-load'>            /**</span>             * @event load             * Fires after a successful load.             * @param {Ext.ElementLoader} this             * @param {Object} response The response from the server             * @param {Object} options The options passed to the request             */            'load'        );        // don't pass config because we have already applied it.        me.mixins.observable.constructor.call(me);        if (me.autoLoad) {            autoLoad = me.autoLoad;            if (autoLoad === true) {                autoLoad = {};            }            me.load(autoLoad);        }    },<span id='Ext-ElementLoader-method-setTarget'>    /**</span>     * Sets an {@link Ext.Element} as the target of this loader.     * Note that if the target is changed, any active requests will be aborted.     * @param {String/HTMLElement/Ext.Element} target The element or its ID.     */    setTarget: function(target){        var me = this;        target = Ext.get(target);        if (me.target && me.target != target) {            me.abort();        }        me.target = target;    },<span id='Ext-ElementLoader-method-getTarget'>    /**</span>     * Returns the target of this loader.     * @return {Ext.Component} The target or null if none exists.     */    getTarget: function(){        return this.target || null;    },<span id='Ext-ElementLoader-method-abort'>    /**</span>     * Aborts the active load request     */    abort: function(){        var active = this.active;        if (active !== undefined) {            Ext.Ajax.abort(active.request);            if (active.mask) {                this.removeMask();            }            delete this.active;        }    },<span id='Ext-ElementLoader-method-removeMask'>    /**</span>     * Removes the mask on the target     * @private     */    removeMask: function(){        this.target.unmask();    },<span id='Ext-ElementLoader-method-addMask'>    /**</span>     * Adds the mask on the target     * @private     * @param {Boolean/Object} mask The mask configuration     */    addMask: function(mask){        this.target.mask(mask === true ? null : mask);    },<span id='Ext-ElementLoader-method-load'>    /**</span>     * Loads new data from the server.     * @param {Object} options The options for the request. They can be any configuration option that can be specified for     * the class, with the exception of the target option. Note that any options passed to the method will override any     * class defaults.     */    load: function(options) {        //<debug>        if (!this.target) {            Ext.Error.raise('A valid target is required when loading content');        }        //</debug>        options = Ext.apply({}, options);        var me = this,            target = me.target,            mask = Ext.isDefined(options.loadMask) ? options.loadMask : me.loadMask,            params = Ext.apply({}, options.params),            ajaxOptions = Ext.apply({}, options.ajaxOptions),            callback = options.callback || me.callback,            scope = options.scope || me.scope || me,            request;        Ext.applyIf(ajaxOptions, me.ajaxOptions);        Ext.applyIf(options, ajaxOptions);        Ext.applyIf(params, me.params);        Ext.apply(params, me.baseParams);        Ext.applyIf(options, {            url: me.url        });        //<debug>        if (!options.url) {            Ext.Error.raise('You must specify the URL from which content should be loaded');        }        //</debug>        Ext.apply(options, {            scope: me,            params: params,            callback: me.onComplete        });        if (me.fireEvent('beforeload', me, options) === false) {            return;        }        if (mask) {            me.addMask(mask);        }        request = Ext.Ajax.request(options);        me.active = {            request: request,            options: options,            mask: mask,            scope: scope,            callback: callback,            success: options.success || me.success,            failure: options.failure || me.failure,            renderer: options.renderer || me.renderer,            scripts: Ext.isDefined(options.scripts) ? options.scripts : me.scripts        };        me.setOptions(me.active, options);    },<span id='Ext-ElementLoader-method-setOptions'>    /**</span>     * Sets any additional options on the active request     * @private     * @param {Object} active The active request     * @param {Object} options The initial options     */    setOptions: Ext.emptyFn,<span id='Ext-ElementLoader-method-onComplete'>    /**</span>     * Parses the response after the request completes     * @private     * @param {Object} options Ajax options     * @param {Boolean} success Success status of the request     * @param {Object} response The response object     */    onComplete: function(options, success, response) {        var me = this,            active = me.active,            scope = active.scope,            renderer = me.getRenderer(active.renderer);        if (success) {            success = renderer.call(me, me, response, active) !== false;        }        if (success) {            Ext.callback(active.success, scope, [me, response, options]);            me.fireEvent('load', me, response, options);        } else {            Ext.callback(active.failure, scope, [me, response, options]);            me.fireEvent('exception', me, response, options);        }        Ext.callback(active.callback, scope, [me, success, response, options]);        if (active.mask) {            me.removeMask();        }        delete me.active;    },<span id='Ext-ElementLoader-method-getRenderer'>    /**</span>     * Gets the renderer to use     * @private     * @param {String/Function} renderer The renderer to use     * @return {Function} A rendering function to use.     */    getRenderer: function(renderer){        if (Ext.isFunction(renderer)) {            return renderer;        }        return this.statics().Renderer.Html;    },<span id='Ext-ElementLoader-method-startAutoRefresh'>    /**</span>     * Automatically refreshes the content over a specified period.     * @param {Number} interval The interval to refresh in ms.     * @param {Object} options (optional) The options to pass to the load method. See {@link #method-load}     */    startAutoRefresh: function(interval, options){        var me = this;        me.stopAutoRefresh();        me.autoRefresh = setInterval(function(){            me.load(options);        }, interval);    },<span id='Ext-ElementLoader-method-stopAutoRefresh'>    /**</span>     * Clears any auto refresh. See {@link #startAutoRefresh}.     */    stopAutoRefresh: function(){        clearInterval(this.autoRefresh);        delete this.autoRefresh;    },<span id='Ext-ElementLoader-method-isAutoRefreshing'>    /**</span>     * Checks whether the loader is automatically refreshing. See {@link #startAutoRefresh}.     * @return {Boolean} True if the loader is automatically refreshing     */    isAutoRefreshing: function(){        return Ext.isDefined(this.autoRefresh);    },<span id='Ext-ElementLoader-method-destroy'>    /**</span>     * Destroys the loader. Any active requests will be aborted.     */    destroy: function(){        var me = this;        me.stopAutoRefresh();        delete me.target;        me.abort();        me.clearListeners();    }});</pre></body></html>
 |