Changeset 26788 in spip-zone


Ignore:
Timestamp:
Feb 21, 2009, 9:28:53 AM (11 years ago)
Author:
fil@…
Message:

jQuery 1.3.2 http://docs.jquery.com/Release:jQuery_1.3.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/crayons/js/jquery.js

    r26190 r26788  
    11/*!
    2  * jQuery JavaScript Library v1.3.1
     2 * jQuery JavaScript Library v1.3.2
    33 * http://jquery.com/
    44 *
     
    77 * http://docs.jquery.com/License
    88 *
    9  * Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009)
    10  * Revision: 6158
     9 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
     10 * Revision: 6246
    1111 */
    1212(function(){
     
    8989                }
    9090
    91                 return this.setArray(jQuery.makeArray(selector));
     91                return this.setArray(jQuery.isArray( selector ) ?
     92                        selector :
     93                        jQuery.makeArray(selector));
    9294        },
    9395
     
    9698
    9799        // The current version of jQuery being used
    98         jquery: "1.3.1",
     100        jquery: "1.3.2",
    99101
    100102        // The number of elements contained in the matched element set
     
    109111
    110112                        // Return a 'clean' array
    111                         jQuery.makeArray( this ) :
     113                        Array.prototype.slice.call( this ) :
    112114
    113115                        // Return just the object
     
    279281
    280282        // For internal use only.
    281         // Behaves like an Array's .push method, not like a jQuery method.
     283        // Behaves like an Array's method, not like a jQuery method.
    282284        push: [].push,
     285        sort: [].sort,
     286        splice: [].splice,
    283287
    284288        find: function( selector ) {
    285                 if ( this.length === 1 && !/,/.test(selector) ) {
     289                if ( this.length === 1 ) {
    286290                        var ret = this.pushStack( [], "find", selector );
    287291                        ret.length = 0;
     
    289293                        return ret;
    290294                } else {
    291                         var elems = jQuery.map(this, function(elem){
     295                        return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
    292296                                return jQuery.find( selector, elem );
    293                         });
    294 
    295                         return this.pushStack( /[^+>] [^+>]/.test( selector ) ?
    296                                 jQuery.unique( elems ) :
    297                                 elems, "find", selector );
     297                        })), "find", selector );
    298298                }
    299299        },
     
    311311                                // as properties will not be copied (such as the
    312312                                // the name attribute on an input).
    313                                 var clone = this.cloneNode(true),
    314                                         container = document.createElement("div");
    315                                 container.appendChild(clone);
    316                                 return jQuery.clean([container.innerHTML])[0];
     313                                var html = this.outerHTML;
     314                                if ( !html ) {
     315                                        var div = this.ownerDocument.createElement("div");
     316                                        div.appendChild( this.cloneNode(true) );
     317                                        html = div.innerHTML;
     318                                }
     319
     320                                return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
    317321                        } else
    318322                                return this.cloneNode(true);
    319323                });
    320324
    321                 // Need to set the expando to null on the cloned set if it exists
    322                 // removeData doesn't work here, IE removes it from the original as well
    323                 // this is primarily for IE but the data expando shouldn't be copied over in any browser
    324                 var clone = ret.find("*").andSelf().each(function(){
    325                         if ( this[ expando ] !== undefined )
    326                                 this[ expando ] = null;
    327                 });
    328 
    329325                // Copy the events from the original to the clone
    330                 if ( events === true )
    331                         this.find("*").andSelf().each(function(i){
    332                                 if (this.nodeType == 3)
     326                if ( events === true ) {
     327                        var orig = this.find("*").andSelf(), i = 0;
     328
     329                        ret.find("*").andSelf().each(function(){
     330                                if ( this.nodeName !== orig[i].nodeName )
    333331                                        return;
    334                                 var events = jQuery.data( this, "events" );
    335 
    336                                 for ( var type in events )
    337                                         for ( var handler in events[ type ] )
    338                                                 jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
     332
     333                                var events = jQuery.data( orig[i], "events" );
     334
     335                                for ( var type in events ) {
     336                                        for ( var handler in events[ type ] ) {
     337                                                jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
     338                                        }
     339                                }
     340
     341                                i++;
    339342                        });
     343                }
    340344
    341345                // Return the cloned set
     
    356360
    357361        closest: function( selector ) {
    358                 var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null;
     362                var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
     363                        closer = 0;
    359364
    360365                return this.map(function(){
    361366                        var cur = this;
    362367                        while ( cur && cur.ownerDocument ) {
    363                                 if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) )
     368                                if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
     369                                        jQuery.data(cur, "closest", closer);
    364370                                        return cur;
     371                                }
    365372                                cur = cur.parentNode;
     373                                closer++;
    366374                        }
    367375                });
     
    476484                return value === undefined ?
    477485                        (this[0] ?
    478                                 this[0].innerHTML :
     486                                this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
    479487                                null) :
    480488                        this.empty().append( value );
     
    508516                        var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
    509517                                scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
    510                                 first = fragment.firstChild,
    511                                 extra = this.length > 1 ? fragment.cloneNode(true) : fragment;
     518                                first = fragment.firstChild;
    512519
    513520                        if ( first )
    514521                                for ( var i = 0, l = this.length; i < l; i++ )
    515                                         callback.call( root(this[i], first), i > 0 ? extra.cloneNode(true) : fragment );
    516                        
     522                                        callback.call( root(this[i], first), this.length > 1 || i > 0 ?
     523                                                        fragment.cloneNode(true) : fragment );
     524               
    517525                        if ( scripts )
    518526                                jQuery.each( scripts, evalScript );
     
    637645        // Evalulates a script in a global context
    638646        globalEval: function( data ) {
    639                 data = jQuery.trim( data );
    640 
    641                 if ( data ) {
     647                if ( data && /\S/.test(data) ) {
    642648                        // Inspired by code by Andrea Giammarchi
    643649                        // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
     
    742748        },
    743749
    744         css: function( elem, name, force ) {
     750        css: function( elem, name, force, extra ) {
    745751                if ( name == "width" || name == "height" ) {
    746752                        var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
     
    748754                        function getWH() {
    749755                                val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
    750                                 var padding = 0, border = 0;
     756
     757                                if ( extra === "border" )
     758                                        return;
     759
    751760                                jQuery.each( which, function() {
    752                                         padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
    753                                         border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
     761                                        if ( !extra )
     762                                                val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
     763                                        if ( extra === "margin" )
     764                                                val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
     765                                        else
     766                                                val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
    754767                                });
    755                                 val -= Math.round(padding + border);
    756                         }
    757 
    758                         if ( jQuery(elem).is(":visible") )
     768                        }
     769
     770                        if ( elem.offsetWidth !== 0 )
    759771                                getWH();
    760772                        else
    761773                                jQuery.swap( elem, props, getWH );
    762774
    763                         return Math.max(0, val);
     775                        return Math.max(0, Math.round(val));
    764776                }
    765777
     
    867879
    868880                                // Trim whitespace, otherwise indexOf won't work as expected
    869                                 var tags = jQuery.trim( elem ).toLowerCase();
     881                                var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
    870882
    871883                                var wrap =
     
    907919
    908920                                        // String was a <table>, *may* have spurious <tbody>
    909                                         var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
    910                                                 div.firstChild && div.firstChild.childNodes :
     921                                        var hasBody = /<tbody/i.test(elem),
     922                                                tbody = !tags.indexOf("<table") && !hasBody ?
     923                                                        div.firstChild && div.firstChild.childNodes :
    911924
    912925                                                // String was a bare <thead> or <tfoot>
    913                                                 wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
     926                                                wrap[1] == "<table>" && !hasBody ?
    914927                                                        div.childNodes :
    915928                                                        [];
     
    11901203        replaceAll: "replaceWith"
    11911204}, function(name, original){
    1192         jQuery.fn[ name ] = function() {
    1193                 var args = arguments;
    1194 
    1195                 return this.each(function(){
    1196                         for ( var i = 0, length = args.length; i < length; i++ )
    1197                                 jQuery( args[ i ] )[ original ]( this );
    1198                 });
     1205        jQuery.fn[ name ] = function( selector ) {
     1206                var ret = [], insert = jQuery( selector );
     1207
     1208                for ( var i = 0, l = insert.length; i < l; i++ ) {
     1209                        var elems = (i > 0 ? this.clone(true) : this).get();
     1210                        jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
     1211                        ret = ret.concat( elems );
     1212                }
     1213
     1214                return this.pushStack( ret, name, selector );
    11991215        };
    12001216});
     
    12351251        empty: function() {
    12361252                // Remove element nodes and prevent memory leaks
    1237                 jQuery( ">*", this ).remove();
     1253                jQuery(this).children().remove();
    12381254
    12391255                // Remove any remaining nodes
     
    14031419(function(){
    14041420
    1405 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]+['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
     1421var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
    14061422        done = 0,
    14071423        toString = Object.prototype.toString;
     
    15081524        if ( extra ) {
    15091525                Sizzle( extra, context, results, seed );
     1526
     1527                if ( sortOrder ) {
     1528                        hasDuplicate = false;
     1529                        results.sort(sortOrder);
     1530
     1531                        if ( hasDuplicate ) {
     1532                                for ( var i = 1; i < results.length; i++ ) {
     1533                                        if ( results[i] === results[i-1] ) {
     1534                                                results.splice(i--, 1);
     1535                                        }
     1536                                }
     1537                        }
     1538                }
    15101539        }
    15111540
     
    15491578
    15501579Sizzle.filter = function(expr, set, inplace, not){
    1551         var old = expr, result = [], curLoop = set, match, anyFound;
     1580        var old = expr, result = [], curLoop = set, match, anyFound,
     1581                isXMLFilter = set && set[0] && isXML(set[0]);
    15521582
    15531583        while ( expr && set.length ) {
     
    15621592
    15631593                                if ( Expr.preFilter[ type ] ) {
    1564                                         match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not );
     1594                                        match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
    15651595
    15661596                                        if ( !match ) {
     
    16071637                }
    16081638
    1609                 expr = expr.replace(/\s*,\s*/, "");
    1610 
    16111639                // Improper expression
    16121640                if ( expr == old ) {
     
    16461674        },
    16471675        relative: {
    1648                 "+": function(checkSet, part){
    1649                         for ( var i = 0, l = checkSet.length; i < l; i++ ) {
    1650                                 var elem = checkSet[i];
    1651                                 if ( elem ) {
    1652                                         var cur = elem.previousSibling;
    1653                                         while ( cur && cur.nodeType !== 1 ) {
    1654                                                 cur = cur.previousSibling;
    1655                                         }
    1656                                         checkSet[i] = typeof part === "string" ?
    1657                                                 cur || false :
    1658                                                 cur === part;
    1659                                 }
    1660                         }
    1661 
    1662                         if ( typeof part === "string" ) {
     1676                "+": function(checkSet, part, isXML){
     1677                        var isPartStr = typeof part === "string",
     1678                                isTag = isPartStr && !/\W/.test(part),
     1679                                isPartStrNotTag = isPartStr && !isTag;
     1680
     1681                        if ( isTag && !isXML ) {
     1682                                part = part.toUpperCase();
     1683                        }
     1684
     1685                        for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
     1686                                if ( (elem = checkSet[i]) ) {
     1687                                        while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
     1688
     1689                                        checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
     1690                                                elem || false :
     1691                                                elem === part;
     1692                                }
     1693                        }
     1694
     1695                        if ( isPartStrNotTag ) {
    16631696                                Sizzle.filter( part, checkSet, true );
    16641697                        }
    16651698                },
    16661699                ">": function(checkSet, part, isXML){
    1667                         if ( typeof part === "string" && !/\W/.test(part) ) {
     1700                        var isPartStr = typeof part === "string";
     1701
     1702                        if ( isPartStr && !/\W/.test(part) ) {
    16681703                                part = isXML ? part : part.toUpperCase();
    16691704
     
    16791714                                        var elem = checkSet[i];
    16801715                                        if ( elem ) {
    1681                                                 checkSet[i] = typeof part === "string" ?
     1716                                                checkSet[i] = isPartStr ?
    16821717                                                        elem.parentNode :
    16831718                                                        elem.parentNode === part;
     
    16851720                                }
    16861721
    1687                                 if ( typeof part === "string" ) {
     1722                                if ( isPartStr ) {
    16881723                                        Sizzle.filter( part, checkSet, true );
    16891724                                }
     
    16911726                },
    16921727                "": function(checkSet, part, isXML){
    1693                         var doneName = "done" + (done++), checkFn = dirCheck;
     1728                        var doneName = done++, checkFn = dirCheck;
    16941729
    16951730                        if ( !part.match(/\W/) ) {
     
    17011736                },
    17021737                "~": function(checkSet, part, isXML){
    1703                         var doneName = "done" + (done++), checkFn = dirCheck;
     1738                        var doneName = done++, checkFn = dirCheck;
    17041739
    17051740                        if ( typeof part === "string" && !part.match(/\W/) ) {
     
    17191754                },
    17201755                NAME: function(match, context, isXML){
    1721                         if ( typeof context.getElementsByName !== "undefined" && !isXML ) {
    1722                                 return context.getElementsByName(match[1]);
     1756                        if ( typeof context.getElementsByName !== "undefined" ) {
     1757                                var ret = [], results = context.getElementsByName(match[1]);
     1758
     1759                                for ( var i = 0, l = results.length; i < l; i++ ) {
     1760                                        if ( results[i].getAttribute("name") === match[1] ) {
     1761                                                ret.push( results[i] );
     1762                                        }
     1763                                }
     1764
     1765                                return ret.length === 0 ? null : ret;
    17231766                        }
    17241767                },
     
    17281771        },
    17291772        preFilter: {
    1730                 CLASS: function(match, curLoop, inplace, result, not){
     1773                CLASS: function(match, curLoop, inplace, result, not, isXML){
    17311774                        match = " " + match[1].replace(/\\/g, "") + " ";
    17321775
    1733                         var elem;
    1734                         for ( var i = 0; (elem = curLoop[i]) != null; i++ ) {
     1776                        if ( isXML ) {
     1777                                return match;
     1778                        }
     1779
     1780                        for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
    17351781                                if ( elem ) {
    1736                                         if ( not ^ (" " + elem.className + " ").indexOf(match) >= 0 ) {
     1782                                        if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
    17371783                                                if ( !inplace )
    17381784                                                        result.push( elem );
     
    17651811
    17661812                        // TODO: Move to normal caching system
    1767                         match[0] = "done" + (done++);
     1813                        match[0] = done++;
    17681814
    17691815                        return match;
    17701816                },
    1771                 ATTR: function(match){
     1817                ATTR: function(match, curLoop, inplace, result, not, isXML){
    17721818                        var name = match[1].replace(/\\/g, "");
    17731819                       
    1774                         if ( Expr.attrMap[name] ) {
     1820                        if ( !isXML && Expr.attrMap[name] ) {
    17751821                                match[1] = Expr.attrMap[name];
    17761822                        }
     
    17851831                        if ( match[1] === "not" ) {
    17861832                                // If we're dealing with a complex expression, or a simple one
    1787                                 if ( match[3].match(chunker).length > 1 ) {
     1833                                if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
    17881834                                        match[3] = Sizzle(match[3], null, null, curLoop);
    17891835                                } else {
     
    17941840                                        return false;
    17951841                                }
    1796                         } else if ( Expr.match.POS.test( match[0] ) ) {
     1842                        } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
    17971843                                return true;
    17981844                        }
     
    18911937        },
    18921938        filter: {
    1893                 CHILD: function(elem, match){
    1894                         var type = match[1], parent = elem.parentNode;
    1895 
    1896                         var doneName = match[0];
    1897                        
    1898                         if ( parent && (!parent[ doneName ] || !elem.nodeIndex) ) {
    1899                                 var count = 1;
    1900 
    1901                                 for ( var node = parent.firstChild; node; node = node.nextSibling ) {
    1902                                         if ( node.nodeType == 1 ) {
    1903                                                 node.nodeIndex = count++;
    1904                                         }
    1905                                 }
    1906 
    1907                                 parent[ doneName ] = count - 1;
    1908                         }
    1909 
    1910                         if ( type == "first" ) {
    1911                                 return elem.nodeIndex == 1;
    1912                         } else if ( type == "last" ) {
    1913                                 return elem.nodeIndex == parent[ doneName ];
    1914                         } else if ( type == "only" ) {
    1915                                 return parent[ doneName ] == 1;
    1916                         } else if ( type == "nth" ) {
    1917                                 var add = false, first = match[2], last = match[3];
    1918 
    1919                                 if ( first == 1 && last == 0 ) {
    1920                                         return true;
    1921                                 }
    1922 
    1923                                 if ( first == 0 ) {
    1924                                         if ( elem.nodeIndex == last ) {
    1925                                                 add = true;
    1926                                         }
    1927                                 } else if ( (elem.nodeIndex - last) % first == 0 && (elem.nodeIndex - last) / first >= 0 ) {
    1928                                         add = true;
    1929                                 }
    1930 
    1931                                 return add;
    1932                         }
    1933                 },
    19341939                PSEUDO: function(elem, match, i, array){
    19351940                        var name = match[1], filter = Expr.filters[ name ];
     
    19511956                        }
    19521957                },
     1958                CHILD: function(elem, match){
     1959                        var type = match[1], node = elem;
     1960                        switch (type) {
     1961                                case 'only':
     1962                                case 'first':
     1963                                        while (node = node.previousSibling)  {
     1964                                                if ( node.nodeType === 1 ) return false;
     1965                                        }
     1966                                        if ( type == 'first') return true;
     1967                                        node = elem;
     1968                                case 'last':
     1969                                        while (node = node.nextSibling)  {
     1970                                                if ( node.nodeType === 1 ) return false;
     1971                                        }
     1972                                        return true;
     1973                                case 'nth':
     1974                                        var first = match[2], last = match[3];
     1975
     1976                                        if ( first == 1 && last == 0 ) {
     1977                                                return true;
     1978                                        }
     1979                                       
     1980                                        var doneName = match[0],
     1981                                                parent = elem.parentNode;
     1982       
     1983                                        if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
     1984                                                var count = 0;
     1985                                                for ( node = parent.firstChild; node; node = node.nextSibling ) {
     1986                                                        if ( node.nodeType === 1 ) {
     1987                                                                node.nodeIndex = ++count;
     1988                                                        }
     1989                                                }
     1990                                                parent.sizcache = doneName;
     1991                                        }
     1992                                       
     1993                                        var diff = elem.nodeIndex - last;
     1994                                        if ( first == 0 ) {
     1995                                                return diff == 0;
     1996                                        } else {
     1997                                                return ( diff % first == 0 && diff / first >= 0 );
     1998                                        }
     1999                        }
     2000                },
    19532001                ID: function(elem, match){
    19542002                        return elem.nodeType === 1 && elem.getAttribute("id") === match;
     
    19582006                },
    19592007                CLASS: function(elem, match){
    1960                         return match.test( elem.className );
     2008                        return (" " + (elem.className || elem.getAttribute("class")) + " ")
     2009                                .indexOf( match ) > -1;
    19612010                },
    19622011                ATTR: function(elem, match){
    1963                         var result = Expr.attrHandle[ match[1] ] ? Expr.attrHandle[ match[1] ]( elem ) : elem[ match[1] ] || elem.getAttribute( match[1] ), value = result + "", type = match[2], check = match[4];
     2012                        var name = match[1],
     2013                                result = Expr.attrHandle[ name ] ?
     2014                                        Expr.attrHandle[ name ]( elem ) :
     2015                                        elem[ name ] != null ?
     2016                                                elem[ name ] :
     2017                                                elem.getAttribute( name ),
     2018                                value = result + "",
     2019                                type = match[2],
     2020                                check = match[4];
     2021
    19642022                        return result == null ?
    19652023                                type === "!=" :
     
    19702028                                type === "~=" ?
    19712029                                (" " + value + " ").indexOf(check) >= 0 :
    1972                                 !match[4] ?
    1973                                 result :
     2030                                !check ?
     2031                                value && result !== false :
    19742032                                type === "!=" ?
    19752033                                value != check :
     
    20372095}
    20382096
     2097var sortOrder;
     2098
     2099if ( document.documentElement.compareDocumentPosition ) {
     2100        sortOrder = function( a, b ) {
     2101                var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
     2102                if ( ret === 0 ) {
     2103                        hasDuplicate = true;
     2104                }
     2105                return ret;
     2106        };
     2107} else if ( "sourceIndex" in document.documentElement ) {
     2108        sortOrder = function( a, b ) {
     2109                var ret = a.sourceIndex - b.sourceIndex;
     2110                if ( ret === 0 ) {
     2111                        hasDuplicate = true;
     2112                }
     2113                return ret;
     2114        };
     2115} else if ( document.createRange ) {
     2116        sortOrder = function( a, b ) {
     2117                var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
     2118                aRange.selectNode(a);
     2119                aRange.collapse(true);
     2120                bRange.selectNode(b);
     2121                bRange.collapse(true);
     2122                var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
     2123                if ( ret === 0 ) {
     2124                        hasDuplicate = true;
     2125                }
     2126                return ret;
     2127        };
     2128}
     2129
    20392130// Check to see if the browser returns elements by name when
    20402131// querying by getElementById (and provide a workaround)
     
    21002191        // Check to see if an attribute returns normalized href attributes
    21012192        div.innerHTML = "<a href='#'></a>";
    2102         if ( div.firstChild && div.firstChild.getAttribute("href") !== "#" ) {
     2193        if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
     2194                        div.firstChild.getAttribute("href") !== "#" ) {
    21032195                Expr.attrHandle.href = function(elem){
    21042196                        return elem.getAttribute("href", 2);
     
    21372229})();
    21382230
    2139 if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) {
     2231if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
     2232        var div = document.createElement("div");
     2233        div.innerHTML = "<div class='test e'></div><div class='test'></div>";
     2234
     2235        // Opera can't find a second classname (in 9.6)
     2236        if ( div.getElementsByClassName("e").length === 0 )
     2237                return;
     2238
     2239        // Safari caches class attributes, doesn't catch changes (in 3.2)
     2240        div.lastChild.className = "e";
     2241
     2242        if ( div.getElementsByClassName("e").length === 1 )
     2243                return;
     2244
    21402245        Expr.order.splice(1, 0, "CLASS");
    2141         Expr.find.CLASS = function(match, context) {
    2142                 return context.getElementsByClassName(match[1]);
     2246        Expr.find.CLASS = function(match, context, isXML) {
     2247                if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
     2248                        return context.getElementsByClassName(match[1]);
     2249                }
    21432250        };
    2144 }
     2251})();
    21452252
    21462253function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
     2254        var sibDir = dir == "previousSibling" && !isXML;
    21472255        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
    21482256                var elem = checkSet[i];
    21492257                if ( elem ) {
     2258                        if ( sibDir && elem.nodeType === 1 ){
     2259                                elem.sizcache = doneName;
     2260                                elem.sizset = i;
     2261                        }
    21502262                        elem = elem[dir];
    21512263                        var match = false;
    21522264
    2153                         while ( elem && elem.nodeType ) {
    2154                                 var done = elem[doneName];
    2155                                 if ( done ) {
    2156                                         match = checkSet[ done ];
     2265                        while ( elem ) {
     2266                                if ( elem.sizcache === doneName ) {
     2267                                        match = checkSet[elem.sizset];
    21572268                                        break;
    21582269                                }
    21592270
    2160                                 if ( elem.nodeType === 1 && !isXML )
    2161                                         elem[doneName] = i;
     2271                                if ( elem.nodeType === 1 && !isXML ){
     2272                                        elem.sizcache = doneName;
     2273                                        elem.sizset = i;
     2274                                }
    21622275
    21632276                                if ( elem.nodeName === cur ) {
     
    21752288
    21762289function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
     2290        var sibDir = dir == "previousSibling" && !isXML;
    21772291        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
    21782292                var elem = checkSet[i];
    21792293                if ( elem ) {
     2294                        if ( sibDir && elem.nodeType === 1 ) {
     2295                                elem.sizcache = doneName;
     2296                                elem.sizset = i;
     2297                        }
    21802298                        elem = elem[dir];
    21812299                        var match = false;
    21822300
    2183                         while ( elem && elem.nodeType ) {
    2184                                 if ( elem[doneName] ) {
    2185                                         match = checkSet[ elem[doneName] ];
     2301                        while ( elem ) {
     2302                                if ( elem.sizcache === doneName ) {
     2303                                        match = checkSet[elem.sizset];
    21862304                                        break;
    21872305                                }
    21882306
    21892307                                if ( elem.nodeType === 1 ) {
    2190                                         if ( !isXML )
    2191                                                 elem[doneName] = i;
    2192 
     2308                                        if ( !isXML ) {
     2309                                                elem.sizcache = doneName;
     2310                                                elem.sizset = i;
     2311                                        }
    21932312                                        if ( typeof cur !== "string" ) {
    21942313                                                if ( elem === cur ) {
     
    22492368
    22502369Sizzle.selectors.filters.hidden = function(elem){
    2251         return "hidden" === elem.type ||
    2252                 jQuery.css(elem, "display") === "none" ||
    2253                 jQuery.css(elem, "visibility") === "hidden";
     2370        return elem.offsetWidth === 0 || elem.offsetHeight === 0;
    22542371};
    22552372
    22562373Sizzle.selectors.filters.visible = function(elem){
    2257         return "hidden" !== elem.type &&
    2258                 jQuery.css(elem, "display") !== "none" &&
    2259                 jQuery.css(elem, "visibility") !== "hidden";
     2374        return elem.offsetWidth > 0 || elem.offsetHeight > 0;
    22602375};
    22612376
     
    25532668
    25542669                event = arguments[0] = jQuery.event.fix( event || window.event );
    2555 
     2670                event.currentTarget = this;
     2671               
    25562672                // Namespaced event handlers
    25572673                var namespaces = event.type.split(".");
     
    28843000        });
    28853001
     3002        elems.sort(function(a,b) {
     3003                return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
     3004        });
     3005       
    28863006        jQuery.each(elems, function(){
    28873007                if ( this.fn.call(this.elem, event, this.fn.data) === false )
    2888                         stop = false;
     3008                        return (stop = false);
    28893009        });
    28903010
     
    29503070                // If IE and not an iframe
    29513071                // continually check to see if the document is ready
    2952                 if ( document.documentElement.doScroll && typeof window.frameElement === "undefined" ) (function(){
     3072                if ( document.documentElement.doScroll && window == window.top ) (function(){
    29533073                        if ( jQuery.isReady ) return;
    29543074
     
    30803200        jQuery(function(){
    30813201                var div = document.createElement("div");
    3082                 div.style.width = "1px";
    3083                 div.style.paddingLeft = "1px";
     3202                div.style.width = div.style.paddingLeft = "1px";
    30843203
    30853204                document.body.appendChild( div );
    30863205                jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
    3087                 document.body.removeChild( div );
     3206                document.body.removeChild( div ).style.display = 'none';
    30883207        });
    30893208})();
     
    31763295                        return this.name && !this.disabled &&
    31773296                                (this.checked || /select|textarea/i.test(this.nodeName) ||
    3178                                         /text|hidden|password/i.test(this.type));
     3297                                        /text|hidden|password|search/i.test(this.type));
    31793298                })
    31803299                .map(function(i, elem){
     
    33723491                                                success();
    33733492                                                complete();
     3493
     3494                                                // Handle memory leak in IE
     3495                                                script.onload = script.onreadystatechange = null;
    33743496                                                head.removeChild( script );
    33753497                                        }
     
    36873809                                        }
    36883810                                       
    3689                                         this[i].style.display = jQuery.data(this[i], "olddisplay", display);
    3690                                 }
     3811                                        jQuery.data(this[i], "olddisplay", display);
     3812                                }
     3813                        }
     3814
     3815                        // Set the display of the elements in a second loop
     3816                        // to avoid the constant reflow
     3817                        for ( var i = 0, l = this.length; i < l; i++ ){
     3818                                this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
    36913819                        }
    36923820                       
     
    37033831                                if ( !old && old !== "none" )
    37043832                                        jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
     3833                        }
     3834
     3835                        // Set the display of the elements in a second loop
     3836                        // to avoid the constant reflow
     3837                        for ( var i = 0, l = this.length; i < l; i++ ){
    37053838                                this[i].style.display = "none";
    37063839                        }
     3840
    37073841                        return this;
    37083842                }
     
    39164050                t.elem = this.elem;
    39174051
    3918                 if ( t() && jQuery.timers.push(t) == 1 ) {
     4052                if ( t() && jQuery.timers.push(t) && !timerId ) {
    39194053                        timerId = setInterval(function(){
    39204054                                var timers = jQuery.timers;
     
    39264060                                if ( !timers.length ) {
    39274061                                        clearInterval( timerId );
     4062                                        timerId = undefined;
    39284063                                }
    39294064                        }, 13);
     
    41944329
    41954330        var tl = i ? "Left"  : "Top",  // top or left
    4196                 br = i ? "Right" : "Bottom"; // bottom or right
     4331                br = i ? "Right" : "Bottom", // bottom or right
     4332                lower = name.toLowerCase();
    41974333
    41984334        // innerHeight and innerWidth
    41994335        jQuery.fn["inner" + name] = function(){
    4200                 return this[ name.toLowerCase() ]() +
    4201                         num(this, "padding" + tl) +
    4202                         num(this, "padding" + br);
     4336                return this[0] ?
     4337                        jQuery.css( this[0], lower, false, "padding" ) :
     4338                        null;
    42034339        };
    42044340
    42054341        // outerHeight and outerWidth
    42064342        jQuery.fn["outer" + name] = function(margin) {
    4207                 return this["inner" + name]() +
    4208                         num(this, "border" + tl + "Width") +
    4209                         num(this, "border" + br + "Width") +
    4210                         (margin ?
    4211                                 num(this, "margin" + tl) + num(this, "margin" + br) : 0);
     4343                return this[0] ?
     4344                        jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
     4345                        null;
    42124346        };
    42134347       
     
    42394373        };
    42404374
    4241 });})();
     4375});
     4376})();
Note: See TracChangeset for help on using the changeset viewer.