*/
(function(){
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]+\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g;
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g;
-var cache = null;
var done = 0;
-if ( document.addEventListener && !document.querySelectorAll ) {
- cache = {};
- function invalidate(){ cache = {}; }
- document.addEventListener("DOMAttrModified", invalidate, false);
- document.addEventListener("DOMNodeInserted", invalidate, false);
- document.addEventListener("DOMNodeRemoved", invalidate, false);
-}
-
var Sizzle = function(selector, context, results, seed) {
var doCache = !results;
results = results || [];
return results;
}
- if ( cache && context === document && cache[ selector ] ) {
- results.push.apply( results, cache[ selector ] );
- return results;
- }
-
var parts = [], m, set, checkSet, check, mode, extra;
// Reset the position of the chunker regexp (start from head)
selector = selector.replace( Expr.match.POS, "" );
}
- checkSet = Sizzle.filter( later, Sizzle( selector, context, results ) );
+ set = Sizzle.filter( later, Sizzle( selector, context ) );
} else {
- checkSet = Expr.relative[ parts[0] ] ?
+ set = Expr.relative[ parts[0] ] ?
[ context ] :
Sizzle( parts.shift(), context );
while ( parts.length ) {
- set = [];
+ var tmpSet = [];
selector = parts.shift();
if ( Expr.relative[ selector ] )
selector += parts.shift();
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- Sizzle( selector, checkSet[i], set );
+ for ( var i = 0, l = set.length; i < l; i++ ) {
+ Sizzle( selector, set[i], tmpSet );
}
- checkSet = set;
+ set = tmpSet;
}
}
} else {
Expr.relative[ cur ]( checkSet, pop );
}
+ }
- if ( !checkSet ) {
- checkSet = set;
- }
+ if ( !checkSet ) {
+ checkSet = set;
}
if ( !checkSet ) {
}
if ( extra ) {
- Sizzle( extra, context, results );
- }
-
- if ( cache && doCache ) {
- cache[selector] = results.slice(0);
+ Sizzle( extra, context, results, seed );
}
return results;
return [];
}
- var later = "", match;
-
- // Pseudo-selectors could contain other selectors (like :not)
- while ( (match = Expr.match.PSEUDO.exec( expr )) ) {
- var left = RegExp.leftContext;
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- later += match[0];
- expr = expr.replace( Expr.match.PSEUDO, "" );
- } else {
- // TODO: Need a better solution, fails: .class\:foo:realfoo(#id)
- break;
- }
- }
-
for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i];
+ var type = Expr.order[i], match;
if ( (match = Expr.match[ type ].exec( expr )) ) {
var left = RegExp.leftContext;
if ( left.substr( left.length - 1 ) !== "\\" ) {
match[1] = (match[1] || "").replace(/\\/g, "");
set = Expr.find[ type ]( match, context );
-
if ( set != null ) {
expr = expr.replace( Expr.match[ type ], "" );
break;
set = context.getElementsByTagName("*");
}
- expr += later;
-
return {set: set, expr: expr};
};
Sizzle.filter = function(expr, set, inplace){
- var old = expr, result = [], curLoop = set, match;
+ var old = expr, result = [], curLoop = set, match, anyFound;
while ( expr && set.length ) {
for ( var type in Expr.filter ) {
if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var anyFound = false, filter = Expr.filter[ type ], goodArray = null;
+ var filter = Expr.filter[ type ], goodArray = null, goodPos = 0, found, item;
+ anyFound = false;
if ( curLoop == result ) {
result = [];
}
}
}
-
}
- var goodPos = 0, found, item;
-
for ( var i = 0; (item = curLoop[i]) !== undefined; i++ ) {
if ( item ) {
if ( goodArray && item != goodArray[goodPos] ) {
}
}
-
expr = expr.replace(/\s*,\s*/, "");
// Improper expression
if ( expr == old ) {
- throw "Syntax error, unrecognized expression: " + expr;
+ if ( anyFound == null ) {
+ throw "Syntax error, unrecognized expression: " + expr;
+ } else {
+ break;
+ }
}
old = expr;
match: {
ID: /#((?:[\w\u0128-\uFFFF_-]|\\.)+)/,
CLASS: /\.((?:[\w\u0128-\uFFFF_-]|\\.)+)/,
- NAME: /\[name=((?:[\w\u0128-\uFFFF_-]|\\.)+)\]/,
+ NAME: /\[name=['"]*((?:[\w\u0128-\uFFFF_-]|\\.)+)['"]*\]/,
ATTR: /\[((?:[\w\u0128-\uFFFF_-]|\\.)+)\s*(?:(\S{0,1}=)\s*(['"]*)(.*?)\3|)\]/,
TAG: /^((?:[\w\u0128-\uFFFF\*_-]|\\.)+)/,
CHILD: /:(only|nth|last|first)-child\(?(even|odd|[\dn+-]*)\)?/,
}
},
NAME: function(match, context){
- return context.getElementsByName(match[1]);
+ return context.getElementsByName ? context.getElementsByName(match[1]) : null;
},
TAG: function(match, context){
return context.getElementsByTagName(match[1]);
return match;
},
- PSEUDO: function(match){
+ PSEUDO: function(match, curLoop){
if ( match[1] === "not" ) {
- match[3] = match[3].split(/\s*,\s*/);
+ // If we're dealing with a complex expression, or a simple one
+ match[3] = match[3].match(chunker).length > 1 ?
+ Sizzle(match[3], null, null, curLoop) :
+ Sizzle.filter(match[3], curLoop);
}
return match;
var name = match[1], filter = Expr.filters[ name ];
if ( filter ) {
- return filter( elem, i, match, array )
+ return filter( elem, i, match, array );
} else if ( name === "contains" ) {
return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
} else if ( name === "not" ) {
var not = match[3];
for ( var i = 0, l = not.length; i < l; i++ ) {
- if ( Sizzle.filter(not[i], [elem]).length > 0 ) {
+ if ( not[i] === elem ) {
return false;
}
}
}
};
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+}
+
var makeArray = function(array, results) {
array = Array.prototype.slice.call( array );
if ( document.querySelectorAll ) (function(){
var oldSizzle = Sizzle;
- Sizzle = function(query, context, extra){
+ Sizzle = function(query, context, extra, seed){
context = context || document;
- if ( context.nodeType === 9 ) {
+ if ( !seed && context.nodeType === 9 ) {
try {
return makeArray( context.querySelectorAll(query) );
} catch(e){}
}
- return oldSizzle(query, context, extra);
+ return oldSizzle(query, context, extra, seed);
};
Sizzle.find = oldSizzle.find;
Sizzle.filter = oldSizzle.filter;
Sizzle.selectors = oldSizzle.selectors;
+ Sizzle.matches = oldSizzle.matches;
})();
if ( document.documentElement.getElementsByClassName ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
- elem = elem[dir]
+ elem = elem[dir];
var match = false;
while ( elem && elem.nodeType ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
- elem = elem[dir]
+ elem = elem[dir];
var match = false;
while ( elem && elem.nodeType ) {
jQuery.css(elem, "visibility") !== "hidden";
};
+Sizzle.selectors.filters.animated = function(elem){
+ return jQuery.grep(jQuery.timers, function(fn){
+ return elem === fn.elem;
+ }).length;
+};
+
jQuery.multiFilter = function( expr, elems, not ) {
if ( not ) {
- return jQuery.multiFilter( ":not(" + expr + ")", elems );
+ expr = ":not(" + expr + ")";
}
- var exprs = expr.split(/\s*,\s*/), cur = [];
-
- for ( var i = 0; i < exprs.length; i++ ) {
- cur = jQuery.merge( cur, jQuery.filter( exprs[i], elems ) );
- }
-
- return cur;
+ return Sizzle.matches(expr, elems);
};
jQuery.dir = function( elem, dir ){