#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: datasource/js/datasource-polling.js

    /**
     * Extends DataSource with polling functionality.
     *
     * @module datasource
     * @submodule datasource-polling
     */

    /**
     * Adds polling to the DataSource Utility.
     * @class Pollable
     * @extends DataSource.Local
     */
    function Pollable() {
        this._intervals = {};
    }

    Pollable.prototype = {

        /**
        * @property _intervals
        * @description Hash of polling interval IDs that have been enabled,
        * stored here to be able to clear all intervals.
        * @private
        */
        _intervals: null,

        /**
         * Sets up a polling mechanism to send requests at set intervals and
         * forward responses to given callback.
         *
         * @method setInterval
         * @param msec {Number} Length of interval in milliseconds.
         * @param [request] {Object} An object literal with the following properties:
         *     <dl>
         *     <dt><code>request</code></dt>
         *     <dd>The request to send to the live data source, if any.</dd>
         *     <dt><code>callback</code></dt>
         *     <dd>An object literal with the following properties:
         *         <dl>
         *         <dt><code>success</code></dt>
         *         <dd>The function to call when the data is ready.</dd>
         *         <dt><code>failure</code></dt>
         *         <dd>The function to call upon a response failure condition.</dd>
         *         <dt><code>argument</code></dt>
         *         <dd>Arbitrary data payload that will be passed back to the success and failure handlers.</dd>
         *         </dl>
         *     </dd>
         *     <dt><code>cfg</code></dt>
         *     <dd>Configuration object, if any.</dd>
         *     </dl>
         * @return {Number} Interval ID.
         */
        setInterval: function(msec, request) {
            var x = Y.later(msec, this, this.sendRequest, [ request ], true);
            this._intervals[x.id] = x;
            // First call happens immediately, but async
            Y.later(0, this, this.sendRequest, [request]);
            return x.id;
        },

        /**
         * Disables polling mechanism associated with the given interval ID.
         *
         * @method clearInterval
         * @param id {Number} Interval ID.
         */
        clearInterval: function(id, key) {
            // In case of being called by clearAllIntervals()
            id = key || id;
            if(this._intervals[id]) {
                // Clear the interval
                this._intervals[id].cancel();
                // Clear from tracker
                delete this._intervals[id];
            }
        },

        /**
         * Clears all intervals.
         *
         * @method clearAllIntervals
         */
        clearAllIntervals: function() {
            Y.each(this._intervals, this.clearInterval, this);
        }
    };

    Y.augment(Y.DataSource.Local, Pollable);