Changeset 129206 in webkit


Ignore:
Timestamp:
Sep 21, 2012 3:06:10 AM (12 years ago)
Author:
yosin@chromium.org
Message:

[Forms] DateTimeEditElement::layout() should take date time format as a parameter
https://bugs.webkit.org/show_bug.cgi?id=97300

Reviewed by Kent Tamura.

This patch introduces DateTimeEditElement::LayoutParameters struct for
passing four parameters to DateTimeEditElement::layout() for passing
date time format from client of DateTimeEditElement instead of
DateTimeEditElement::layout() takes time or short time format.

This patch is a part of preparation of introducing multiple fields
date/datetime/month/week input UI.

This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS.

No new tests. This patch doesn't change behavior.

  • html/TimeInputType.cpp:

(WebCore::TimeInputType::updateInnerTextValue): Changed to use LayoutParmeters.

  • html/shadow/DateTimeEditElement.cpp: Removed unused include files, LocalizedDate.h and LocalizedNumber.h.

(DateTimeEditBuilder):
(WebCore::DateTimeEditBuilder::DateTimeEditBuilder): Changed parameters to LayoutParmeters.
(WebCore::DateTimeEditElement::LayoutParameters::shouldHaveSecondField): Moved from DateTimeEditBuilder::needSecondField().
(WebCore::DateTimeEditElement::layout): Changed to take LayoutParameters.
(WebCore::DateTimeEditElement::setValueAsDate): ditto
(WebCore::DateTimeEditElement::setEmptyValue): ditto

  • html/shadow/DateTimeEditElement.h: Removed unused classe declarations DateComponents and DateTimeEditLayouter.

(LayoutParameters): Added to bundle parameters for layout().
(WebCore::DateTimeEditElement::LayoutParameters::LayoutParameters): Added.

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r129205 r129206  
     12012-09-21  Yoshifumi Inoue  <yosin@chromium.org>
     2
     3        [Forms] DateTimeEditElement::layout() should take date time format as a parameter
     4        https://bugs.webkit.org/show_bug.cgi?id=97300
     5
     6        Reviewed by Kent Tamura.
     7
     8        This patch introduces DateTimeEditElement::LayoutParameters struct for
     9        passing four parameters to DateTimeEditElement::layout() for passing
     10        date time format from client of DateTimeEditElement instead of
     11        DateTimeEditElement::layout() takes time or short time format.
     12
     13        This patch is a part of preparation of introducing multiple fields
     14        date/datetime/month/week input UI.
     15
     16        This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
     17        ENABLE_INPUT_TYPE_TIME_MULTIPLE_FIELDS.
     18
     19        No new tests. This patch doesn't change behavior.
     20
     21        * html/TimeInputType.cpp:
     22        (WebCore::TimeInputType::updateInnerTextValue): Changed to use LayoutParmeters.
     23        * html/shadow/DateTimeEditElement.cpp:  Removed unused include files, LocalizedDate.h and LocalizedNumber.h.
     24        (DateTimeEditBuilder):
     25        (WebCore::DateTimeEditBuilder::DateTimeEditBuilder): Changed parameters to LayoutParmeters.
     26        (WebCore::DateTimeEditElement::LayoutParameters::shouldHaveSecondField): Moved from DateTimeEditBuilder::needSecondField().
     27        (WebCore::DateTimeEditElement::layout): Changed to take LayoutParameters.
     28        (WebCore::DateTimeEditElement::setValueAsDate): ditto
     29        (WebCore::DateTimeEditElement::setEmptyValue): ditto
     30        * html/shadow/DateTimeEditElement.h: Removed unused classe declarations DateComponents and DateTimeEditLayouter.
     31        (LayoutParameters):  Added to bundle parameters for layout().
     32        (WebCore::DateTimeEditElement::LayoutParameters::LayoutParameters): Added.
     33
    1342012-09-20  Pavel Feldman  <pfeldman@chromium.org>
    235
  • trunk/Source/WebCore/html/TimeInputType.cpp

    r129095 r129206  
    4747#include "FormController.h"
    4848#include "KeyboardEvent.h"
     49#include "Localizer.h"
    4950#include "ShadowRoot.h"
    5051#endif
     
    305306
    306307    Localizer& localizer = element()->document()->getLocalizer(element()->computeInheritedLanguage());
    307     const StepRange stepRange(createStepRange(AnyIsDefaultStep));
     308    DateTimeEditElement::LayoutParameters layoutParameters(localizer, createStepRange(AnyIsDefaultStep));
     309
    308310    DateComponents date;
    309     if (parseToDateComponents(element()->value(), &date))
    310         m_dateTimeEditElement->setValueAsDate(stepRange, date, localizer);
    311     else {
    312         setMillisecondToDateComponents(stepRange.minimum().toDouble(), &date);
    313         m_dateTimeEditElement->setEmptyValue(stepRange, date, localizer);
     311    const bool hasValue = parseToDateComponents(element()->value(), &date);
     312    if (!hasValue)
     313        setMillisecondToDateComponents(layoutParameters.stepRange.minimum().toDouble(), &date);
     314
     315    if (date.second() || layoutParameters.shouldHaveSecondField()) {
     316        layoutParameters.dateTimeFormat = localizer.timeFormat();
     317        layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
     318    } else {
     319        layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
     320        layoutParameters.fallbackDateTimeFormat = "HH:mm";
    314321    }
     322
     323    if (hasValue)
     324        m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
     325    else
     326        m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
    315327}
    316328#else
  • trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp

    r128594 r129206  
    3636#include "HTMLNames.h"
    3737#include "KeyboardEvent.h"
    38 #include "LocalizedDate.h"
    39 #include "LocalizedNumber.h"
    4038#include "Localizer.h"
    4139#include "MouseEvent.h"
    42 #include "StepRange.h"
    4340#include "Text.h"
    4441#include <wtf/DateMath.h>
     
    5350
    5451public:
    55     DateTimeEditBuilder(DateTimeEditElement&, const StepRange&, const DateComponents&, Localizer&);
     52    DateTimeEditBuilder(DateTimeEditElement&, const DateTimeEditElement::LayoutParameters&, const DateComponents&);
    5653
    5754    bool build(const String&);
    58     bool needSecondField() const;
    5955
    6056private:
    6157    bool needMillisecondField() const;
    62     bool needMinuteField() const;
    6358    bool shouldMillisecondFieldReadOnly() const;
    6459    bool shouldMinuteFieldReadOnly() const;
     
    7570};
    7671
    77 DateTimeEditBuilder::DateTimeEditBuilder(DateTimeEditElement& elemnt, const StepRange& stepRange, const DateComponents& dateValue, Localizer& localizer)
     72DateTimeEditBuilder::DateTimeEditBuilder(DateTimeEditElement& elemnt, const DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& dateValue)
    7873    : m_editElement(elemnt)
    7974    , m_dateValue(dateValue)
    80     , m_stepRange(stepRange)
    81     , m_localizer(localizer)
     75    , m_stepRange(layoutParameters.stepRange)
     76    , m_localizer(layoutParameters.localizer)
    8277{
    8378}
     
    9489        || !m_stepRange.minimum().remainder(static_cast<int>(msPerSecond)).isZero()
    9590        || !m_stepRange.step().remainder(static_cast<int>(msPerSecond)).isZero();
    96 }
    97 
    98 bool DateTimeEditBuilder::needMinuteField() const
    99 {
    100     return m_dateValue.minute()
    101         || !m_stepRange.minimum().remainder(static_cast<int>(msPerHour)).isZero()
    102         || !m_stepRange.step().remainder(static_cast<int>(msPerHour)).isZero();
    103 }
    104 
    105 bool DateTimeEditBuilder::needSecondField() const
    106 {
    107     return m_dateValue.second()
    108         || !m_stepRange.minimum().remainder(static_cast<int>(msPerMinute)).isZero()
    109         || !m_stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
    11091}
    11192
     
    188169    ASSERT(text.length());
    189170    m_editElement.appendChild(Text::create(m_editElement.document(), text));
     171}
     172
     173// ----------------------------
     174
     175
     176bool DateTimeEditElement::LayoutParameters::shouldHaveSecondField() const
     177{
     178    return !stepRange.minimum().remainder(static_cast<int>(msPerMinute)).isZero()
     179        || !stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
    190180}
    191181
     
    341331}
    342332
    343 void DateTimeEditElement::layout(const StepRange& stepRange, const DateComponents& dateValue, Localizer& localizer)
     333void DateTimeEditElement::layout(const LayoutParameters& layoutParameters, const DateComponents& dateValue)
    344334{
    345335    size_t focusedFieldIndex = this->focusedFieldIndex();
     
    347337    const AtomicString focusedFieldId = focusedField ? focusedField->shadowPseudoId() : nullAtom;
    348338
    349     DateTimeEditBuilder builder(*this, stepRange, dateValue, localizer);
    350     const String dateTimeFormat = builder.needSecondField() ? localizer.timeFormat() : localizer.shortTimeFormat();
     339    DateTimeEditBuilder builder(*this, layoutParameters, dateValue);
    351340    Node* lastChildToBeRemoved = lastChild();
    352     if (!builder.build(dateTimeFormat) || m_fields.isEmpty()) {
     341    if (!builder.build(layoutParameters.dateTimeFormat) || m_fields.isEmpty()) {
    353342        lastChildToBeRemoved = lastChild();
    354         builder.build(builder.needSecondField() ? "HH:mm:ss" : "HH:mm");
     343        builder.build(layoutParameters.fallbackDateTimeFormat);
    355344    }
    356345
     
    408397}
    409398
    410 void DateTimeEditElement::setValueAsDate(const StepRange& stepRange, const DateComponents& date, Localizer& localizer)
    411 {
    412     layout(stepRange, date, localizer);
     399void DateTimeEditElement::setValueAsDate(const LayoutParameters& layoutParameters, const DateComponents& date)
     400{
     401    layout(layoutParameters, date);
    413402    for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
    414403        m_fields[fieldIndex]->setValueAsDate(date);
     
    421410}
    422411
    423 void DateTimeEditElement::setEmptyValue(const StepRange& stepRange, const DateComponents& dateForReadOnlyField, Localizer& localizer)
    424 {
    425     layout(stepRange, dateForReadOnlyField, localizer);
     412void DateTimeEditElement::setEmptyValue(const LayoutParameters& layoutParameters, const DateComponents& dateForReadOnlyField)
     413{
     414    layout(layoutParameters, dateForReadOnlyField);
    426415    for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
    427416        m_fields[fieldIndex]->setEmptyValue(dateForReadOnlyField, DateTimeFieldElement::DispatchNoEvent);
  • trunk/Source/WebCore/html/shadow/DateTimeEditElement.h

    r128594 r129206  
    3030#include "DateTimeFieldElement.h"
    3131#include "SpinButtonElement.h"
     32#include "StepRange.h"
    3233
    3334namespace WebCore {
    3435
    35 class DateComponents;
    36 class DateTimeEditLayouter;
    3736class DateTimeFieldsState;
    3837class KeyboardEvent;
     
    6160    };
    6261
     62    struct LayoutParameters {
     63        String dateTimeFormat;
     64        String fallbackDateTimeFormat;
     65        Localizer& localizer;
     66        const StepRange& stepRange;
     67
     68        LayoutParameters(Localizer& localizer, const StepRange& stepRange)
     69            : localizer(localizer)
     70            , stepRange(stepRange)
     71        {
     72        }
     73
     74        bool shouldHaveSecondField() const;
     75    };
     76
    6377    static PassRefPtr<DateTimeEditElement> create(Document*, EditControlOwner&);
    6478
     
    7286    void removeEditControlOwner() { m_editControlOwner = 0; }
    7387    void resetFields();
    74     void setEmptyValue(const StepRange&, const DateComponents&  dateForReadOnlyField, Localizer&);
    75     void setValueAsDate(const StepRange&, const DateComponents&, Localizer&);
     88    void setEmptyValue(const LayoutParameters&, const DateComponents& dateForReadOnlyField);
     89    void setValueAsDate(const LayoutParameters&, const DateComponents&);
    7690    void setValueAsDateTimeFieldsState(const DateTimeFieldsState&, const DateComponents& dateForReadOnlyField);
    7791    DateTimeFieldsState valueAsDateTimeFieldsState() const;
     
    100114    bool isDisabled() const;
    101115    bool isReadOnly() const;
    102     void layout(const StepRange&, const DateComponents&, Localizer&);
     116    void layout(const LayoutParameters&, const DateComponents&);
    103117    void updateUIState();
    104118
Note: See TracChangeset for help on using the changeset viewer.