From d3e53a63c2876c42511dbbbfccd4d5287307fc9f Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Tue, 30 Aug 2005 20:56:46 +0000 Subject: [PATCH] Add support for :valid, :invalid, :in-range, and :out-of-range pseudo-classes. Bug 302462, patch by Allan Beaufour , r+sr=bzbarsky git-svn-id: svn://10.0.0.236/trunk@179340 18797224-902f-48f8-a5cc-f745e15eee43 --- .../events/public/nsIEventStateManager.h | 4 ++++ mozilla/layout/style/nsCSSPseudoClassList.h | 4 ++++ mozilla/layout/style/nsCSSStyleSheet.cpp | 18 +++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mozilla/content/events/public/nsIEventStateManager.h b/mozilla/content/events/public/nsIEventStateManager.h index fc18965ba1b..079c8da3ab8 100644 --- a/mozilla/content/events/public/nsIEventStateManager.h +++ b/mozilla/content/events/public/nsIEventStateManager.h @@ -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__ diff --git a/mozilla/layout/style/nsCSSPseudoClassList.h b/mozilla/layout/style/nsCSSPseudoClassList.h index 158d7dcd176..e40e0cd183d 100644 --- a/mozilla/layout/style/nsCSSPseudoClassList.h +++ b/mozilla/layout/style/nsCSSPseudoClassList.h @@ -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") diff --git a/mozilla/layout/style/nsCSSStyleSheet.cpp b/mozilla/layout/style/nsCSSStyleSheet.cpp index 86f3616c9b9..07d1ad0d945 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsCSSStyleSheet.cpp @@ -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; } }