Diff
Modified: trunk/Source/WebCore/ChangeLog (129728 => 129729)
--- trunk/Source/WebCore/ChangeLog 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/ChangeLog 2012-09-27 06:43:17 UTC (rev 129729)
@@ -1,5 +1,68 @@
2012-09-26 Yoshifumi Inoue <yo...@chromium.org>
+ [Forms] Move multiple fields related functions to BaseDateAndTimeInputType from TimeInputType
+ https://bugs.webkit.org/show_bug.cgi?id=97521
+
+ Reviewed by Kent Tamura.
+
+ This patch introduces new class BaseMultipleFieldsDateAndTimeInputType
+ for sharing code among multiple fields date/time input UI.
+
+ Member functions in BaseMultipleFieldsDateAndTimeInputType are moved
+ from TimeInputType. BaseMultipleFieldsDateAndTimeInputType.{cpp,h}
+ were copied from TimeInputType.{cpp,h} by r129721.
+
+ This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
+ ENABLE_INPUT_MULTIPLE_FIELDS_UI.
+
+ No new tests. This patch doesn't change behavior.
+
+ * WebCore.gypi: Changed to have html/BaseMultipleFieldsDateAndTimeInputType.{cpp,h}
+ * html/BaseDateAndTimeInputType.h:
+ (BaseDateAndTimeInputType): Exposed setMillisecondToDateComponents as protected for BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState().
+ * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl): Moved from TimeInputType::DateTimeEditControlOwnerImpl.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState): Moved from TimeInputType::DateTimeEditControlOwnerImpl and changed to call formatDateTimeFieldsState() in BaseMultipleFieldsDateAndTimeInputTypeInputType class.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::hasCustomFocusLogic): Moved from TimeInputType.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::blur): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::createRenderer): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::focus): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::forwardEvent): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::minOrMaxAttributeChanged): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::isTextField): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::saveFormControlState): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::setValue): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldUseInputMethod): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::stepAttributeChanged): ditto.
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Moved from TimeInputType and changed to call setupLayoutParameters() to set date/time format by each input type.
+ * html/BaseMultipleFieldsDateAndTimeInputType.h:
+ (BaseMultipleFieldsDateAndTimeInputType): Added.
+ (DateTimeEditControlOwnerImpl): Moved from TimeInputType.
+ * html/TimeInputType.cpp: Moved multiple fields UI related functions to BaseMultipleFieldsDateAndTimeInputType.
+ (WebCore::TimeInputType::TimeInputType): Changed base class name to BaseTimeInput.
+ (WebCore::TimeInputType::formatDateTimeFieldsState): Moved from TimeINput::DateTImeEditControlOwnerImpl class.
+ (WebCore::TimeInputType::setupLayoutParameters): Added for set time format.
+ * html/TimeInputType.h:
+ (TimeInputType): Chaned base class to BaseTimeInput which is alias of BaseDateAndTimeInputType or BaseMultipleFieldsDateAndTimeInputType.
+
+2012-09-26 Yoshifumi Inoue <yo...@chromium.org>
+
[Forms] Adding localization texts for multiple fields date/time input UI
https://bugs.webkit.org/show_bug.cgi?id=97633
Modified: trunk/Source/WebCore/WebCore.gypi (129728 => 129729)
--- trunk/Source/WebCore/WebCore.gypi 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/WebCore.gypi 2012-09-27 06:43:17 UTC (rev 129729)
@@ -4004,6 +4004,8 @@
'html/BaseClickableWithKeyInputType.h',
'html/BaseDateAndTimeInputType.cpp',
'html/BaseDateAndTimeInputType.h',
+ 'html/BaseMultipleFieldsDateAndTimeInputType.cpp',
+ 'html/BaseMultipleFieldsDateAndTimeInputType.h',
'html/BaseTextInputType.cpp',
'html/BaseTextInputType.h',
'html/ButtonInputType.cpp',
Modified: trunk/Source/WebCore/html/BaseDateAndTimeInputType.h (129728 => 129729)
--- trunk/Source/WebCore/html/BaseDateAndTimeInputType.h 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/BaseDateAndTimeInputType.h 2012-09-27 06:43:17 UTC (rev 129729)
@@ -46,10 +46,10 @@
virtual bool parseToDateComponents(const String&, DateComponents*) const OVERRIDE;
virtual String serialize(const Decimal&) const OVERRIDE;
String serializeWithComponents(const DateComponents&) const;
+ virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
private:
virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const = 0;
- virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
virtual DateComponents::Type dateType() const = 0;
virtual double valueAsDate() const OVERRIDE;
virtual void setValueAsDate(double, ExceptionCode&) const OVERRIDE;
Modified: trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp (129728 => 129729)
--- trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp 2012-09-27 06:43:17 UTC (rev 129729)
@@ -29,193 +29,102 @@
*/
#include "config.h"
-#include "TimeInputType.h"
+#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
+#include "BaseMultipleFieldsDateAndTimeInputType.h"
#include "DateComponents.h"
-#include "HTMLInputElement.h"
-#include "HTMLNames.h"
-#include "InputTypeNames.h"
-#include <wtf/CurrentTime.h>
-#include <wtf/DateMath.h>
-#include <wtf/MathExtras.h>
-#include <wtf/PassOwnPtr.h>
-
-#if ENABLE(INPUT_TYPE_TIME)
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "DateTimeFieldsState.h"
#include "ElementShadow.h"
#include "FormController.h"
+#include "HTMLInputElement.h"
#include "KeyboardEvent.h"
#include "Localizer.h"
#include "ShadowRoot.h"
-#include <wtf/text/WTFString.h>
-#endif
namespace WebCore {
-using namespace HTMLNames;
-
-static const int timeDefaultStep = 60;
-static const int timeDefaultStepBase = 0;
-static const int timeStepScaleFactor = 1000;
-
-PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
+BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(BaseMultipleFieldsDateAndTimeInputType& dateAndTimeInputType)
+ : m_dateAndTimeInputType(dateAndTimeInputType)
{
- return adoptPtr(new TimeInputType(element));
}
-const AtomicString& TimeInputType::formControlType() const
+BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
{
- return InputTypeNames::time();
}
-DateComponents::Type TimeInputType::dateType() const
+void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
{
- return DateComponents::Time;
-}
-
-Decimal TimeInputType::defaultValueForStepUp() const
-{
- double current = currentTimeMS();
- double utcOffset = calculateUTCOffset();
- double dstOffset = calculateDSTOffset(current, utcOffset);
- int offset = static_cast<int>((utcOffset + dstOffset) / msPerMinute);
- current += offset * msPerMinute;
-
- DateComponents date;
- date.setMillisecondsSinceMidnight(current);
- double milliseconds = date.millisecondsSinceEpoch();
- ASSERT(isfinite(milliseconds));
- return Decimal::fromDouble(milliseconds);
-}
-
-StepRange TimeInputType::createStepRange(AnyStepHandling anyStepHandling) const
-{
- DEFINE_STATIC_LOCAL(const StepRange::StepDescription, stepDescription, (timeDefaultStep, timeDefaultStepBase, timeStepScaleFactor, StepRange::ScaledStepValueShouldBeInteger));
-
- const Decimal stepBase = parseToNumber(element()->fastGetAttribute(minAttr), 0);
- const Decimal minimum = parseToNumber(element()->fastGetAttribute(minAttr), Decimal::fromDouble(DateComponents::minimumTime()));
- const Decimal maximum = parseToNumber(element()->fastGetAttribute(maxAttr), Decimal::fromDouble(DateComponents::maximumTime()));
- const Decimal step = StepRange::parseStep(anyStepHandling, stepDescription, element()->fastGetAttribute(stepAttr));
- return StepRange(stepBase, minimum, maximum, step, stepDescription);
-}
-
-bool TimeInputType::parseToDateComponentsInternal(const UChar* characters, unsigned length, DateComponents* out) const
-{
- ASSERT(out);
- unsigned end;
- return out->parseTime(characters, length, 0, end) && end == length;
-}
-
-bool TimeInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
-{
- ASSERT(date);
- return date->setMillisecondsSinceMidnight(value);
-}
-
-bool TimeInputType::isTimeField() const
-{
- return true;
-}
-
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-
-TimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(TimeInputType& timeInputType)
- : m_timeInputType(timeInputType)
-{
-}
-
-TimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
-{
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
-{
// We don't need to call blur(). This function is called when control
// lost focus.
// Remove focus ring by CSS "focus" pseudo class.
- m_timeInputType.element()->setFocus(false);
+ m_dateAndTimeInputType.element()->setFocus(false);
}
-void TimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
+void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
{
// We don't need to call focus(). This function is called when control
// got focus.
// Add focus ring by CSS "focus" pseudo class.
- m_timeInputType.element()->setFocus(true);
+ m_dateAndTimeInputType.element()->setFocus(true);
}
-void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
+void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
{
- RefPtr<HTMLInputElement> input(m_timeInputType.element());
- input->setValueInternal(m_timeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
+ RefPtr<HTMLInputElement> input(m_dateAndTimeInputType.element());
+ input->setValueInternal(m_dateAndTimeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
input->setNeedsStyleRecalc();
input->dispatchFormControlInputEvent();
input->dispatchFormControlChangeEvent();
input->notifyFormStateChanged();
}
-
-String TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
+String BaseMultipleFieldsDateAndTimeInputType::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());
+ return m_dateAndTimeInputType.formatDateTimeFieldsState(dateTimeFieldsState);
}
-bool TimeInputType::hasCustomFocusLogic() const
+bool BaseMultipleFieldsDateAndTimeInputType::hasCustomFocusLogic() const
{
return false;
}
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
+bool BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
{
- return m_timeInputType.element()->readOnly();
+ return m_dateAndTimeInputType.element()->readOnly();
}
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
+bool BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
{
- return m_timeInputType.element()->disabled();
+ return m_dateAndTimeInputType.element()->disabled();
}
-TimeInputType::TimeInputType(HTMLInputElement* element)
+BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement* element)
: BaseDateAndTimeInputType(element)
, m_dateTimeEditElement(0)
, m_dateTimeEditControlOwnerImpl(*this)
{
}
-TimeInputType::~TimeInputType()
+BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType()
{
if (m_dateTimeEditElement)
m_dateTimeEditElement->removeEditControlOwner();
}
-void TimeInputType::blur()
+void BaseMultipleFieldsDateAndTimeInputType::blur()
{
if (m_dateTimeEditElement)
m_dateTimeEditElement->blurByOwner();
}
-RenderObject* TimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
+RenderObject* BaseMultipleFieldsDateAndTimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
{
return InputType::createRenderer(arena, style);
}
-void TimeInputType::createShadowSubtree()
+void BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree()
{
ASSERT(element()->shadow());
@@ -225,7 +134,7 @@
updateInnerTextValue();
}
-void TimeInputType::destroyShadowSubtree()
+void BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree()
{
if (m_dateTimeEditElement) {
m_dateTimeEditElement->removeEditControlOwner();
@@ -234,56 +143,56 @@
BaseDateAndTimeInputType::destroyShadowSubtree();
}
-void TimeInputType::focus(bool)
+void BaseMultipleFieldsDateAndTimeInputType::focus(bool)
{
if (m_dateTimeEditElement)
m_dateTimeEditElement->focusByOwner();
}
-void TimeInputType::forwardEvent(Event* event)
+void BaseMultipleFieldsDateAndTimeInputType::forwardEvent(Event* event)
{
if (m_dateTimeEditElement)
m_dateTimeEditElement->defaultEventHandler(event);
}
-void TimeInputType::disabledAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged()
{
if (m_dateTimeEditElement)
m_dateTimeEditElement->disabledStateChanged();
}
-void TimeInputType::handleKeydownEvent(KeyboardEvent* event)
+void BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent(KeyboardEvent* event)
{
forwardEvent(event);
}
-bool TimeInputType::isKeyboardFocusable(KeyboardEvent*) const
+bool BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable(KeyboardEvent*) const
{
return false;
}
-bool TimeInputType::isMouseFocusable() const
+bool BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable() const
{
return false;
}
-void TimeInputType::minOrMaxAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::minOrMaxAttributeChanged()
{
updateInnerTextValue();
}
-void TimeInputType::readonlyAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged()
{
if (m_dateTimeEditElement)
m_dateTimeEditElement->readOnlyStateChanged();
}
-bool TimeInputType::isTextField() const
+bool BaseMultipleFieldsDateAndTimeInputType::isTextField() const
{
return false;
}
-void TimeInputType::restoreFormControlState(const FormControlState& state)
+void BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState(const FormControlState& state)
{
if (!m_dateTimeEditElement)
return;
@@ -294,7 +203,7 @@
element()->setValueInternal(m_dateTimeEditElement->value(), DispatchNoEvent);
}
-FormControlState TimeInputType::saveFormControlState() const
+FormControlState BaseMultipleFieldsDateAndTimeInputType::saveFormControlState() const
{
if (!m_dateTimeEditElement)
return FormControlState();
@@ -302,24 +211,24 @@
return m_dateTimeEditElement->valueAsDateTimeFieldsState().saveFormControlState();
}
-void TimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
+void BaseMultipleFieldsDateAndTimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
{
InputType::setValue(sanitizedValue, valueChanged, eventBehavior);
if (valueChanged)
updateInnerTextValue();
}
-bool TimeInputType::shouldUseInputMethod() const
+bool BaseMultipleFieldsDateAndTimeInputType::shouldUseInputMethod() const
{
return false;
}
-void TimeInputType::stepAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::stepAttributeChanged()
{
updateInnerTextValue();
}
-void TimeInputType::updateInnerTextValue()
+void BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue()
{
if (!m_dateTimeEditElement)
return;
@@ -332,25 +241,13 @@
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";
- }
+ setupLayoutParameters(layoutParameters, date);
if (hasValue)
m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
else
m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
}
-#else
-TimeInputType::TimeInputType(HTMLInputElement* element)
- : BaseDateAndTimeInputType(element)
-{
-}
-#endif
} // namespace WebCore
Modified: trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h (129728 => 129729)
--- trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h 2012-09-27 06:43:17 UTC (rev 129729)
@@ -28,43 +28,32 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef TimeInputType_h
-#define TimeInputType_h
+#ifndef BaseMultipleFieldsDateAndTimeInputType_h
+#define BaseMultipleFieldsDateAndTimeInputType_h
#include "BaseDateAndTimeInputType.h"
-#if ENABLE(INPUT_TYPE_TIME)
-
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "DateTimeEditElement.h"
-#endif
namespace WebCore {
-class TimeInputType : public BaseDateAndTimeInputType {
-public:
- static PassOwnPtr<InputType> create(HTMLInputElement*);
+class BaseMultipleFieldsDateAndTimeInputType : public BaseDateAndTimeInputType {
+protected:
+ BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement*);
+ virtual ~BaseMultipleFieldsDateAndTimeInputType();
+ virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const = 0;
+ virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const = 0;
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
- virtual ~TimeInputType();
-#endif
-
private:
- TimeInputType(HTMLInputElement*);
- virtual const AtomicString& formControlType() const OVERRIDE;
- virtual DateComponents::Type dateType() const OVERRIDE;
- virtual Decimal defaultValueForStepUp() const OVERRIDE;
- virtual StepRange createStepRange(AnyStepHandling) const OVERRIDE;
- virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const OVERRIDE;
- virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
- virtual bool isTimeField() const OVERRIDE;
-
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
+ // FIXME: DateTimeEditControlOwnerImpl should be removed by moving
+ // DateTimeEditElement::EditControlOwner into base class list of
+ // BaseMultipleFieldsDateAndTimeInputType.
class DateTimeEditControlOwnerImpl : public DateTimeEditElement::EditControlOwner {
WTF_MAKE_NONCOPYABLE(DateTimeEditControlOwnerImpl);
public:
- DateTimeEditControlOwnerImpl(TimeInputType&);
+ DateTimeEditControlOwnerImpl(BaseMultipleFieldsDateAndTimeInputType&);
virtual ~DateTimeEditControlOwnerImpl();
private:
@@ -75,7 +64,7 @@
virtual bool isEditControlOwnerDisabled() const OVERRIDE FINAL;
virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
- TimeInputType& m_timeInputType;
+ BaseMultipleFieldsDateAndTimeInputType& m_dateAndTimeInputType;
};
friend class DateTimeEditControlOwnerImpl;
@@ -104,7 +93,6 @@
DateTimeEditElement* m_dateTimeEditElement;
DateTimeEditControlOwnerImpl m_dateTimeEditControlOwnerImpl;
-#endif
};
} // namespace WebCore
Modified: trunk/Source/WebCore/html/TimeInputType.cpp (129728 => 129729)
--- trunk/Source/WebCore/html/TimeInputType.cpp 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/TimeInputType.cpp 2012-09-27 06:43:17 UTC (rev 129729)
@@ -41,13 +41,10 @@
#include <wtf/PassOwnPtr.h>
#if ENABLE(INPUT_TYPE_TIME)
+
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "DateTimeFieldsState.h"
-#include "ElementShadow.h"
-#include "FormController.h"
-#include "KeyboardEvent.h"
#include "Localizer.h"
-#include "ShadowRoot.h"
#include <wtf/text/WTFString.h>
#endif
@@ -59,6 +56,11 @@
static const int timeDefaultStepBase = 0;
static const int timeStepScaleFactor = 1000;
+TimeInputType::TimeInputType(HTMLInputElement* element)
+ : BaseTimeInputType(element)
+{
+}
+
PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
{
return adoptPtr(new TimeInputType(element));
@@ -120,46 +122,8 @@
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-TimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(TimeInputType& timeInputType)
- : m_timeInputType(timeInputType)
+String TimeInputType::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
{
-}
-
-TimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
-{
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
-{
- // We don't need to call blur(). This function is called when control
- // lost focus.
-
- // Remove focus ring by CSS "focus" pseudo class.
- m_timeInputType.element()->setFocus(false);
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
-{
- // We don't need to call focus(). This function is called when control
- // got focus.
-
- // Add focus ring by CSS "focus" pseudo class.
- m_timeInputType.element()->setFocus(true);
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
-{
- RefPtr<HTMLInputElement> input(m_timeInputType.element());
- 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())
@@ -176,180 +140,16 @@
return String::format("%02u:%02u", dateTimeFieldsState.hour23(), dateTimeFieldsState.minute());
}
-bool TimeInputType::hasCustomFocusLogic() const
+void TimeInputType::setupLayoutParameters(DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& date) const
{
- return false;
-}
-
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
-{
- return m_timeInputType.element()->readOnly();
-}
-
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
-{
- return m_timeInputType.element()->disabled();
-}
-
-TimeInputType::TimeInputType(HTMLInputElement* element)
- : BaseDateAndTimeInputType(element)
- , m_dateTimeEditElement(0)
- , m_dateTimeEditControlOwnerImpl(*this)
-{
-}
-
-TimeInputType::~TimeInputType()
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->removeEditControlOwner();
-}
-
-void TimeInputType::blur()
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->blurByOwner();
-}
-
-RenderObject* TimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
-{
- return InputType::createRenderer(arena, style);
-}
-
-void TimeInputType::createShadowSubtree()
-{
- ASSERT(element()->shadow());
-
- RefPtr<DateTimeEditElement> dateTimeEditElement(DateTimeEditElement::create(element()->document(), m_dateTimeEditControlOwnerImpl));
- m_dateTimeEditElement = dateTimeEditElement.get();
- element()->userAgentShadowRoot()->appendChild(m_dateTimeEditElement);
- updateInnerTextValue();
-}
-
-void TimeInputType::destroyShadowSubtree()
-{
- if (m_dateTimeEditElement) {
- m_dateTimeEditElement->removeEditControlOwner();
- m_dateTimeEditElement = 0;
- }
- BaseDateAndTimeInputType::destroyShadowSubtree();
-}
-
-void TimeInputType::focus(bool)
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->focusByOwner();
-}
-
-void TimeInputType::forwardEvent(Event* event)
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->defaultEventHandler(event);
-}
-
-void TimeInputType::disabledAttributeChanged()
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->disabledStateChanged();
-}
-
-void TimeInputType::handleKeydownEvent(KeyboardEvent* event)
-{
- forwardEvent(event);
-}
-
-bool TimeInputType::isKeyboardFocusable(KeyboardEvent*) const
-{
- return false;
-}
-
-bool TimeInputType::isMouseFocusable() const
-{
- return false;
-}
-
-void TimeInputType::minOrMaxAttributeChanged()
-{
- updateInnerTextValue();
-}
-
-void TimeInputType::readonlyAttributeChanged()
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->readOnlyStateChanged();
-}
-
-bool TimeInputType::isTextField() const
-{
- return false;
-}
-
-void TimeInputType::restoreFormControlState(const FormControlState& state)
-{
- if (!m_dateTimeEditElement)
- return;
- DateComponents date;
- setMillisecondToDateComponents(createStepRange(AnyIsDefaultStep).minimum().toDouble(), &date);
- DateTimeFieldsState dateTimeFieldsState = DateTimeFieldsState::restoreFormControlState(state);
- m_dateTimeEditElement->setValueAsDateTimeFieldsState(dateTimeFieldsState, date);
- element()->setValueInternal(m_dateTimeEditElement->value(), DispatchNoEvent);
-}
-
-FormControlState TimeInputType::saveFormControlState() const
-{
- if (!m_dateTimeEditElement)
- return FormControlState();
-
- return m_dateTimeEditElement->valueAsDateTimeFieldsState().saveFormControlState();
-}
-
-void TimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
-{
- InputType::setValue(sanitizedValue, valueChanged, eventBehavior);
- if (valueChanged)
- updateInnerTextValue();
-}
-
-bool TimeInputType::shouldUseInputMethod() const
-{
- return false;
-}
-
-void TimeInputType::stepAttributeChanged()
-{
- updateInnerTextValue();
-}
-
-void TimeInputType::updateInnerTextValue()
-{
- if (!m_dateTimeEditElement)
- return;
-
- Localizer& localizer = element()->document()->getLocalizer(element()->computeInheritedLanguage());
- DateTimeEditElement::LayoutParameters layoutParameters(localizer, createStepRange(AnyIsDefaultStep));
-
- DateComponents date;
- 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.dateTimeFormat = layoutParameters.localizer.timeFormat();
layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
} else {
- layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
+ layoutParameters.dateTimeFormat = layoutParameters.localizer.shortTimeFormat();
layoutParameters.fallbackDateTimeFormat = "HH:mm";
}
-
- if (hasValue)
- m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
- else
- m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
}
-#else
-TimeInputType::TimeInputType(HTMLInputElement* element)
- : BaseDateAndTimeInputType(element)
-{
-}
#endif
} // namespace WebCore
Modified: trunk/Source/WebCore/html/TimeInputType.h (129728 => 129729)
--- trunk/Source/WebCore/html/TimeInputType.h 2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/TimeInputType.h 2012-09-27 06:43:17 UTC (rev 129729)
@@ -31,24 +31,25 @@
#ifndef TimeInputType_h
#define TimeInputType_h
-#include "BaseDateAndTimeInputType.h"
-
#if ENABLE(INPUT_TYPE_TIME)
-
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-#include "DateTimeEditElement.h"
+#include "BaseMultipleFieldsDateAndTimeInputType.h"
+#else
+#include "BaseDateAndTimeInputType.h"
#endif
namespace WebCore {
-class TimeInputType : public BaseDateAndTimeInputType {
-public:
- static PassOwnPtr<InputType> create(HTMLInputElement*);
-
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
- virtual ~TimeInputType();
+typedef BaseMultipleFieldsDateAndTimeInputType BaseTimeInputType;
+#else
+typedef BaseDateAndTimeInputType BaseTimeInputType;
#endif
+class TimeInputType : public BaseTimeInputType {
+public:
+ static PassOwnPtr<InputType> create(HTMLInputElement*);
+
private:
TimeInputType(HTMLInputElement*);
virtual const AtomicString& formControlType() const OVERRIDE;
@@ -60,50 +61,9 @@
virtual bool isTimeField() const OVERRIDE;
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
- class DateTimeEditControlOwnerImpl : public DateTimeEditElement::EditControlOwner {
- WTF_MAKE_NONCOPYABLE(DateTimeEditControlOwnerImpl);
-
- public:
- DateTimeEditControlOwnerImpl(TimeInputType&);
- virtual ~DateTimeEditControlOwnerImpl();
-
- private:
- 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;
-
- TimeInputType& m_timeInputType;
- };
-
- friend class DateTimeEditControlOwnerImpl;
-
- // InputType functions
- virtual void blur() OVERRIDE FINAL;
- virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE FINAL;
- virtual void createShadowSubtree() OVERRIDE FINAL;
- virtual void destroyShadowSubtree() OVERRIDE FINAL;
- virtual void disabledAttributeChanged() OVERRIDE FINAL;
- virtual void focus(bool restorePreviousSelection) OVERRIDE FINAL;
- virtual void forwardEvent(Event*) OVERRIDE FINAL;
- virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE FINAL;
- virtual bool hasCustomFocusLogic() const OVERRIDE FINAL;
- virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE FINAL;
- virtual bool isMouseFocusable() const OVERRIDE FINAL;
- virtual bool isTextField() const OVERRIDE FINAL;
- virtual void minOrMaxAttributeChanged() OVERRIDE FINAL;
- virtual void readonlyAttributeChanged() OVERRIDE FINAL;
- virtual void restoreFormControlState(const FormControlState&) OVERRIDE FINAL;
- virtual FormControlState saveFormControlState() const OVERRIDE FINAL;
- virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE FINAL;
- virtual bool shouldUseInputMethod() const OVERRIDE FINAL;
- virtual void stepAttributeChanged() OVERRIDE FINAL;
- virtual void updateInnerTextValue() OVERRIDE FINAL;
-
- DateTimeEditElement* m_dateTimeEditElement;
- DateTimeEditControlOwnerImpl m_dateTimeEditControlOwnerImpl;
+ // BaseMultipleFieldsDateAndTimeInputType functions
+ virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL;
+ virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const OVERRIDE FINAL;
#endif
};