Changeset 74744 in webkit


Ignore:
Timestamp:
Dec 29, 2010 8:00:48 AM (13 years ago)
Author:
yael.aharon@nokia.com
Message:

[HTML5][Forms] Support for :in-range and :out-of-range CSS selectors
https://bugs.webkit.org/show_bug.cgi?id=29071

Reviewed by Kent Tamura.

WebCore:

Use InputType::rangeUnderflow() and InputType::rangeOverflow()
to determine if a control is in-range or out-of-range.

Tests: fast/css/pseudo-in-range-invalid-value.html

fast/css/pseudo-in-range.html
fast/css/pseudo-out-of-range.html

  • css/CSSSelector.cpp:

(WebCore::CSSSelector::pseudoId):
(WebCore::nameToPseudoTypeMap):
(WebCore::CSSSelector::extractPseudoType):

  • css/CSSSelector.h:
  • css/CSSStyleSelector.cpp:

(WebCore::CSSStyleSelector::canShareStyleWithElement):
(WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

  • dom/Element.h:

(WebCore::Element::isInRange):
(WebCore::Element::isOutOfRange):

  • html/BaseDateAndTimeInputType.cpp:

(WebCore::BaseDateAndTimeInputType::supportsRangeLimitation):

  • html/BaseDateAndTimeInputType.h:
  • html/HTMLInputElement.cpp:

(WebCore::HTMLInputElement::isInRange):
(WebCore::HTMLInputElement::isOutOfRange):

  • html/HTMLInputElement.h:
  • html/InputType.cpp:

(WebCore::InputType::supportsRangeLimitation):

  • html/InputType.h:
  • html/NumberInputType.cpp:

(WebCore::NumberInputType::supportsRangeLimitation):

  • html/NumberInputType.h:
  • html/RangeInputType.cpp:

(WebCore::RangeInputType::supportsRangeLimitation):

  • html/RangeInputType.h:

LayoutTests:

  • fast/css/pseudo-in-range-expected.txt: Added.
  • fast/css/pseudo-in-range-invalid-value-expected.txt: Added.
  • fast/css/pseudo-in-range-invalid-value.html: Added.
  • fast/css/pseudo-in-range.html: Added.
  • fast/css/pseudo-out-of-range-expected.txt: Added.
  • fast/css/pseudo-out-of-range.html: Added.
  • fast/css/script-tests/pseudo-in-range-invalid-value.js: Added.
  • fast/css/script-tests/pseudo-in-range.js: Added.
  • fast/css/script-tests/pseudo-out-of-range.js: Added.
Location:
trunk
Files:
9 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r74743 r74744  
     12010-12-29  Yael Aharon  <yael.aharon@nokia.com>
     2
     3        Reviewed by Kent Tamura.
     4
     5        [HTML5][Forms] Support for :in-range and :out-of-range CSS selectors
     6        https://bugs.webkit.org/show_bug.cgi?id=29071
     7
     8        * fast/css/pseudo-in-range-expected.txt: Added.
     9        * fast/css/pseudo-in-range-invalid-value-expected.txt: Added.
     10        * fast/css/pseudo-in-range-invalid-value.html: Added.
     11        * fast/css/pseudo-in-range.html: Added.
     12        * fast/css/pseudo-out-of-range-expected.txt: Added.
     13        * fast/css/pseudo-out-of-range.html: Added.
     14        * fast/css/script-tests/pseudo-in-range-invalid-value.js: Added.
     15        * fast/css/script-tests/pseudo-in-range.js: Added.
     16        * fast/css/script-tests/pseudo-out-of-range.js: Added.
     17
    1182010-12-29  Abhishek Arya  <inferno@chromium.org>
    219
  • trunk/WebCore/ChangeLog

    r74743 r74744  
     12010-12-29  Yael Aharon  <yael.aharon@nokia.com>
     2
     3        Reviewed by Kent Tamura.
     4
     5        [HTML5][Forms] Support for :in-range and :out-of-range CSS selectors
     6        https://bugs.webkit.org/show_bug.cgi?id=29071
     7
     8        Use InputType::rangeUnderflow() and InputType::rangeOverflow()
     9        to determine if a control is in-range or out-of-range.
     10
     11        Tests: fast/css/pseudo-in-range-invalid-value.html
     12               fast/css/pseudo-in-range.html
     13               fast/css/pseudo-out-of-range.html
     14
     15        * css/CSSSelector.cpp:
     16        (WebCore::CSSSelector::pseudoId):
     17        (WebCore::nameToPseudoTypeMap):
     18        (WebCore::CSSSelector::extractPseudoType):
     19        * css/CSSSelector.h:
     20        * css/CSSStyleSelector.cpp:
     21        (WebCore::CSSStyleSelector::canShareStyleWithElement):
     22        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
     23        * dom/Element.h:
     24        (WebCore::Element::isInRange):
     25        (WebCore::Element::isOutOfRange):
     26        * html/BaseDateAndTimeInputType.cpp:
     27        (WebCore::BaseDateAndTimeInputType::supportsRangeLimitation):
     28        * html/BaseDateAndTimeInputType.h:
     29        * html/HTMLInputElement.cpp:
     30        (WebCore::HTMLInputElement::isInRange):
     31        (WebCore::HTMLInputElement::isOutOfRange):
     32        * html/HTMLInputElement.h:
     33        * html/InputType.cpp:
     34        (WebCore::InputType::supportsRangeLimitation):
     35        * html/InputType.h:
     36        * html/NumberInputType.cpp:
     37        (WebCore::NumberInputType::supportsRangeLimitation):
     38        * html/NumberInputType.h:
     39        * html/RangeInputType.cpp:
     40        (WebCore::RangeInputType::supportsRangeLimitation):
     41        * html/RangeInputType.h:
     42
    1432010-12-29  Abhishek Arya  <inferno@chromium.org>
    244
  • trunk/WebCore/css/CSSSelector.cpp

    r66251 r74744  
    312312    case PseudoLeftPage:
    313313    case PseudoRightPage:
     314    case PseudoInRange:
     315    case PseudoOutOfRange:
    314316        return NOPSEUDO;
    315317    case PseudoNotParsed:
     
    438440    DEFINE_STATIC_LOCAL(AtomicString, fullScreenDocument, ("-webkit-full-screen-document"));
    439441#endif
     442    DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range"));
     443    DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range"));
    440444
    441445    static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0;
     
    553557        nameToPseudoType->set(fullScreenDocument.impl(), CSSSelector::PseudoFullScreenDocument);
    554558#endif
     559        nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange);
     560        nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange);
    555561    }
    556562    return nameToPseudoType;
     
    686692    case PseudoFullScreenDocument:
    687693#endif
     694    case PseudoInRange:
     695    case PseudoOutOfRange:
    688696        break;
    689697    case PseudoFirstPage:
  • trunk/WebCore/css/CSSSelector.h

    r66251 r74744  
    222222            PseudoFullScreenDocument,
    223223#endif
     224            PseudoInRange,
     225            PseudoOutOfRange,
    224226        };
    225227
  • trunk/WebCore/css/CSSStyleSelector.cpp

    r74649 r74744  
    10161016                if (willValidate && (s->isValidFormControlElement() != m_element->isValidFormControlElement()))
    10171017                    return false;
     1018
     1019                if (s->isInRange() != m_element->isInRange())
     1020                    return false;
     1021
     1022                if (s->isOutOfRange() != m_element->isOutOfRange())
     1023                    return false;
    10181024            }
    10191025
     
    26732679                return true;
    26742680#endif
     2681            case CSSSelector::PseudoInRange:
     2682                if (!e)
     2683                    return false;
     2684                e->document()->setContainsValidityStyleRules();
     2685                return e->isInRange();
     2686            case CSSSelector::PseudoOutOfRange:
     2687                if (!e)
     2688                    return false;
     2689                e->document()->setContainsValidityStyleRules();
     2690                return e->isOutOfRange();
    26752691            case CSSSelector::PseudoUnknown:
    26762692            case CSSSelector::PseudoNotParsed:
  • trunk/WebCore/dom/Element.h

    r74715 r74744  
    305305    virtual bool isValidFormControlElement() { return false; }
    306306    virtual bool hasUnacceptableValue() const { return false; }
     307    virtual bool isInRange() const { return false; }
     308    virtual bool isOutOfRange() const { return false; }
    307309
    308310    virtual bool formControlValueMatchesRenderer() const { return false; }
  • trunk/WebCore/html/BaseDateAndTimeInputType.cpp

    r74549 r74744  
    9595}
    9696
     97bool BaseDateAndTimeInputType::supportsRangeLimitation() const
     98{
     99    return true;
     100}
     101
    97102double BaseDateAndTimeInputType::defaultValueForStepUp() const
    98103{
  • trunk/WebCore/html/BaseDateAndTimeInputType.h

    r74549 r74744  
    5656    virtual bool rangeUnderflow(const String&) const;
    5757    virtual bool rangeOverflow(const String&) const;
     58    virtual bool supportsRangeLimitation() const;
    5859    virtual double defaultValueForStepUp() const;
    5960    virtual bool stepMismatch(const String&, double) const;
  • trunk/WebCore/html/HTMLInputElement.cpp

    r74549 r74744  
    14881488}
    14891489
     1490bool HTMLInputElement::isInRange() const
     1491{
     1492    return m_inputType->supportsRangeLimitation() && !rangeUnderflow(value()) && !rangeOverflow(value());
     1493}
     1494
     1495bool HTMLInputElement::isOutOfRange() const
     1496{
     1497    return m_inputType->supportsRangeLimitation() && (rangeUnderflow(value()) || rangeOverflow(value()));
     1498}
     1499
    14901500bool HTMLInputElement::needsActivationCallback()
    14911501{
  • trunk/WebCore/html/HTMLInputElement.h

    r74549 r74744  
    313313    virtual bool hasUnacceptableValue() const;
    314314
     315    virtual bool isInRange() const;
     316    virtual bool isOutOfRange() const;
     317
    315318    virtual void documentDidBecomeActive();
    316319
  • trunk/WebCore/html/InputType.cpp

    r74549 r74744  
    221221}
    222222
     223bool InputType::supportsRangeLimitation() const
     224{
     225    return false;
     226}
     227
    223228double InputType::defaultValueForStepUp() const
    224229{
  • trunk/WebCore/html/InputType.h

    r74549 r74744  
    9494    virtual bool rangeUnderflow(const String&) const;
    9595    virtual bool rangeOverflow(const String&) const;
     96    virtual bool supportsRangeLimitation() const;
    9697    virtual double defaultValueForStepUp() const;
    9798    virtual double minimum() const;
  • trunk/WebCore/html/NumberInputType.cpp

    r74549 r74744  
    111111}
    112112
     113bool NumberInputType::supportsRangeLimitation() const
     114{
     115    return true;
     116}
     117
    113118double NumberInputType::minimum() const
    114119{
     
    230235}
    231236
    232 
    233237} // namespace WebCore
  • trunk/WebCore/html/NumberInputType.h

    r74549 r74744  
    4949    virtual bool rangeUnderflow(const String&) const;
    5050    virtual bool rangeOverflow(const String&) const;
     51    virtual bool supportsRangeLimitation() const;
    5152    virtual double minimum() const;
    5253    virtual double maximum() const;
  • trunk/WebCore/html/RangeInputType.cpp

    r74549 r74744  
    9393    ASSERT_UNUSED(value, parseToDouble(value, numeric_limits<double>::quiet_NaN()) <= maximum());
    9494    return false;
     95}
     96
     97bool RangeInputType::supportsRangeLimitation() const
     98{
     99    return true;
    95100}
    96101
  • trunk/WebCore/html/RangeInputType.h

    r74549 r74744  
    4949    virtual bool rangeUnderflow(const String&) const;
    5050    virtual bool rangeOverflow(const String&) const;
     51    virtual bool supportsRangeLimitation() const;
    5152    virtual double minimum() const;
    5253    virtual double maximum() const;
Note: See TracChangeset for help on using the changeset viewer.