2 everyTime: function(interval
, label
, fn
, times
, belay
) {
3 return this.each(function() {
4 jQuery
.timer
.add(this, interval
, label
, fn
, times
, belay
);
7 oneTime: function(interval
, label
, fn
) {
8 return this.each(function() {
9 jQuery
.timer
.add(this, interval
, label
, fn
, 1);
12 stopTime: function(label
, fn
) {
13 return this.each(function() {
14 jQuery
.timer
.remove(this, label
, fn
);
23 regex
: /^([0-9]+)\s*(.*s)?$/,
25 // Yeah this is major overkill...
34 timeParse: function(value
) {
35 if (value
== undefined || value
== null)
37 var result
= this.regex
.exec(jQuery
.trim(value
.toString()));
39 var num
= parseInt(result
[1], 10);
40 var mult
= this.powers
[result
[2]] || 1;
46 add: function(element
, interval
, label
, fn
, times
, belay
) {
49 if (jQuery
.isFunction(label
)) {
56 interval
= jQuery
.timer
.timeParse(interval
);
58 if (typeof interval
!= 'number' || isNaN(interval
) || interval
<= 0)
61 if (times
&& times
.constructor != Number
) {
67 belay
= belay
|| false;
72 if (!element
.$timers
[label
])
73 element
.$timers
[label
] = {};
75 fn
.$timerID
= fn
.$timerID
|| this.guid
++;
77 var handler = function() {
78 if (belay
&& this.inProgress
)
80 this.inProgress
= true;
81 if ((++counter
> times
&& times
!== 0) || fn
.call(element
, counter
) === false)
82 jQuery
.timer
.remove(element
, label
, fn
);
83 this.inProgress
= false;
86 handler
.$timerID
= fn
.$timerID
;
88 if (!element
.$timers
[label
][fn
.$timerID
])
89 element
.$timers
[label
][fn
.$timerID
] = window
.setInterval(handler
,interval
);
91 if ( !this.global
[label
] )
92 this.global
[label
] = [];
93 this.global
[label
].push( element
);
96 remove: function(element
, label
, fn
) {
97 var timers
= element
.$timers
, ret
;
102 for ( label
in timers
)
103 this.remove(element
, label
, fn
);
104 } else if ( timers
[label
] ) {
107 window
.clearInterval(timers
[label
][fn
.$timerID
]);
108 delete timers
[label
][fn
.$timerID
];
111 for ( var fn
in timers
[label
] ) {
112 window
.clearInterval(timers
[label
][fn
]);
113 delete timers
[label
][fn
];
117 for ( ret
in timers
[label
] ) break;
120 delete timers
[label
];
124 for ( ret
in timers
) break;
126 element
.$timers
= null;
132 if (jQuery
.browser
.msie
)
133 jQuery(window
).one("unload", function() {
134 var global
= jQuery
.timer
.global
;
135 for ( var label
in global
) {
136 var els
= global
[label
], i
= els
.length
;
138 jQuery
.timer
.remove(els
[i
], label
);