Subversion-Projekte lars-tiefland.prado

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
/*
2
	cssQuery, version 2.0.2 (2005-08-19)
3
	Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
4
	License: http://creativecommons.org/licenses/LGPL/2.1/
5
*/
6
 
7
cssQuery.addModule("css-level2", function() {
8
 
9
// -----------------------------------------------------------------------
10
// selectors
11
// -----------------------------------------------------------------------
12
 
13
// child selector
14
selectors[">"] = function($results, $from, $tagName, $namespace) {
15
	var $element, i, j;
16
	for (i = 0; i < $from.length; i++) {
17
		var $subset = childElements($from[i]);
18
		for (j = 0; ($element = $subset[j]); j++)
19
			if (compareTagName($element, $tagName, $namespace))
20
				$results.push($element);
21
	}
22
};
23
 
24
// sibling selector
25
selectors["+"] = function($results, $from, $tagName, $namespace) {
26
	for (var i = 0; i < $from.length; i++) {
27
		var $element = nextElementSibling($from[i]);
28
		if ($element && compareTagName($element, $tagName, $namespace))
29
			$results.push($element);
30
	}
31
};
32
 
33
// attribute selector
34
selectors["@"] = function($results, $from, $attributeSelectorID) {
35
	var $test = attributeSelectors[$attributeSelectorID].test;
36
	var $element, i;
37
	for (i = 0; ($element = $from[i]); i++)
38
		if ($test($element)) $results.push($element);
39
};
40
 
41
// -----------------------------------------------------------------------
42
// pseudo-classes
43
// -----------------------------------------------------------------------
44
 
45
pseudoClasses["first-child"] = function($element) {
46
	return !previousElementSibling($element);
47
};
48
 
49
pseudoClasses["lang"] = function($element, $code) {
50
	$code = new RegExp("^" + $code, "i");
51
	while ($element && !$element.getAttribute("lang")) $element = $element.parentNode;
52
	return $element && $code.test($element.getAttribute("lang"));
53
};
54
 
55
// -----------------------------------------------------------------------
56
//  attribute selectors
57
// -----------------------------------------------------------------------
58
 
59
// constants
60
AttributeSelector.NS_IE = /\\:/g;
61
AttributeSelector.PREFIX = "@";
62
// properties
63
AttributeSelector.tests = {};
64
// methods
65
AttributeSelector.replace = function($match, $attribute, $namespace, $compare, $value) {
66
	var $key = this.PREFIX + $match;
67
	if (!attributeSelectors[$key]) {
68
		$attribute = this.create($attribute, $compare || "", $value || "");
69
		// store the selector
70
		attributeSelectors[$key] = $attribute;
71
		attributeSelectors.push($attribute);
72
	}
73
	return attributeSelectors[$key].id;
74
};
75
AttributeSelector.parse = function($selector) {
76
	$selector = $selector.replace(this.NS_IE, "|");
77
	var $match;
78
	while ($match = $selector.match(this.match)) {
79
		var $replace = this.replace($match[0], $match[1], $match[2], $match[3], $match[4]);
80
		$selector = $selector.replace(this.match, $replace);
81
	}
82
	return $selector;
83
};
84
AttributeSelector.create = function($propertyName, $test, $value) {
85
	var $attributeSelector = {};
86
	$attributeSelector.id = this.PREFIX + attributeSelectors.length;
87
	$attributeSelector.name = $propertyName;
88
	$test = this.tests[$test];
89
	$test = $test ? $test(this.getAttribute($propertyName), getText($value)) : false;
90
	$attributeSelector.test = new Function("e", "return " + $test);
91
	return $attributeSelector;
92
};
93
AttributeSelector.getAttribute = function($name) {
94
	switch ($name.toLowerCase()) {
95
		case "id":
96
			return "e.id";
97
		case "class":
98
			return "e.className";
99
		case "for":
100
			return "e.htmlFor";
101
		case "href":
102
			if (isMSIE) {
103
				// IE always returns the full path not the fragment in the href attribute
104
				//  so we RegExp it out of outerHTML. Opera does the same thing but there
105
				//  is no way to get the original attribute.
106
				return "String((e.outerHTML.match(/href=\\x22?([^\\s\\x22]*)\\x22?/)||[])[1]||'')";
107
			}
108
	}
109
	return "e.getAttribute('" + $name.replace($NAMESPACE, ":") + "')";
110
};
111
 
112
// -----------------------------------------------------------------------
113
//  attribute selector tests
114
// -----------------------------------------------------------------------
115
 
116
AttributeSelector.tests[""] = function($attribute) {
117
	return $attribute;
118
};
119
 
120
AttributeSelector.tests["="] = function($attribute, $value) {
121
	return $attribute + "==" + Quote.add($value);
122
};
123
 
124
AttributeSelector.tests["~="] = function($attribute, $value) {
125
	return "/(^| )" + regEscape($value) + "( |$)/.test(" + $attribute + ")";
126
};
127
 
128
AttributeSelector.tests["|="] = function($attribute, $value) {
129
	return "/^" + regEscape($value) + "(-|$)/.test(" + $attribute + ")";
130
};
131
 
132
// -----------------------------------------------------------------------
133
//  parsing
134
// -----------------------------------------------------------------------
135
 
136
// override parseSelector to parse out attribute selectors
137
var _parseSelector = parseSelector;
138
parseSelector = function($selector) {
139
	return _parseSelector(AttributeSelector.parse($selector));
140
};
141
 
142
}); // addModule