Skip to content
This repository has been archived by the owner on Nov 10, 2017. It is now read-only.

Commit

Permalink
Update jquery.poller.js
Browse files Browse the repository at this point in the history
  • Loading branch information
gcphost committed Apr 26, 2014
1 parent e533db2 commit 1fe26cb
Showing 1 changed file with 93 additions and 73 deletions.
166 changes: 93 additions & 73 deletions jquery.poller.js
Original file line number Diff line number Diff line change
@@ -1,51 +1,66 @@
(function( $ ){
var methods = {
init : function(options) {
settings = $.extend({
url: "polling",
pols:[],
last_active:new Date().getTime(),
run_count:1,
poll_timer:false,
default_delay:8000, // ms
default_delay_cap:300, // seconds
default_max_delay:15000, // ms
}, options );
;(function ( $, window, document, undefined ) {

$('*').bind('mousemove keydown scroll', function () {
if((new Date().getTime()- settings.last_active)/1000 > settings.default_delay_cap) $.fn.poller('restart');
settings.last_active=new Date().getTime();
});
var settings='';
var pluginName = 'poller',
defaults = {
url: "pollytfing",
pols:[],
last_active:new Date().getTime(),
run_count:0,
poll_timer:false,
default_delay:8000, // ms
default_delay_cap:300, // seconds
default_max_delay:16000 // ms
};

},
add : function(_c) {
settings.pols.push({'id':_c.id, 'type':_c.type, 'ratio':_c.ratio});
},
run : function( ) {
var _delay=settings.default_delay;
var _delay_cap=settings.default_delay_cap;
var _max_delay=settings.default_max_delay;
var _d=(new Date().getTime()- settings.last_active)/1000;
function Plugin(options ) {
this.options = $.extend( {}, defaults, options) ;
settings=this.options;
this._defaults = defaults;
this._name = pluginName;

if(_d > (_delay_cap/4)) _delay = (_max_delay/4);
if(_d > (_delay_cap/3)) _delay = (_max_delay/3);
if(_d > (_delay_cap/2)) _delay = (_max_delay/2);
if(_d > _delay_cap) _delay = _max_delay;
this.init();
}

settings.poll_timer=setTimeout(function(){
var _final_pols=[];
$.each(settings.pols, function(i,value){
if(settings.run_count % value.ratio === 0){
_final_pols.push(value);
}
});
Plugin.prototype.init = function () {
$('*').bind('mousemove keydown scroll', function () {
if((new Date().getTime()- settings.last_active)/1000 > settings.default_delay_cap) Plugin.prototype.restart();
settings.last_active=new Date().getTime();
});
};

Plugin.prototype.add = function (_c) {
settings.pols.push({'id':_c.id, 'type':_c.type, 'ratio':_c.ratio});
};

if(_final_pols.length > 0){
$.ajax({
url: settings.url,
type: "POST",
data: {'polls':JSON.stringify(_final_pols)},
complete: function(data){
Plugin.prototype.run = function () {
var _delay=settings.default_delay;
var _default_delay=settings.default_delay;
var _delay_cap=settings.default_delay_cap;
var _max_delay=settings.default_max_delay;
var _d=(new Date().getTime()- settings.last_active)/1000;

if(_d > (_delay_cap/4)) _delay = (_default_delay+(_default_delay/4));
if(_d > (_delay_cap/3)) _delay = (_default_delay+(_default_delay/3));
if(_d > (_delay_cap/2)) _delay = (_default_delay+(_default_delay/2));
if(_d > _delay_cap) _delay = _max_delay;

settings.poll_timer=setTimeout(function(){
var _final_pols=[];

$.each(settings.pols, function(i,value){
if(settings.run_count % value.ratio === 0){
_final_pols.push(value);
}
});

if(_final_pols.length > 0){
$.ajax({
url: settings.url,
type: "POST",
data: {'polls':JSON.stringify(_final_pols)},
complete: function(data){
if(data.responseJSON){
$.each(data.responseJSON, function(i,value){
switch (value.type) {
case "html":
Expand All @@ -57,37 +72,42 @@
break;
}
});
settings.run_count=settings.run_count+1;
$.fn.poller('run');
},
dataType: "json"
});
} else {
settings.run_count=settings.run_count+1;
$.fn.poller('run');
}
}, _delay);


},
restart : function( ) {
window.clearTimeout(settings.poll_timer);
$.fn.poller('run');
},
};

$.fn.poller = function(methodOrOptions) {
if ( methods[methodOrOptions] ) {
return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
// Default to "init"
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.poller' );
}
};
}
settings.run_count=settings.run_count+1;
Plugin.prototype.run();
},
dataType: "json"
});
} else {
settings.run_count=settings.run_count+1;
Plugin.prototype.run();
}
}, _delay);
};

Plugin.prototype.restart = function () {
window.clearTimeout(settings.poll_timer);
this.run();
};

})( jQuery );

$.fn.poller = function ( options ) {
var args = arguments;
if (options === undefined || typeof options === 'object') {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName, new Plugin( options ));
}
} else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
var returns;
var instance = $.data(this, 'plugin_' + pluginName);
if (instance instanceof Plugin && typeof instance[options] === 'function') {
returns = instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
}
if (options === 'destroy') {
$.data(this, 'plugin_' + pluginName, null);
}
return returns !== undefined ? returns : this;
}
};

}(jQuery, window, document));

0 comments on commit 1fe26cb

Please sign in to comment.