- 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;