View file upload/js/XenCentral/Feedback/SkyDevRecursiveAjax.js

File size: 2.14Kb
/*
 * @package XenCentral Feedback System
 * @author DNF Technology
 * @copyright Drnoyan & Nalyan LDA, Portugal, EU
 * @license http://dnf.technology/terms/
 * @link http://customers.dnf.technology
 * @version 2.0.0 Beta 10
 * @revision 12
 */
/**
 * @version 1.0.0
 * jQuery Plugin allowing to implement comet technology
 */
(function($){
    $.fn.SkyDevRecursiveAjax = function(options){
        this.defaults = {
            restartInterval: 10000,
            timeout: 30000
        };
        
        this.options = $.extend(this.defaults, options);
        
        var obj = this;
        
        return this.each(function(){
            var elem = this;
            
            if ($(elem).data('SkyDevRecursiveAjax')) {
                // already registered
                return;
            }
            
            $(elem).data('SkyDevRecursiveAjax', obj);
            
            $(elem).data('lastUpdate', 0);
            
            methods.run.apply(elem);
        });
    };
    
    var methods = {
        run: function(){
            var elem = this;
            
            var obj = $(elem).data('SkyDevRecursiveAjax');
            
            var options = $.extend(true, {}, obj.options);
            
            options.complete = function(jqXHR, status){
                if (obj.options.complete) {
                    if (obj.options.context) {
                        var ctx = obj.options.context;
                    }
                    else {
                        var ctx = elem;
                    }
                    obj.options.complete.apply(ctx, [jqXHR, status]);
                }
                
                if (status == 'success' || status == 'notmodified') {
                    $(elem).data('lastUpdate', (new Date()).getTime() / 1000.0);
                }
                
                setTimeout(function(){
                    methods.run.apply(elem);
                }, options.restartInterval);
            };
            
            options.data = $.extend(options.data, {
                lastUpdate: $(elem).data('lastUpdate')
            });
            
            $.ajax(options);
        }
    };
})(jQuery);