2 * jQuery.timers - Timer abstractions for jQuery
\r
3 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
\r
4 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
\r
7 * @author Blair Mitchelmore
\r
13 everyTime: function(interval, label, fn, times) {
\r
14 return this.each(function() {
\r
15 jQuery.timer.add(this, interval, label, fn, times);
\r
18 oneTime: function(interval, label, fn) {
\r
19 return this.each(function() {
\r
20 jQuery.timer.add(this, interval, label, fn, 1);
\r
23 stopTime: function(label, fn) {
\r
24 return this.each(function() {
\r
25 jQuery.timer.remove(this, label, fn);
\r
34 dataKey: "jQuery.timer",
\r
35 regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
\r
37 // Yeah this is major overkill...
\r
46 timeParse: function(value) {
\r
47 if (value == undefined || value == null)
\r
49 var result = this.regex.exec(jQuery.trim(value.toString()));
\r
51 var num = parseFloat(result[1]);
\r
52 var mult = this.powers[result[2]] || 1;
\r
58 add: function(element, interval, label, fn, times) {
\r
61 if (jQuery.isFunction(label)) {
\r
68 interval = jQuery.timer.timeParse(interval);
\r
70 if (typeof interval != 'number' || isNaN(interval) || interval < 0)
\r
73 if (typeof times != 'number' || isNaN(times) || times < 0)
\r
78 var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});
\r
83 fn.timerID = fn.timerID || this.guid++;
\r
85 var handler = function() {
\r
86 if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
\r
87 jQuery.timer.remove(element, label, fn);
\r
90 handler.timerID = fn.timerID;
\r
92 if (!timers[label][fn.timerID])
\r
93 timers[label][fn.timerID] = window.setInterval(handler,interval);
\r
95 this.global.push( element );
\r
98 remove: function(element, label, fn) {
\r
99 var timers = jQuery.data(element, this.dataKey), ret;
\r
104 for ( label in timers )
\r
105 this.remove(element, label, fn);
\r
106 } else if ( timers[label] ) {
\r
108 if ( fn.timerID ) {
\r
109 window.clearInterval(timers[label][fn.timerID]);
\r
110 delete timers[label][fn.timerID];
\r
113 for ( var fn in timers[label] ) {
\r
114 window.clearInterval(timers[label][fn]);
\r
115 delete timers[label][fn];
\r
119 for ( ret in timers[label] ) break;
\r
122 delete timers[label];
\r
126 for ( ret in timers ) break;
\r
128 jQuery.removeData(element, this.dataKey);
\r
134 jQuery(window).bind("unload", function() {
\r
135 jQuery.each(jQuery.timer.global, function(index, item) {
\r
136 jQuery.timer.remove(item);
\r