Title: [129206] trunk/Source/WebCore
Revision
129206
Author
[email protected]
Date
2012-09-21 03:06:10 -0700 (Fri, 21 Sep 2012)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (129205 => 129206)


--- trunk/Source/WebCore/ChangeLog	2012-09-21 09:44:19 UTC (rev 129205)
+++ trunk/Source/WebCore/ChangeLog	2012-09-21 10:06:10 UTC (rev 129206)
@@ -1,3 +1,36 @@
+2012-09-21  Yoshifumi Inoue  <[email protected]>
+
+        [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.
+
 2012-09-20  Pavel Feldman  <[email protected]>
 
         Web Inspector: render grid scale to the right / at bottom in case box is close to 0 on that axis.

Modified: trunk/Source/WebCore/html/TimeInputType.cpp (129205 => 129206)


--- trunk/Source/WebCore/html/TimeInputType.cpp	2012-09-21 09:44:19 UTC (rev 129205)
+++ trunk/Source/WebCore/html/TimeInputType.cpp	2012-09-21 10:06:10 UTC (rev 129206)
@@ -46,6 +46,7 @@
 #include "ElementShadow.h"
 #include "FormController.h"
 #include "KeyboardEvent.h"
+#include "Localizer.h"
 #include "ShadowRoot.h"
 #endif
 
@@ -304,14 +305,25 @@
         return;
 
     Localizer& localizer = element()->document()->getLocalizer(element()->computeInheritedLanguage());
-    const StepRange stepRange(createStepRange(AnyIsDefaultStep));
+    DateTimeEditElement::LayoutParameters layoutParameters(localizer, createStepRange(AnyIsDefaultStep));
+
     DateComponents date;
-    if (parseToDateComponents(element()->value(), &date))
-        m_dateTimeEditElement->setValueAsDate(stepRange, date, localizer);
-    else {
-        setMillisecondToDateComponents(stepRange.minimum().toDouble(), &date);
-        m_dateTimeEditElement->setEmptyValue(stepRange, date, localizer);
+    const bool hasValue = parseToDateComponents(element()->value(), &date);
+    if (!hasValue)
+        setMillisecondToDateComponents(layoutParameters.stepRange.minimum().toDouble(), &date);
+
+    if (date.second() || layoutParameters.shouldHaveSecondField()) {
+        layoutParameters.dateTimeFormat = localizer.timeFormat();
+        layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
+    } else {
+        layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
+        layoutParameters.fallbackDateTimeFormat = "HH:mm";
     }
+
+    if (hasValue)
+        m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
+    else
+        m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
 }
 #else
 TimeInputType::TimeInputType(HTMLInputElement* element)

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (129205 => 129206)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-09-21 09:44:19 UTC (rev 129205)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-09-21 10:06:10 UTC (rev 129206)
@@ -35,11 +35,8 @@
 #include "EventHandler.h"
 #include "HTMLNames.h"
 #include "KeyboardEvent.h"
-#include "LocalizedDate.h"
-#include "LocalizedNumber.h"
 #include "Localizer.h"
 #include "MouseEvent.h"
-#include "StepRange.h"
 #include "Text.h"
 #include <wtf/DateMath.h>
 #include <wtf/text/StringBuilder.h>
@@ -52,14 +49,12 @@
     WTF_MAKE_NONCOPYABLE(DateTimeEditBuilder);
 
 public:
-    DateTimeEditBuilder(DateTimeEditElement&, const StepRange&, const DateComponents&, Localizer&);
+    DateTimeEditBuilder(DateTimeEditElement&, const DateTimeEditElement::LayoutParameters&, const DateComponents&);
 
     bool build(const String&);
-    bool needSecondField() const;
 
 private:
     bool needMillisecondField() const;
-    bool needMinuteField() const;
     bool shouldMillisecondFieldReadOnly() const;
     bool shouldMinuteFieldReadOnly() const;
     bool shouldSecondFieldReadOnly() const;
@@ -74,11 +69,11 @@
     Localizer& m_localizer;
 };
 
-DateTimeEditBuilder::DateTimeEditBuilder(DateTimeEditElement& elemnt, const StepRange& stepRange, const DateComponents& dateValue, Localizer& localizer)
+DateTimeEditBuilder::DateTimeEditBuilder(DateTimeEditElement& elemnt, const DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& dateValue)
     : m_editElement(elemnt)
     , m_dateValue(dateValue)
-    , m_stepRange(stepRange)
-    , m_localizer(localizer)
+    , m_stepRange(layoutParameters.stepRange)
+    , m_localizer(layoutParameters.localizer)
 {
 }
 
@@ -95,20 +90,6 @@
         || !m_stepRange.step().remainder(static_cast<int>(msPerSecond)).isZero();
 }
 
-bool DateTimeEditBuilder::needMinuteField() const
-{
-    return m_dateValue.minute()
-        || !m_stepRange.minimum().remainder(static_cast<int>(msPerHour)).isZero()
-        || !m_stepRange.step().remainder(static_cast<int>(msPerHour)).isZero();
-}
-
-bool DateTimeEditBuilder::needSecondField() const
-{
-    return m_dateValue.second()
-        || !m_stepRange.minimum().remainder(static_cast<int>(msPerMinute)).isZero()
-        || !m_stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
-}
-
 void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int)
 {
     Document* const document = m_editElement.document();
@@ -191,6 +172,15 @@
 
 // ----------------------------
 
+
+bool DateTimeEditElement::LayoutParameters::shouldHaveSecondField() const
+{
+    return !stepRange.minimum().remainder(static_cast<int>(msPerMinute)).isZero()
+        || !stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
+}
+
+// ----------------------------
+
 DateTimeEditElement::EditControlOwner::~EditControlOwner()
 {
 }
@@ -340,18 +330,17 @@
     return m_editControlOwner && m_editControlOwner->isEditControlOwnerReadOnly();
 }
 
-void DateTimeEditElement::layout(const StepRange& stepRange, const DateComponents& dateValue, Localizer& localizer)
+void DateTimeEditElement::layout(const LayoutParameters& layoutParameters, const DateComponents& dateValue)
 {
     size_t focusedFieldIndex = this->focusedFieldIndex();
     DateTimeFieldElement* const focusedField = fieldAt(focusedFieldIndex);
     const AtomicString focusedFieldId = focusedField ? focusedField->shadowPseudoId() : nullAtom;
 
-    DateTimeEditBuilder builder(*this, stepRange, dateValue, localizer);
-    const String dateTimeFormat = builder.needSecondField() ? localizer.timeFormat() : localizer.shortTimeFormat();
+    DateTimeEditBuilder builder(*this, layoutParameters, dateValue);
     Node* lastChildToBeRemoved = lastChild();
-    if (!builder.build(dateTimeFormat) || m_fields.isEmpty()) {
+    if (!builder.build(layoutParameters.dateTimeFormat) || m_fields.isEmpty()) {
         lastChildToBeRemoved = lastChild();
-        builder.build(builder.needSecondField() ? "HH:mm:ss" : "HH:mm");
+        builder.build(layoutParameters.fallbackDateTimeFormat);
     }
 
     if (focusedFieldIndex != invalidFieldIndex) {
@@ -407,9 +396,9 @@
     HTMLDivElement::defaultEventHandler(event);
 }
 
-void DateTimeEditElement::setValueAsDate(const StepRange& stepRange, const DateComponents& date, Localizer& localizer)
+void DateTimeEditElement::setValueAsDate(const LayoutParameters& layoutParameters, const DateComponents& date)
 {
-    layout(stepRange, date, localizer);
+    layout(layoutParameters, date);
     for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
         m_fields[fieldIndex]->setValueAsDate(date);
 }
@@ -420,9 +409,9 @@
         m_fields[fieldIndex]->setValueAsDateTimeFieldsState(dateTimeFieldsState, dateForReadOnlyField);
 }
 
-void DateTimeEditElement::setEmptyValue(const StepRange& stepRange, const DateComponents& dateForReadOnlyField, Localizer& localizer)
+void DateTimeEditElement::setEmptyValue(const LayoutParameters& layoutParameters, const DateComponents& dateForReadOnlyField)
 {
-    layout(stepRange, dateForReadOnlyField, localizer);
+    layout(layoutParameters, dateForReadOnlyField);
     for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
         m_fields[fieldIndex]->setEmptyValue(dateForReadOnlyField, DateTimeFieldElement::DispatchNoEvent);
 }

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.h (129205 => 129206)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-09-21 09:44:19 UTC (rev 129205)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-09-21 10:06:10 UTC (rev 129206)
@@ -29,11 +29,10 @@
 #if ENABLE(INPUT_TYPE_TIME_MULTIPLE_FIELDS)
 #include "DateTimeFieldElement.h"
 #include "SpinButtonElement.h"
+#include "StepRange.h"
 
 namespace WebCore {
 
-class DateComponents;
-class DateTimeEditLayouter;
 class DateTimeFieldsState;
 class KeyboardEvent;
 class Localizer;
@@ -60,6 +59,21 @@
         virtual bool isEditControlOwnerReadOnly() const = 0;
     };
 
+    struct LayoutParameters {
+        String dateTimeFormat;
+        String fallbackDateTimeFormat;
+        Localizer& localizer;
+        const StepRange& stepRange;
+
+        LayoutParameters(Localizer& localizer, const StepRange& stepRange)
+            : localizer(localizer)
+            , stepRange(stepRange)
+        {
+        }
+
+        bool shouldHaveSecondField() const;
+    };
+
     static PassRefPtr<DateTimeEditElement> create(Document*, EditControlOwner&);
 
     virtual ~DateTimeEditElement();
@@ -71,8 +85,8 @@
     void readOnlyStateChanged();
     void removeEditControlOwner() { m_editControlOwner = 0; }
     void resetFields();
-    void setEmptyValue(const StepRange&, const DateComponents&  dateForReadOnlyField, Localizer&);
-    void setValueAsDate(const StepRange&, const DateComponents&, Localizer&);
+    void setEmptyValue(const LayoutParameters&, const DateComponents& dateForReadOnlyField);
+    void setValueAsDate(const LayoutParameters&, const DateComponents&);
     void setValueAsDateTimeFieldsState(const DateTimeFieldsState&, const DateComponents& dateForReadOnlyField);
     DateTimeFieldsState valueAsDateTimeFieldsState() const;
     double valueAsDouble() const;
@@ -99,7 +113,7 @@
     size_t focusedFieldIndex() const;
     bool isDisabled() const;
     bool isReadOnly() const;
-    void layout(const StepRange&, const DateComponents&, Localizer&);
+    void layout(const LayoutParameters&, const DateComponents&);
     void updateUIState();
 
     // DateTimeFieldElement::FieldOwner functions.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to