0
@@ -54,7 +54,7 @@ var Selector = Class.create({
0
compileMatcher: function() {
0
var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
0
- c = Selector.criteria, le, p, m
;
0
+ c = Selector.criteria, le, p, m
, len = ps.length, name;
0
if (Selector._cache[e]) {
0
this.matcher = Selector._cache[e];
0
@@ -66,11 +66,12 @@ var Selector = Class.create({
0
while (e && le != e && (/\S/).test(e)) {
0
+ for (var i=0; i<len; i++) {
0
- this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
0
- new Template(c[i]).evaluate(m));
0
+ this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
0
+ new Template(c[name]).evaluate(m));
0
e = e.replace(m[0], '');
0
@@ -84,7 +85,7 @@ var Selector = Class.create({
0
compileXPathMatcher: function() {
0
var e = this.expression, ps = Selector.patterns,
0
- x = Selector.xpath, le, m
;
0
+ x = Selector.xpath, le, m
, len = ps.length, name;
0
if (Selector._cache[e]) {
0
this.xpath = Selector._cache[e]; return;
0
@@ -93,10 +94,11 @@ var Selector = Class.create({
0
this.matcher = ['.//*'];
0
while (e && le != e && (/\S/).test(e)) {
0
- if (m = e.match(ps[i])) {
0
- this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
0
- new Template(x[i]).evaluate(m));
0
+ for (var i=0; i<len; i++) {
0
+ if (m = e.match(ps[i].re)) {
0
+ this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
0
+ new Template(x[name]).evaluate(m));
0
e = e.replace(m[0], '');
0
@@ -136,17 +138,18 @@ var Selector = Class.create({
0
var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
0
+ var le, p, m
, len = ps.length, name;
0
while (e && le !== e && (/\S/).test(e)) {
0
+ for (var i=0; i<len; i++) {
0
// use the Selector.assertions methods unless the selector
0
- this.tokens.push([i, Object.clone(m)]);
0
+ this.tokens.push([name, Object.clone(m)]);
0
e = e.replace(m[0], '');
0
// reluctantly do a document-wide search
0
@@ -226,14 +229,15 @@ Object.extend(Selector, {
0
'enabled': "[not(@disabled) and (@type!='hidden')]",
0
var e = m[6], p = Selector.patterns,
0
- x = Selector.xpath, le, v
;
0
+ x = Selector.xpath, le, v
, len = p.length, name;
0
while (e && le != e && (/\S/).test(e)) {
0
- if (m = e.match(p[i])) {
0
- v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
0
+ for (var i=0; i<len; i++) {
0
+ if (m = e.match(p[i].re)) {
0
+ v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
0
exclusion.push("(" + v.substring(1, v.length - 1) + ")");
0
e = e.replace(m[0], '');
0
@@ -301,23 +305,22 @@ Object.extend(Selector, {
0
laterSibling: 'c = "laterSibling";'
0
// combinators must be listed first
0
// (and descendant needs to be last combinator)
0
- laterSibling: /^\s*~\s*/,
0
- adjacent: /^\s*\+\s*/,
0
+ { name: 'laterSibling', re: /^\s*~\s*/ },
0
+ { name: 'child', re: /^\s*>\s*/ },
0
+ { name: 'adjacent', re: /^\s*\+\s*/ },
0
+ { name: 'descendant', re: /^\s/ },
0
- tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
0
- id: /^#([\w\-\*]+)(\b|$)/,
0
- className: /^\.([\w\-\*]+)(\b|$)/,
0
-/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
0
- attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
0
- attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
0
+ { name: 'tagName', re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
0
+ { name: 'id', re: /^#([\w\-\*]+)(\b|$)/ },
0
+ { name: 'className', re: /^\.([\w\-\*]+)(\b|$)/ },
0
+ { name: 'pseudo', re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
0
+ { name: 'attrPresence', re: /^\[((?:[\w]+:)?[\w]+)\]/ },
0
+ { name: 'attr', re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
0
// for Selector.match and Element#match