Add support for :valid, :invalid, :in-range, and :out-of-range pseudo-classes.

Bug 302462, patch by Allan Beaufour <allan@beaufour.dk>, r+sr=bzbarsky


git-svn-id: svn://10.0.0.236/trunk@179340 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bzbarsky%mit.edu
2005-08-30 20:56:46 +00:00
parent d2f4f17e49
commit d3e53a63c2
3 changed files with 25 additions and 1 deletions

View File

@@ -167,5 +167,9 @@ public:
#define NS_EVENT_STATE_REQUIRED 0x00000100
#define NS_EVENT_STATE_OPTIONAL 0x00000200
#define NS_EVENT_STATE_VISITED 0x00000400
#define NS_EVENT_STATE_VALID 0x00000800
#define NS_EVENT_STATE_INVALID 0x00001000
#define NS_EVENT_STATE_INRANGE 0x00002000
#define NS_EVENT_STATE_OUTOFRANGE 0x00004000
#endif // nsIEventStateManager_h__

View File

@@ -80,3 +80,7 @@ CSS_PSEUDO_CLASS(onlyChild, ":only-child")
// http://www.w3.org/TR/2004/CR-css3-ui-20040511/#pseudo-classes
CSS_PSEUDO_CLASS(required, ":required")
CSS_PSEUDO_CLASS(optional, ":optional")
CSS_PSEUDO_CLASS(valid, ":valid")
CSS_PSEUDO_CLASS(invalid, ":invalid")
CSS_PSEUDO_CLASS(inRange, ":in-range")
CSS_PSEUDO_CLASS(outOfRange, ":out-of-range")

View File

@@ -3140,6 +3140,18 @@ static PRBool SelectorMatches(RuleProcessorData &data,
else if (nsCSSPseudoClasses::optional == pseudoClass->mAtom) {
result = STATE_CHECK(NS_EVENT_STATE_OPTIONAL);
}
else if (nsCSSPseudoClasses::valid == pseudoClass->mAtom) {
result = STATE_CHECK(NS_EVENT_STATE_VALID);
}
else if (nsCSSPseudoClasses::invalid == pseudoClass->mAtom) {
result = STATE_CHECK(NS_EVENT_STATE_INVALID);
}
else if (nsCSSPseudoClasses::inRange == pseudoClass->mAtom) {
result = STATE_CHECK(NS_EVENT_STATE_INRANGE);
}
else if (nsCSSPseudoClasses::outOfRange == pseudoClass->mAtom) {
result = STATE_CHECK(NS_EVENT_STATE_OUTOFRANGE);
}
else {
NS_ERROR("CSS parser parsed a pseudo-class that we do not handle");
result = PR_FALSE; // unknown pseudo class
@@ -3658,7 +3670,11 @@ PRBool IsStateSelector(nsCSSSelector& aSelector)
(pseudoClass->mAtom == nsCSSPseudoClasses::enabled) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::disabled) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::required) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::optional)) {
(pseudoClass->mAtom == nsCSSPseudoClasses::optional) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::valid) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::invalid) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::inRange) ||
(pseudoClass->mAtom == nsCSSPseudoClasses::outOfRange)) {
return PR_TRUE;
}
}