1/******************************************************************************* 2 jquery.mb.components 3 Copyright (c) 2001-2010. Matteo Bicocchi (Pupunzi); Open lab srl, Firenze - Italy 4 email: [email protected] 5 site: http://pupunzi.com 6 7 Licences: MIT, GPL 8 http://www.opensource.org/licenses/mit-license.php 9 http://www.gnu.org/licenses/gpl.html 10 ******************************************************************************/ 11 12jQuery.fn.extend({ 13 everyTime: function(interval, label, fn, times, belay) { 14 return this.each(function() { 15 jQuery.timer.add(this, interval, label, fn, times, belay); 16 }); 17 }, 18 oneTime: function(interval, label, fn) { 19 return this.each(function() { 20 jQuery.timer.add(this, interval, label, fn, 1); 21 }); 22 }, 23 stopTime: function(label, fn) { 24 return this.each(function() { 25 jQuery.timer.remove(this, label, fn); 26 }); 27 } 28}); 29 30jQuery.extend({ 31 timer: { 32 guid: 1, 33 global: {}, 34 regex: /^([0-9]+)\s*(.*s)?$/, 35 powers: { 36 // Yeah this is major overkill... 37 'ms': 1, 38 'cs': 10, 39 'ds': 100, 40 's': 1000, 41 'das': 10000, 42 'hs': 100000, 43 'ks': 1000000 44 }, 45 timeParse: function(value) { 46 if (value == undefined || value == null) 47 return null; 48 var result = this.regex.exec(jQuery.trim(value.toString())); 49 if (result[2]) { 50 var num = parseInt(result[1], 10); 51 var mult = this.powers[result[2]] || 1; 52 return num * mult; 53 } else { 54 return value; 55 } 56 }, 57 add: function(element, interval, label, fn, times, belay) { 58 var counter = 0; 59 60 if (jQuery.isFunction(label)) { 61 if (!times) 62 times = fn; 63 fn = label; 64 label = interval; 65 } 66 67 interval = jQuery.timer.timeParse(interval); 68 69 if (typeof interval != 'number' || isNaN(interval) || interval <= 0) 70 return; 71 72 if (times && times.constructor != Number) { 73 belay = !!times; 74 times = 0; 75 } 76 77 times = times || 0; 78 belay = belay || false; 79 80 if (!element.$timers) 81 element.$timers = {}; 82 83 if (!element.$timers[label]) 84 element.$timers[label] = {}; 85 86 fn.$timerID = fn.$timerID || this.guid++; 87 88 var handler = function() { 89 if (belay && this.inProgress) 90 return; 91 this.inProgress = true; 92 if ((++counter > times && times !== 0) || fn.call(element, counter) === false) 93 jQuery.timer.remove(element, label, fn); 94 this.inProgress = false; 95 }; 96 97 handler.$timerID = fn.$timerID; 98 99 if (!element.$timers[label][fn.$timerID]) 100 element.$timers[label][fn.$timerID] = window.setInterval(handler,interval); 101 102 if ( !this.global[label] ) 103 this.global[label] = []; 104 this.global[label].push( element ); 105 106 }, 107 remove: function(element, label, fn) { 108 var timers = element.$timers, ret; 109 110 if ( timers ) { 111 112 if (!label) { 113 for ( label in timers ) 114 this.remove(element, label, fn); 115 } else if ( timers[label] ) { 116 if ( fn ) { 117 if ( fn.$timerID ) { 118 window.clearInterval(timers[label][fn.$timerID]); 119 delete timers[label][fn.$timerID]; 120 } 121 } else { 122 for ( var fn in timers[label] ) { 123 window.clearInterval(timers[label][fn]); 124 delete timers[label][fn]; 125 } 126 } 127 128 for ( ret in timers[label] ) break; 129 if ( !ret ) { 130 ret = null; 131 delete timers[label]; 132 } 133 } 134 135 for ( ret in timers ) break; 136 if ( !ret ) 137 element.$timers = null; 138 } 139 } 140 } 141}); 142 143if (jQuery.browser.msie) 144 jQuery(window).one("unload", function() { 145 var global = jQuery.timer.global; 146 for ( var label in global ) { 147 var els = global[label], i = els.length; 148 while ( --i ) 149 jQuery.timer.remove(els[i], label); 150 } 151 }); 152 153
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.