Title: [129441] trunk/Source/WebCore
Revision
129441
Author
[email protected]
Date
2012-09-24 18:48:49 -0700 (Mon, 24 Sep 2012)

Log Message

[Forms] DateTimeEditElement should return string value for ease of implementing other date/time input types.
https://bugs.webkit.org/show_bug.cgi?id=97303

Reviewed by Kent Tamura.

This patch introduces a function DateTimeEditElement::value() for
setting internal text value of TimeInputType with new function
EditControlOwner::formatDateTimeFieldsState() to utilize this protocl
in other date time input types.

We used DateTimeEditElement::valueAsDouble() and and BaseDateAndTimeInputType::serialize()
to make string value then setting internal text value of multiple
fields time input UI. Although, this steps doesn't work well for
other date/time input types.

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/DateTimeFieldsState.cpp:
(WebCore::DateTimeFieldsState::hour23): Added to convert 1 to 12 hour value to 0 to 23 hour.
* html/DateTimeFieldsState.h:
(DateTimeFieldsState): Added declaration of hour23().
* html/TimeInputType.cpp:
(WebCore::TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged): Changed to use DateTimeEditElement::value() instead of DateTimeEditElement::valueAsDouble().
(WebCore::TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState): Added to format time.
(WebCore::TimeInputType::restoreFormControlState): Changed to use DateTimeEditElement::value() instead of DateTimeEditElement::valueAsDouble().
* html/TimeInputType.h:
(DateTimeEditControlOwnerImpl): Added a declaration of formatDateTimeFieldsState().
* html/shadow/DateTimeEditElement.cpp:
(WebCore::DateTimeEditElement::value): Added.
* html/shadow/DateTimeEditElement.h:
(EditControlOwner): Added a declaration of formatDateTimeFieldsState().
(DateTimeEditElement): Added a declaration of value().

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (129440 => 129441)


--- trunk/Source/WebCore/ChangeLog	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/ChangeLog	2012-09-25 01:48:49 UTC (rev 129441)
@@ -1,3 +1,41 @@
+2012-09-24  Yoshifumi Inoue  <[email protected]>
+
+        [Forms] DateTimeEditElement should return string value for ease of implementing other date/time input types.
+        https://bugs.webkit.org/show_bug.cgi?id=97303
+
+        Reviewed by Kent Tamura.
+
+        This patch introduces a function DateTimeEditElement::value() for
+        setting internal text value of TimeInputType with new function
+        EditControlOwner::formatDateTimeFieldsState() to utilize this protocl
+        in other date time input types.
+
+        We used DateTimeEditElement::valueAsDouble() and and BaseDateAndTimeInputType::serialize()
+        to make string value then setting internal text value of multiple
+        fields time input UI. Although, this steps doesn't work well for
+        other date/time input types.
+
+        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/DateTimeFieldsState.cpp:
+        (WebCore::DateTimeFieldsState::hour23): Added to convert 1 to 12 hour value to 0 to 23 hour.
+        * html/DateTimeFieldsState.h:
+        (DateTimeFieldsState): Added declaration of hour23().
+        * html/TimeInputType.cpp:
+        (WebCore::TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged): Changed to use DateTimeEditElement::value() instead of DateTimeEditElement::valueAsDouble().
+        (WebCore::TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState): Added to format time.
+        (WebCore::TimeInputType::restoreFormControlState): Changed to use DateTimeEditElement::value() instead of DateTimeEditElement::valueAsDouble().
+        * html/TimeInputType.h:
+        (DateTimeEditControlOwnerImpl): Added a declaration of formatDateTimeFieldsState().
+        * html/shadow/DateTimeEditElement.cpp:
+        (WebCore::DateTimeEditElement::value): Added.
+        * html/shadow/DateTimeEditElement.h:
+        (EditControlOwner): Added a declaration of formatDateTimeFieldsState().
+        (DateTimeEditElement): Added a declaration of value().
+
 2012-09-24  Dean Jackson  <[email protected]>
 
         [WebGL] Intel Mac needs built-in function emulation

Modified: trunk/Source/WebCore/html/DateTimeFieldsState.cpp (129440 => 129441)


--- trunk/Source/WebCore/html/DateTimeFieldsState.cpp	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/html/DateTimeFieldsState.cpp	2012-09-25 01:48:49 UTC (rev 129441)
@@ -67,6 +67,13 @@
 {
 }
 
+unsigned DateTimeFieldsState::hour23() const
+{
+    if (!hasHour() || !hasAMPM())
+        return emptyValue;
+    return (m_hour % 12) + (m_ampm == AMPMValuePM ? 12 : 0);
+}
+
 DateTimeFieldsState DateTimeFieldsState::restoreFormControlState(const FormControlState& state)
 {
     DateTimeFieldsState dateTimeFieldsState;

Modified: trunk/Source/WebCore/html/DateTimeFieldsState.h (129440 => 129441)


--- trunk/Source/WebCore/html/DateTimeFieldsState.h	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/html/DateTimeFieldsState.h	2012-09-25 01:48:49 UTC (rev 129441)
@@ -57,6 +57,7 @@
     AMPMValue ampm() const { return m_ampm; }
     unsigned dayOfMonth() const { return m_dayOfMonth; }
     unsigned hour() const { return m_hour; }
+    unsigned hour23() const;
     unsigned millisecond() const { return m_millisecond; }
     unsigned minute() const { return m_minute; }
     unsigned month() const { return m_month; }
@@ -88,7 +89,7 @@
     unsigned m_year;
     unsigned m_month;
     unsigned m_dayOfMonth;
-    unsigned m_hour;
+    unsigned m_hour; // 1 to 12.
     unsigned m_minute;
     unsigned m_second;
     unsigned m_millisecond;

Modified: trunk/Source/WebCore/html/TimeInputType.cpp (129440 => 129441)


--- trunk/Source/WebCore/html/TimeInputType.cpp	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/html/TimeInputType.cpp	2012-09-25 01:48:49 UTC (rev 129441)
@@ -48,6 +48,7 @@
 #include "KeyboardEvent.h"
 #include "Localizer.h"
 #include "ShadowRoot.h"
+#include <wtf/text/WTFString.h>
 #endif
 
 namespace WebCore {
@@ -149,13 +150,32 @@
 void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
 {
     RefPtr<HTMLInputElement> input(m_timeInputType.element());
-    input->setValueInternal(m_timeInputType.serialize(Decimal::fromDouble(m_timeInputType.m_dateTimeEditElement->valueAsDouble())), DispatchNoEvent);
+    input->setValueInternal(m_timeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
     input->setNeedsStyleRecalc();
     input->dispatchFormControlInputEvent();
     input->dispatchFormControlChangeEvent();
     input->notifyFormStateChanged();
 }
 
+
+String TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
+{
+    if (!dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM())
+        return emptyString();
+    if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond())
+        return String::format("%02u:%02u:%02u.%03u",
+                dateTimeFieldsState.hour23(),
+                dateTimeFieldsState.minute(),
+                dateTimeFieldsState.hasSecond() ? dateTimeFieldsState.second() : 0,
+                dateTimeFieldsState.millisecond());
+    if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second())
+        return String::format("%02u:%02u:%02u",
+                dateTimeFieldsState.hour23(),
+                dateTimeFieldsState.minute(),
+                dateTimeFieldsState.second());
+    return String::format("%02u:%02u", dateTimeFieldsState.hour23(), dateTimeFieldsState.minute());
+}
+
 bool TimeInputType::hasCustomFocusLogic() const
 {
     return false;
@@ -271,7 +291,7 @@
     setMillisecondToDateComponents(createStepRange(AnyIsDefaultStep).minimum().toDouble(), &date);
     DateTimeFieldsState dateTimeFieldsState = DateTimeFieldsState::restoreFormControlState(state);
     m_dateTimeEditElement->setValueAsDateTimeFieldsState(dateTimeFieldsState, date);
-    element()->setValueInternal(serialize(Decimal::fromDouble(m_dateTimeEditElement->valueAsDouble())), DispatchNoEvent);
+    element()->setValueInternal(m_dateTimeEditElement->value(), DispatchNoEvent);
 }
 
 FormControlState TimeInputType::saveFormControlState() const

Modified: trunk/Source/WebCore/html/TimeInputType.h (129440 => 129441)


--- trunk/Source/WebCore/html/TimeInputType.h	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/html/TimeInputType.h	2012-09-25 01:48:49 UTC (rev 129441)
@@ -71,6 +71,7 @@
         virtual void didBlurFromControl() OVERRIDE FINAL;
         virtual void didFocusOnControl() OVERRIDE FINAL;
         virtual void editControlValueChanged() OVERRIDE FINAL;
+        virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL;
         virtual bool isEditControlOwnerDisabled() const OVERRIDE FINAL;
         virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
 

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (129440 => 129441)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-09-25 01:48:49 UTC (rev 129441)
@@ -450,6 +450,13 @@
     }
 }
 
+String DateTimeEditElement::value() const
+{
+    if (!m_editControlOwner)
+        return emptyString();
+    return m_editControlOwner->formatDateTimeFieldsState(valueAsDateTimeFieldsState());
+}
+
 DateTimeFieldsState DateTimeEditElement::valueAsDateTimeFieldsState() const
 {
     DateTimeFieldsState dateTimeFieldsState;

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.h (129440 => 129441)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-09-25 01:26:28 UTC (rev 129440)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-09-25 01:48:49 UTC (rev 129441)
@@ -55,6 +55,7 @@
         virtual void didBlurFromControl() = 0;
         virtual void didFocusOnControl() = 0;
         virtual void editControlValueChanged() = 0;
+        virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const = 0;
         virtual bool isEditControlOwnerDisabled() const = 0;
         virtual bool isEditControlOwnerReadOnly() const = 0;
     };
@@ -88,6 +89,7 @@
     void setEmptyValue(const LayoutParameters&, const DateComponents& dateForReadOnlyField);
     void setValueAsDate(const LayoutParameters&, const DateComponents&);
     void setValueAsDateTimeFieldsState(const DateTimeFieldsState&, const DateComponents& dateForReadOnlyField);
+    String value() const;
     DateTimeFieldsState valueAsDateTimeFieldsState() const;
     double valueAsDouble() const;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to