Changeset 765e62 in indico


Ignore:
Timestamp:
05/25/11 16:10:36 (2 years ago)
Author:
Adrian Moennich <jerome.ernst.monnich@…>
Branches:
master, hello-world-walkthrough, ipv6, v0.98-series, v0.98.2, v0.98.3, v0.98b2, v0.99, b8c30da8ebdbdcbd675a873997cc3e95f567de49, 4287315ec967a3da168d83963c14001db8487d53
Children:
daf70c
Parents:
431770
Message:

[MIN] Upgrade jQuery 1.6 -> 1.6.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • indico/htdocs/js/jquery/jquery.js

    rfb6f28 r765e62  
    11/*! 
    2  * jQuery JavaScript Library v1.6 
     2 * jQuery JavaScript Library v1.6.1 
    33 * http://jquery.com/ 
    44 * 
     
    1212 * Released under the MIT, BSD, and GPL Licenses. 
    1313 * 
    14  * Date: Mon May 2 13:50:00 2011 -0400 
     14 * Date: Thu May 12 15:04:36 2011 -0400 
    1515 */ 
    1616(function( window, undefined ) { 
     
    205205 
    206206        // The current version of jQuery being used 
    207         jquery: "1.6", 
     207        jquery: "1.6.1", 
    208208 
    209209        // The default length of a jQuery object is 0 
     
    10561056                                                        deferred[ handler ](function() { 
    10571057                                                                returned = fn.apply( this, arguments ); 
    1058                                                                 if ( jQuery.isFunction( returned.promise ) ) { 
     1058                                                                if ( returned && jQuery.isFunction( returned.promise ) ) { 
    10591059                                                                        returned.promise().then( newDefer.resolve, newDefer.reject ); 
    10601060                                                                } else { 
     
    11381138 
    11391139        var div = document.createElement( "div" ), 
     1140                documentElement = document.documentElement, 
    11401141                all, 
    11411142                a, 
     
    12851286        } 
    12861287        body.appendChild( div ); 
    1287         document.documentElement.appendChild( body ); 
     1288        documentElement.insertBefore( body, documentElement.firstChild ); 
    12881289 
    12891290        // Check if a disconnected checkbox will retain its checked 
     
    13401341                div.appendChild( marginDiv ); 
    13411342                support.reliableMarginRight = 
    1342                         ( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0; 
     1343                        ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; 
    13431344        } 
    13441345 
    13451346        // Remove the body element we added 
    13461347        body.innerHTML = ""; 
    1347         document.documentElement.removeChild( body ); 
     1348        documentElement.removeChild( body ); 
    13481349 
    13491350        // Technique from Juriy Zaytsev 
     
    14761477 
    14771478                if ( data !== undefined ) { 
    1478                         thisCache[ name ] = data; 
     1479                        thisCache[ jQuery.camelCase( name ) ] = data; 
    14791480                } 
    14801481 
     
    14861487                } 
    14871488 
    1488                 return getByName ? thisCache[ name ] : thisCache; 
     1489                return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache; 
    14891490        }, 
    14901491 
     
    16621663        // data from the HTML5 data-* attribute 
    16631664        if ( data === undefined && elem.nodeType === 1 ) { 
    1664                 name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); 
     1665                var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); 
    16651666 
    16661667                data = elem.getAttribute( name ); 
     
    18511852                        deferDataKey = type + "defer", 
    18521853                        queueDataKey = type + "queue", 
    1853                         markDataKey = type + "mark"; 
     1854                        markDataKey = type + "mark", 
     1855                        tmp; 
    18541856                function resolve() { 
    18551857                        if ( !( --count ) ) { 
     
    18801882        rfocusable = /^(?:button|input|object|select|textarea)$/i, 
    18811883        rclickable = /^a(?:rea)?$/i, 
    1882         rspecial = /^(?:data-|aria-)/, 
     1884        rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, 
    18831885        rinvalidChar = /\:/, 
    1884         formHook; 
     1886        formHook, boolHook; 
    18851887 
    18861888jQuery.fn.extend({ 
     
    19001902         
    19011903        removeProp: function( name ) { 
     1904                name = jQuery.propFix[ name ] || name; 
    19021905                return this.each(function() { 
    19031906                        // try/catch handles cases where IE balks (such as removing a property on window) 
     
    20732076 
    20742077                        // If set returns undefined, fall back to normal setting 
    2075                         if ( !hooks || ("set" in hooks && hooks.set( this, val, "value" ) === undefined) ) { 
     2078                        if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { 
    20762079                                this.value = val; 
    20772080                        } 
     
    20922095                select: { 
    20932096                        get: function( elem ) { 
    2094                                 var index = elem.selectedIndex, 
     2097                                var value, 
     2098                                        index = elem.selectedIndex, 
    20952099                                        values = [], 
    20962100                                        options = elem.options, 
     
    21592163        attrFix: { 
    21602164                // Always normalize to ensure hook usage 
    2161                 tabindex: "tabIndex", 
    2162                 readonly: "readOnly" 
     2165                tabindex: "tabIndex" 
    21632166        }, 
    21642167         
     
    21742177                        return jQuery( elem )[ name ]( value ); 
    21752178                } 
    2176                  
     2179 
     2180                // Fallback to prop when attributes are not supported 
     2181                if ( !("getAttribute" in elem) ) { 
     2182                        return jQuery.prop( elem, name, value ); 
     2183                } 
     2184 
    21772185                var ret, hooks, 
    21782186                        notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 
    2179                  
     2187 
    21802188                // Normalize the name if needed 
    21812189                name = notxml && jQuery.attrFix[ name ] || name; 
    21822190 
    2183                 // Get the appropriate hook, or the formHook 
    2184                 // if getSetAttribute is not supported and we have form objects in IE6/7 
    2185                 hooks = jQuery.attrHooks[ name ] || 
    2186                         ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ? 
    2187                                 formHook : 
    2188                                 undefined ); 
     2191                hooks = jQuery.attrHooks[ name ]; 
     2192 
     2193                if ( !hooks ) { 
     2194                        // Use boolHook for boolean attributes 
     2195                        if ( rboolean.test( name ) && 
     2196                                (typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) { 
     2197 
     2198                                hooks = boolHook; 
     2199 
     2200                        // Use formHook for forms and if the name contains certain characters 
     2201                        } else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { 
     2202                                hooks = formHook; 
     2203                        } 
     2204                } 
    21892205 
    21902206                if ( value !== undefined ) { 
    21912207 
    2192                         if ( value === null || (value === false && !rspecial.test( name )) ) { 
     2208                        if ( value === null ) { 
    21932209                                jQuery.removeAttr( elem, name ); 
    21942210                                return undefined; 
     
    21982214 
    21992215                        } else { 
    2200  
    2201                                 // Set boolean attributes to the same name 
    2202                                 if ( value === true && !rspecial.test( name ) ) { 
    2203                                         value = name; 
    2204                                 } 
    2205  
    22062216                                elem.setAttribute( name, "" + value ); 
    22072217                                return value; 
    22082218                        } 
    22092219 
     2220                } else if ( hooks && "get" in hooks && notxml ) { 
     2221                        return hooks.get( elem, name ); 
     2222 
    22102223                } else { 
    22112224 
    2212                         if ( hooks && "get" in hooks && notxml ) { 
    2213                                 return hooks.get( elem, name ); 
    2214  
    2215                         } else { 
    2216  
    2217                                 ret = elem.getAttribute( name ); 
    2218  
    2219                                 // Non-existent attributes return null, we normalize to undefined 
    2220                                 return ret === null ? 
    2221                                         undefined : 
    2222                                         ret; 
    2223                         } 
    2224                 } 
    2225         }, 
    2226          
     2225                        ret = elem.getAttribute( name ); 
     2226 
     2227                        // Non-existent attributes return null, we normalize to undefined 
     2228                        return ret === null ? 
     2229                                undefined : 
     2230                                ret; 
     2231                } 
     2232        }, 
     2233 
    22272234        removeAttr: function( elem, name ) { 
     2235                var propName; 
    22282236                if ( elem.nodeType === 1 ) { 
    22292237                        name = jQuery.attrFix[ name ] || name; 
     
    22352243                                jQuery.attr( elem, name, "" ); 
    22362244                                elem.removeAttributeNode( elem.getAttributeNode( name ) ); 
     2245                        } 
     2246 
     2247                        // Set corresponding property to false for boolean attributes 
     2248                        if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { 
     2249                                elem[ propName ] = false; 
    22372250                        } 
    22382251                } 
     
    22492262                                        // Reset value to it's default in case type is set after value 
    22502263                                        // This is for element creation 
    2251                                         var val = elem.getAttribute("value"); 
     2264                                        var val = elem.value; 
    22522265                                        elem.setAttribute( "type", value ); 
    22532266                                        if ( val ) { 
     
    22722285                } 
    22732286        }, 
    2274          
    2275         propFix: {}, 
    2276          
    2277         prop: function( elem, name, value ) { 
    2278                 var nType = elem.nodeType; 
    2279                  
    2280                 // don't get/set properties on text, comment and attribute nodes 
    2281                 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 
    2282                         return undefined; 
    2283                 } 
    2284                  
    2285                 var ret, hooks, 
    2286                         notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 
    2287                  
    2288                 // Try to normalize/fix the name 
    2289                 name = notxml && jQuery.propFix[ name ] || name; 
    2290                  
    2291                 hooks = jQuery.propHooks[ name ]; 
    2292                  
    2293                 if ( value !== undefined ) { 
    2294                         if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { 
    2295                                 return ret; 
    2296                          
    2297                         } else { 
    2298                                 return (elem[ name ] = value); 
    2299                         } 
    2300                  
    2301                 } else { 
    2302                         if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { 
    2303                                 return ret; 
    2304                                  
    2305                         } else { 
    2306                                 return elem[ name ]; 
    2307                         } 
    2308                 } 
    2309         }, 
    2310          
    2311         propHooks: {} 
    2312 }); 
    2313  
    2314 // IE6/7 do not support getting/setting some attributes with get/setAttribute 
    2315 if ( !jQuery.support.getSetAttribute ) { 
    2316         jQuery.attrFix = jQuery.extend( jQuery.attrFix, { 
     2287 
     2288        propFix: { 
     2289                tabindex: "tabIndex", 
     2290                readonly: "readOnly", 
    23172291                "for": "htmlFor", 
    23182292                "class": "className", 
     
    23232297                colspan: "colSpan", 
    23242298                usemap: "useMap", 
    2325                 frameborder: "frameBorder" 
    2326         }); 
     2299                frameborder: "frameBorder", 
     2300                contenteditable: "contentEditable" 
     2301        }, 
     2302         
     2303        prop: function( elem, name, value ) { 
     2304                var nType = elem.nodeType; 
     2305 
     2306                // don't get/set properties on text, comment and attribute nodes 
     2307                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 
     2308                        return undefined; 
     2309                } 
     2310 
     2311                var ret, hooks, 
     2312                        notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 
     2313 
     2314                // Try to normalize/fix the name 
     2315                name = notxml && jQuery.propFix[ name ] || name; 
     2316                 
     2317                hooks = jQuery.propHooks[ name ]; 
     2318 
     2319                if ( value !== undefined ) { 
     2320                        if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { 
     2321                                return ret; 
     2322 
     2323                        } else { 
     2324                                return (elem[ name ] = value); 
     2325                        } 
     2326 
     2327                } else { 
     2328                        if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { 
     2329                                return ret; 
     2330 
     2331                        } else { 
     2332                                return elem[ name ]; 
     2333                        } 
     2334                } 
     2335        }, 
     2336         
     2337        propHooks: {} 
     2338}); 
     2339 
     2340// Hook for boolean attributes 
     2341boolHook = { 
     2342        get: function( elem, name ) { 
     2343                // Align boolean attributes with corresponding properties 
     2344                return elem[ jQuery.propFix[ name ] || name ] ? 
     2345                        name.toLowerCase() : 
     2346                        undefined; 
     2347        }, 
     2348        set: function( elem, value, name ) { 
     2349                var propName; 
     2350                if ( value === false ) { 
     2351                        // Remove boolean attributes when set to false 
     2352                        jQuery.removeAttr( elem, name ); 
     2353                } else { 
     2354                        // value is true since we know at this point it's type boolean and not false 
     2355                        // Set boolean attributes to the same name and set the DOM property 
     2356                        propName = jQuery.propFix[ name ] || name; 
     2357                        if ( propName in elem ) { 
     2358                                // Only set the IDL specifically if it already exists on the element 
     2359                                elem[ propName ] = value; 
     2360                        } 
     2361 
     2362                        elem.setAttribute( name, name.toLowerCase() ); 
     2363                } 
     2364                return name; 
     2365        } 
     2366}; 
     2367 
     2368// Use the value property for back compat 
     2369// Use the formHook for button elements in IE6/7 (#1954) 
     2370jQuery.attrHooks.value = { 
     2371        get: function( elem, name ) { 
     2372                if ( formHook && jQuery.nodeName( elem, "button" ) ) { 
     2373                        return formHook.get( elem, name ); 
     2374                } 
     2375                return elem.value; 
     2376        }, 
     2377        set: function( elem, value, name ) { 
     2378                if ( formHook && jQuery.nodeName( elem, "button" ) ) { 
     2379                        return formHook.set( elem, value, name ); 
     2380                } 
     2381                // Does not return so that setAttribute is also used 
     2382                elem.value = value; 
     2383        } 
     2384}; 
     2385 
     2386// IE6/7 do not support getting/setting some attributes with get/setAttribute 
     2387if ( !jQuery.support.getSetAttribute ) { 
     2388 
     2389        // propFix is more comprehensive and contains all fixes 
     2390        jQuery.attrFix = jQuery.propFix; 
    23272391         
    23282392        // Use this for any attribute on a form in IE6/7 
    2329         formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = { 
     2393        formHook = jQuery.attrHooks.name = jQuery.valHooks.button = { 
    23302394                get: function( elem, name ) { 
    23312395                        var ret; 
    2332                         if ( name === "value" && !jQuery.nodeName( elem, "button" ) ) { 
    2333                                 return elem.getAttribute( name ); 
    2334                         } 
    23352396                        ret = elem.getAttributeNode( name ); 
    2336                         // Return undefined if not specified instead of empty string 
    2337                         return ret && ret.specified ? 
     2397                        // Return undefined if nodeValue is empty string 
     2398                        return ret && ret.nodeValue !== "" ? 
    23382399                                ret.nodeValue : 
    23392400                                undefined; 
     
    30873148        var parent = event.relatedTarget; 
    30883149 
     3150        // set the correct event type 
     3151        event.type = event.data; 
     3152 
    30893153        // Firefox sometimes assigns relatedTarget a XUL element 
    30903154        // which we cannot access the parentNode property of 
     
    30963160                        return; 
    30973161                } 
     3162 
    30983163                // Traverse up the tree 
    30993164                while ( parent && parent !== this ) { 
     
    31023167 
    31033168                if ( parent !== this ) { 
    3104                         // set the correct event type 
    3105                         event.type = event.data; 
    3106  
    31073169                        // handle event if we actually just moused on to a non sub-element 
    31083170                        jQuery.event.handle.apply( this, arguments ); 
     
    42924354 
    42934355                reset: function( elem ) { 
    4294                         return elem.nodeName.toLowerCase() === "input" && "reset" === elem.type; 
     4356                        var name = elem.nodeName.toLowerCase(); 
     4357                        return (name === "input" || name === "button") && "reset" === elem.type; 
    42954358                }, 
    42964359 
     
    45584621} else { 
    45594622        sortOrder = function( a, b ) { 
     4623                // The nodes are identical, we can exit early 
     4624                if ( a === b ) { 
     4625                        hasDuplicate = true; 
     4626                        return 0; 
     4627 
     4628                // Fallback to using sourceIndex (in IE) if it's available on both nodes 
     4629                } else if ( a.sourceIndex && b.sourceIndex ) { 
     4630                        return a.sourceIndex - b.sourceIndex; 
     4631                } 
     4632 
    45604633                var al, bl, 
    45614634                        ap = [], 
     
    45654638                        cur = aup; 
    45664639 
    4567                 // The nodes are identical, we can exit early 
    4568                 if ( a === b ) { 
    4569                         hasDuplicate = true; 
    4570                         return 0; 
    4571  
    45724640                // If the nodes are siblings (or identical) we can do a quick check 
    4573                 } else if ( aup === bup ) { 
     4641                if ( aup === bup ) { 
    45744642                        return siblingCheck( a, b ); 
    45754643 
     
    53955463        rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 
    53965464        rscriptType = /\/(java|ecma)script/i, 
     5465        rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/, 
    53975466        wrapMap = { 
    53985467                option: [ 1, "<select multiple='multiple'>", "</select>" ], 
     
    58855954        if ( "getElementsByTagName" in elem ) { 
    58865955                return elem.getElementsByTagName( "*" ); 
    5887          
     5956 
    58885957        } else if ( "querySelectorAll" in elem ) { 
    58895958                return elem.querySelectorAll( "*" ); 
     
    59676036                } 
    59686037 
    5969                 var ret = []; 
     6038                var ret = [], j; 
    59706039 
    59716040                for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { 
     
    60136082                                                                        []; 
    60146083 
    6015                                                 for ( var j = tbody.length - 1; j >= 0 ; --j ) { 
     6084                                                for ( j = tbody.length - 1; j >= 0 ; --j ) { 
    60166085                                                        if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { 
    60176086                                                                tbody[ j ].parentNode.removeChild( tbody[ j ] ); 
     
    60346103                        if ( !jQuery.support.appendChecked ) { 
    60356104                                if ( elem[0] && typeof (len = elem.length) === "number" ) { 
    6036                                         for ( i = 0; i < len; i++ ) { 
    6037                                                 findInputs( elem[i] ); 
     6105                                        for ( j = 0; j < len; j++ ) { 
     6106                                                findInputs( elem[j] ); 
    60386107                                        } 
    60396108                                } else { 
     
    61236192                }); 
    61246193        } else { 
    6125                 jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); 
     6194                jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); 
    61266195        } 
    61276196 
     
    80008069                } 
    80018070 
     8071                // Do not change referenced properties as per-property easing will be lost 
     8072                prop = jQuery.extend( {}, prop ); 
     8073 
    80028074                return this[ optall.queue === false ? "each" : "queue" ](function() { 
    80038075                        // XXX 'this' does not always have a nodeName when running the 
     
    80088080                        } 
    80098081 
    8010                         var opt = jQuery.extend({}, optall), 
     8082                        var opt = jQuery.extend( {}, optall ), 
    80118083                                isElement = this.nodeType === 1, 
    80128084                                hidden = isElement && jQuery(this).is(":hidden"), 
     
    80278099                                } 
    80288100 
    8029                                 val = prop[name]; 
     8101                                val = prop[ name ]; 
     8102 
     8103                                // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) 
     8104                                if ( jQuery.isArray( val ) ) { 
     8105                                        opt.animatedProperties[ name ] = val[ 1 ]; 
     8106                                        val = prop[ name ] = val[ 0 ]; 
     8107                                } else { 
     8108                                        opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing'; 
     8109                                } 
    80308110 
    80318111                                if ( val === "hide" && hidden || val === "show" && !hidden ) { 
    8032                                         return opt.complete.call(this); 
     8112                                        return opt.complete.call( this ); 
    80338113                                } 
    80348114 
     
    80498129 
    80508130                                                } else { 
    8051                                                         display = defaultDisplay(this.nodeName); 
     8131                                                        display = defaultDisplay( this.nodeName ); 
    80528132 
    80538133                                                        // inline-level elements accept inline-block; 
     
    80638143                                        } 
    80648144                                } 
    8065  
    8066                                 // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) 
    8067                                 opt.animatedProperties[name] = jQuery.isArray( val ) ? 
    8068                                         val[1]: 
    8069                                         opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing'; 
    80708145                        } 
    80718146 
     
    80768151                        for ( p in prop ) { 
    80778152                                e = new jQuery.fx( this, opt, p ); 
    8078  
    8079                                 val = prop[p]; 
     8153                                val = prop[ p ]; 
    80808154 
    80818155                                if ( rfxtypes.test(val) ) { 
     
    80838157 
    80848158                                } else { 
    8085                                         parts = rfxnum.exec(val); 
     8159                                        parts = rfxnum.exec( val ); 
    80868160                                        start = e.cur(); 
    80878161 
    80888162                                        if ( parts ) { 
    80898163                                                end = parseFloat( parts[2] ); 
    8090                                                 unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" ); 
     8164                                                unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" ); 
    80918165 
    80928166                                                // We need to compute starting value 
     
    80998173                                                // If a +=/-= token was provided, we're doing a relative animation 
    81008174                                                if ( parts[1] ) { 
    8101                                                         end = ((parts[1] === "-=" ? -1 : 1) * end) + start; 
     8175                                                        end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start; 
    81028176                                                } 
    81038177 
     
    81278201                                jQuery._unmark( true, this ); 
    81288202                        } 
    8129                         // go in reverse order so anything added to the queue during the loop is ignored 
    81308203                        while ( i-- ) { 
    81318204                                if ( timers[i].elem === this ) { 
     
    83758448                        } else { 
    83768449                                n = t - this.startTime; 
    8377  
    83788450                                this.state = n / options.duration; 
     8451 
    83798452                                // Perform the easing function, defaults to swing 
    8380                                 this.pos = jQuery.easing[options.animatedProperties[this.prop]](this.state, n, 0, 1, options.duration); 
     8453                                this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration ); 
    83818454                                this.now = this.start + ((this.end - this.start) * this.pos); 
    83828455                        } 
     
    83918464jQuery.extend( jQuery.fx, { 
    83928465        tick: function() { 
    8393                 var timers = jQuery.timers, 
    8394                         i = timers.length; 
    8395                 while ( i-- ) { 
     8466                for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) { 
    83968467                        if ( !timers[i]() ) { 
    8397                                 timers.splice(i, 1); 
     8468                                timers.splice(i--, 1); 
    83988469                        } 
    83998470                } 
Note: See TracChangeset for help on using the changeset viewer.