]> git.mxchange.org Git - friendica-addons.git/blob - jappixmini/jappix/js/jquery.timers.js
Merge pull request #520 from rabuzarus/20180206_-_membersince_frio_support
[friendica-addons.git] / jappixmini / jappix / js / jquery.timers.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: 2009/10/16\r
6  *\r
7  * @author Blair Mitchelmore\r
8  * @version 1.2\r
9  *\r
10  **/\r
11 \r
12 jQuery.fn.extend({\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
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                 global: [],\r
33                 guid: 1,\r
34                 dataKey: "jQuery.timer",\r
35                 regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,\r
36                 powers: {\r
37                         // Yeah this is major overkill...\r
38                         'ms': 1,\r
39                         'cs': 10,\r
40                         'ds': 100,\r
41                         's': 1000,\r
42                         'das': 10000,\r
43                         'hs': 100000,\r
44                         'ks': 1000000\r
45                 },\r
46                 timeParse: function(value) {\r
47                         if (value == undefined || value == null)\r
48                                 return null;\r
49                         var result = this.regex.exec(jQuery.trim(value.toString()));\r
50                         if (result[2]) {\r
51                                 var num = parseFloat(result[1]);\r
52                                 var mult = this.powers[result[2]] || 1;\r
53                                 return num * mult;\r
54                         } else {\r
55                                 return value;\r
56                         }\r
57                 },\r
58                 add: function(element, interval, label, fn, times) {\r
59                         var counter = 0;\r
60 \r
61                         if (jQuery.isFunction(label)) {\r
62                                 if (!times)\r
63                                         times = fn;\r
64                                 fn = label;\r
65                                 label = interval;\r
66                         }\r
67 \r
68                         interval = jQuery.timer.timeParse(interval);\r
69 \r
70                         if (typeof interval != 'number' || isNaN(interval) || interval < 0)\r
71                                 return;\r
72 \r
73                         if (typeof times != 'number' || isNaN(times) || times < 0)\r
74                                 times = 0;\r
75 \r
76                         times = times || 0;\r
77 \r
78                         var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});\r
79 \r
80                         if (!timers[label])\r
81                                 timers[label] = {};\r
82 \r
83                         fn.timerID = fn.timerID || this.guid++;\r
84 \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
88                         };\r
89 \r
90                         handler.timerID = fn.timerID;\r
91 \r
92                         if (!timers[label][fn.timerID])\r
93                                 timers[label][fn.timerID] = window.setInterval(handler,interval);\r
94 \r
95                         this.global.push( element );\r
96 \r
97                 },\r
98                 remove: function(element, label, fn) {\r
99                         var timers = jQuery.data(element, this.dataKey), ret;\r
100 \r
101                         if ( timers ) {\r
102 \r
103                                 if (!label) {\r
104                                         for ( label in timers )\r
105                                                 this.remove(element, label, fn);\r
106                                 } else if ( timers[label] ) {\r
107                                         if ( fn ) {\r
108                                                 if ( fn.timerID ) {\r
109                                                         window.clearInterval(timers[label][fn.timerID]);\r
110                                                         delete timers[label][fn.timerID];\r
111                                                 }\r
112                                         } else {\r
113                                                 for ( var fn in timers[label] ) {\r
114                                                         window.clearInterval(timers[label][fn]);\r
115                                                         delete timers[label][fn];\r
116                                                 }\r
117                                         }\r
118 \r
119                                         for ( ret in timers[label] ) break;\r
120                                         if ( !ret ) {\r
121                                                 ret = null;\r
122                                                 delete timers[label];\r
123                                         }\r
124                                 }\r
125 \r
126                                 for ( ret in timers ) break;\r
127                                 if ( !ret )\r
128                                         jQuery.removeData(element, this.dataKey);\r
129                         }\r
130                 }\r
131         }\r
132 });\r
133 \r
134 jQuery(window).bind("unload", function() {\r
135         jQuery.each(jQuery.timer.global, function(index, item) {\r
136                 jQuery.timer.remove(item);\r
137         });\r
138 });\r