Start of inventory app page.
[htsworkflow.git] / htsworkflow / frontend / static / js / jquery.timers-1.0.0.js
1 /**\r
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
5  * Date: 2008/08/26\r
6  *\r
7  * @author Blair Mitchelmore\r
8  * @version 1.0.0\r
9  *\r
10  **/\r
11 \r
12 jQuery.fn.extend({\r
13         everyTime: function(interval, label, fn, times, belay) {\r
14                 return this.each(function() {\r
15                         jQuery.timer.add(this, interval, label, fn, times, belay);\r
16                 });\r
17         },\r
18         oneTime: function(interval, label, fn) {\r
19                 return this.each(function() {\r
20                         jQuery.timer.add(this, interval, label, fn, 1);\r
21                 });\r
22         },\r
23         stopTime: function(label, fn) {\r
24                 return this.each(function() {\r
25                         jQuery.timer.remove(this, label, fn);\r
26                 });\r
27         }\r
28 });\r
29 \r
30 jQuery.extend({\r
31         timer: {\r
32                 guid: 1,\r
33                 global: {},\r
34                 regex: /^([0-9]+)\s*(.*s)?$/,\r
35                 powers: {\r
36                         // Yeah this is major overkill...\r
37                         'ms': 1,\r
38                         'cs': 10,\r
39                         'ds': 100,\r
40                         's': 1000,\r
41                         'das': 10000,\r
42                         'hs': 100000,\r
43                         'ks': 1000000\r
44                 },\r
45                 timeParse: function(value) {\r
46                         if (value == undefined || value == null)\r
47                                 return null;\r
48                         var result = this.regex.exec(jQuery.trim(value.toString()));\r
49                         if (result[2]) {\r
50                                 var num = parseInt(result[1], 10);\r
51                                 var mult = this.powers[result[2]] || 1;\r
52                                 return num * mult;\r
53                         } else {\r
54                                 return value;\r
55                         }\r
56                 },\r
57                 add: function(element, interval, label, fn, times, belay) {\r
58                         var counter = 0;\r
59                         \r
60                         if (jQuery.isFunction(label)) {\r
61                                 if (!times) \r
62                                         times = fn;\r
63                                 fn = label;\r
64                                 label = interval;\r
65                         }\r
66                         \r
67                         interval = jQuery.timer.timeParse(interval);\r
68 \r
69                         if (typeof interval != 'number' || isNaN(interval) || interval <= 0)\r
70                                 return;\r
71 \r
72                         if (times && times.constructor != Number) {\r
73                                 belay = !!times;\r
74                                 times = 0;\r
75                         }\r
76                         \r
77                         times = times || 0;\r
78                         belay = belay || false;\r
79                         \r
80                         if (!element.$timers) \r
81                                 element.$timers = {};\r
82                         \r
83                         if (!element.$timers[label])\r
84                                 element.$timers[label] = {};\r
85                         \r
86                         fn.$timerID = fn.$timerID || this.guid++;\r
87                         \r
88                         var handler = function() {\r
89                                 if (belay && this.inProgress) \r
90                                         return;\r
91                                 this.inProgress = true;\r
92                                 if ((++counter > times && times !== 0) || fn.call(element, counter) === false)\r
93                                         jQuery.timer.remove(element, label, fn);\r
94                                 this.inProgress = false;\r
95                         };\r
96                         \r
97                         handler.$timerID = fn.$timerID;\r
98                         \r
99                         if (!element.$timers[label][fn.$timerID]) \r
100                                 element.$timers[label][fn.$timerID] = window.setInterval(handler,interval);\r
101                         \r
102                         if ( !this.global[label] )\r
103                                 this.global[label] = [];\r
104                         this.global[label].push( element );\r
105                         \r
106                 },\r
107                 remove: function(element, label, fn) {\r
108                         var timers = element.$timers, ret;\r
109                         \r
110                         if ( timers ) {\r
111                                 \r
112                                 if (!label) {\r
113                                         for ( label in timers )\r
114                                                 this.remove(element, label, fn);\r
115                                 } else if ( timers[label] ) {\r
116                                         if ( fn ) {\r
117                                                 if ( fn.$timerID ) {\r
118                                                         window.clearInterval(timers[label][fn.$timerID]);\r
119                                                         delete timers[label][fn.$timerID];\r
120                                                 }\r
121                                         } else {\r
122                                                 for ( var fn in timers[label] ) {\r
123                                                         window.clearInterval(timers[label][fn]);\r
124                                                         delete timers[label][fn];\r
125                                                 }\r
126                                         }\r
127                                         \r
128                                         for ( ret in timers[label] ) break;\r
129                                         if ( !ret ) {\r
130                                                 ret = null;\r
131                                                 delete timers[label];\r
132                                         }\r
133                                 }\r
134                                 \r
135                                 for ( ret in timers ) break;\r
136                                 if ( !ret ) \r
137                                         element.$timers = null;\r
138                         }\r
139                 }\r
140         }\r
141 });\r
142 \r
143 if (jQuery.browser.msie)\r
144         jQuery(window).one("unload", function() {\r
145                 var global = jQuery.timer.global;\r
146                 for ( var label in global ) {\r
147                         var els = global[label], i = els.length;\r
148                         while ( --i )\r
149                                 jQuery.timer.remove(els[i], label);\r
150                 }\r
151         });\r