Diff
Modified: trunk/LayoutTests/ChangeLog (126533 => 126534)
--- trunk/LayoutTests/ChangeLog 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/ChangeLog 2012-08-24 04:23:10 UTC (rev 126534)
@@ -1,3 +1,28 @@
+2012-08-23 Yoshifumi Inoue <[email protected]>
+
+ [Forms] Step mismatched value should be editable in multiple field time UI.
+ https://bugs.webkit.org/show_bug.cgi?id=94664
+
+ Reviewed by Kent Tamura.
+
+ This patch adds new test case for step mismatched value case and
+ updates test cases to avoid step mismatched value, and a test file
+ for dynamic layout change casued by input element's value change.
+
+ Note: We need to do rebaseline for Chromium-Mac and Chromium-Win.
+
+ * fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic-expected.html: Updated for new test case and behavior change.
+ * fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic.html: ditto
+ * fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly.html: Updated for behavior change.
+ * fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-elements.html: ditto
+ * fast/forms/time-multiple-fields/time-multiple-fields-appearance-style.html: ditto
+ * fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value-expected.txt: Added.
+ * fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value.html: Added for dynamic layout change from value change.
+ * platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly-expected.png: ditto
+ * platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly-expected.txt: ditto
+ * platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-classes-expected.png: ditto
+ * platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-classes-expected.txt: ditto
+
2012-08-23 Kenneth Russell <[email protected]>
[Chromium] LayoutTests: css3/selector3/xml tests are flaky / have wrong expectations on Snow Leopard
Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic-expected.html (126533 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic-expected.html 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic-expected.html 2012-08-24 04:23:10 UTC (rev 126534)
@@ -4,11 +4,12 @@
</head>
<body>
<ul>
- <li>step=none <span id="focus" type="time"></span> <span type="time" value="12:34:56.789"></span></li>
- <li>step=1 <span type="time" step="1"></span> <span step="1" type="time" value="12:34:56.789"></span></li>
+ <li>step=none <span id="focus" type="time"></span> <span type="time" value="12:34"></span></li>
+ <li>step=1 <span type="time" step="1"></span> <span step="1" type="time" value="12:34:56"></span></li>
<li>step=0.0001 <span type="time" step="0.001"></span> <span step="0.001" type="time" value="12:34:56.789"></span></li>
- <li>step=60 <span type="time" step="60"></span> <span step="60" type="time" value="12:34:56.789"></span></li>
- <li>step=3600 <span type="time" step="3600"></span> <span step="3600" type="time" value="12:34:56.789"></span></li>
+ <li>step=60 <span type="time" step="60"></span> <span step="60" type="time" value="12:34"></span></li>
+ <li>step=3600 <span type="time" step="3600"></span> <span step="3600" type="time" value="12:00"></span></li>
+ <li>step mismatched <span type="time" step="1" value="12:34:56"></span></li>
</ul>
</body>
<script src=""
Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic.html (126533 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic.html 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic.html 2012-08-24 04:23:10 UTC (rev 126534)
@@ -1,11 +1,12 @@
<html>
<body>
<ul>
- <li>step=none <input id="focus" type="time"> <input type="time" value="12:34:56.789"></li>
- <li>step=1 <input type="time" step="1"> <input step="1" type="time" value="12:34:56.789"></li>
+ <li>step=none <input id="focus" type="time"> <input type="time" value="12:34"></li>
+ <li>step=1 <input type="time" step="1"> <input step="1" type="time" value="12:34:56"></li>
<li>step=0.0001 <input type="time" step="0.001"> <input step="0.001" type="time" value="12:34:56.789"></li>
- <li>step=60 <input type="time" step="60"> <input step="60" type="time" value="12:34:56.789"></li>
- <li>step=3600 <input type="time" step="3600"> <input step="3600" type="time" value="12:34:56.789"></li>
+ <li>step=60 <input type="time" step="60"> <input step="60" type="time" value="12:34"></li>
+ <li>step=3600 <input type="time" step="3600"> <input step="3600" type="time" value="12:00"></li>
+ <li>step mismatched <input type="time" step="60" value="12:34:56"></li>
</ul>
</body>
<script>
Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly.html (126533 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly.html 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly.html 2012-08-24 04:23:10 UTC (rev 126534)
@@ -2,19 +2,19 @@
<body>
Disabled
<ul>
- <li>step=none <input disabled type="time"> <input disabled type="time" value="12:34:56.789"></li>
- <li>step=1 <input disabled type="time" step="1"> <input disabled step="1" type="time" value="12:34:56.789"></li>
+ <li>step=none <input disabled type="time"> <input disabled type="time" value="12:34"></li>
+ <li>step=1 <input disabled type="time" step="1"> <input disabled step="1" type="time" value="12:34:56"></li>
<li>step=0.0001 <input disabled type="time" step="0.001"> <input disabled step="0.001" type="time" value="12:34:56.789"></li>
- <li>step=60 <input disabled type="time" step="60"> <input disabled step="60" type="time" value="12:34:56.789"></li>
- <li>step=3600 <input disabled type="time" step="3600"> <input disabled step="3600" type="time" value="12:34:56.789"></li>
+ <li>step=60 <input disabled type="time" step="60"> <input disabled step="60" type="time" value="12:34"></li>
+ <li>step=3600 <input disabled type="time" step="3600"> <input disabled step="3600" type="time" value="12:34"></li>
</ul>
Readonly
<ul>
- <li>step=none <input readonly type="time"> <input readonly type="time" value="12:34:56.789"></li>
- <li>step=1 <input readonly type="time" step="1"> <input readonly step="1" type="time" value="12:34:56.789"></li>
+ <li>step=none <input readonly type="time"> <input readonly type="time" value="12:34"></li>
+ <li>step=1 <input readonly type="time" step="1"> <input readonly step="1" type="time" value="12:34:56"></li>
<li>step=0.0001 <input readonly type="time" step="0.001"> <input readonly step="0.001" type="time" value="12:34:56.789"></li>
- <li>step=60 <input readonly type="time" step="60"> <input readonly step="60" type="time" value="12:34:56.789"></li>
- <li>step=3600 <input readonly type="time" step="3600"> <input readonly step="3600" type="time" value="12:34:56.789"></li>
+ <li>step=60 <input readonly type="time" step="60"> <input readonly step="60" type="time" value="12:34"></li>
+ <li>step=3600 <input readonly type="time" step="3600"> <input readonly step="3600" type="time" value="12:34"></li>
</ul>
</body>
</html>
Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-elements.html (126533 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-elements.html 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-elements.html 2012-08-24 04:23:10 UTC (rev 126534)
@@ -4,9 +4,9 @@
</head>
<body>
<ul>
- <li><input type="time" value="12:34:56" class="after"></li>
- <li><input type="time" value="12:34:56" class="before"></li>
- <li><input type="time" value="12:34:56" class="first-letter"></li>
+ <li><input type="time" value="12:34" class="after"></li>
+ <li><input type="time" value="12:34" class="before"></li>
+ <li><input type="time" value="12:34" class="first-letter"></li>
</ul>
</body>
</html>
Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-style.html (126533 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-style.html 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-appearance-style.html 2012-08-24 04:23:10 UTC (rev 126534)
@@ -1,11 +1,11 @@
<html>
<body>
<ul>
- <li>text-align: <input type="time" value="12:34:56" style="text-align: left"></li>
- <li>text-transform: <input type="time" value="12:34:56" style="text-transform: lowercase"></li>
- <li>background, color: <input type="time" value="12:34:56" style="border: 0px; background: green; color: yellow"></li>
- <li>font-size: <input type="time" value="12:34:56" style="font-size: 20pt"></li>
- <li>font-size with fixed input width: <input type="time" value="12:34:56" style="font-size: 20pt; width: 10em;"></li>
+ <li>text-align: <input type="time" value="12:34" style="text-align: left"></li>
+ <li>text-transform: <input type="time" value="12:34" style="text-transform: lowercase"></li>
+ <li>background, color: <input type="time" value="12:34" style="border: 0px; background: green; color: yellow"></li>
+ <li>font-size: <input type="time" value="12:34" style="font-size: 20pt"></li>
+ <li>font-size with fixed input width: <input type="time" value="12:34" style="font-size: 20pt; width: 10em;"></li>
</ul>
</body>
</html>
Added: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value-expected.txt (0 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value-expected.txt 2012-08-24 04:23:10 UTC (rev 126534)
@@ -0,0 +1,11 @@
+Change multiple fields time input UI layout by value
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS widthOfStep60 < widthWithMillisecond is true
+PASS widthOfStep60 == widthWithSecond is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Property changes on: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value.html (0 => 126534)
--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value.html (rev 0)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value.html 2012-08-24 04:23:10 UTC (rev 126534)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script>
+description("Change multiple fields time input UI layout by value");
+var testInput = document.createElement("input");
+testInput.setAttribute("type", "time");
+testInput.setAttribute("step", "60");
+testInput.setAttribute("value", "12:34:56");
+document.body.appendChild(testInput);
+var widthOfStep60 = testInput.offsetWidth;
+
+testInput.value = "12:34:56.789";
+var widthWithMillisecond = testInput.offsetWidth;
+shouldBeTrue('widthOfStep60 < widthWithMillisecond');
+
+testInput.value = "12:34:56";
+var widthWithSecond = testInput.offsetWidth;
+shouldBeTrue('widthOfStep60 == widthWithSecond');
+
+document.body.removeChild(testInput);
+</script>
+<script src=""
+</body>
+</html>
Property changes on: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value.html
___________________________________________________________________
Added: svn:eol-style
Modified: trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly-expected.png
(Binary files differ)
Modified: trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly-expected.txt (126533 => 126534)
--- trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly-expected.txt 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-disabled-readonly-expected.txt 2012-08-24 04:23:10 UTC (rev 126534)
@@ -219,7 +219,7 @@
text run at (2,2) width 16: "12"
RenderText {#text} at (20,2) size 8x16
text run at (20,2) width 8: ":"
- RenderBlock {SPAN} at (28,0) size 20x20 [color=#808080]
+ RenderBlock {SPAN} at (28,0) size 20x20
RenderText {#text} at (2,2) size 16x16
text run at (2,2) width 16: "34"
RenderText {#text} at (48,2) size 8x16
@@ -443,7 +443,7 @@
text run at (2,2) width 16: "12"
RenderText {#text} at (20,2) size 8x16
text run at (20,2) width 8: ":"
- RenderBlock {SPAN} at (28,0) size 20x20 [color=#808080]
+ RenderBlock {SPAN} at (28,0) size 20x20
RenderText {#text} at (2,2) size 16x16
text run at (2,2) width 16: "34"
RenderText {#text} at (48,2) size 8x16
Modified: trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-classes-expected.png
(Binary files differ)
Modified: trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-classes-expected.txt (126533 => 126534)
--- trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-classes-expected.txt 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/LayoutTests/platform/chromium-linux/fast/forms/time-multiple-fields/time-multiple-fields-appearance-pseudo-classes-expected.txt 2012-08-24 04:23:10 UTC (rev 126534)
@@ -66,7 +66,7 @@
text run at (2,2) width 16: "12"
RenderText {#text} at (20,2) size 8x16
text run at (20,2) width 8: ":"
- RenderBlock {SPAN} at (28,0) size 20x20 [color=#808080]
+ RenderBlock {SPAN} at (28,0) size 20x20
RenderText {#text} at (2,2) size 16x16
text run at (2,2) width 16: "34"
RenderText {#text} at (48,2) size 8x16
Modified: trunk/Source/WebCore/ChangeLog (126533 => 126534)
--- trunk/Source/WebCore/ChangeLog 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/Source/WebCore/ChangeLog 2012-08-24 04:23:10 UTC (rev 126534)
@@ -1,3 +1,40 @@
+2012-08-23 Yoshifumi Inoue <[email protected]>
+
+ [Forms] Step mismatched value should be editable in multiple field time UI.
+ https://bugs.webkit.org/show_bug.cgi?id=94664
+
+ Reviewed by Kent Tamura.
+
+ This patch changes layout method of multiple field time input UI to
+ check value of the "input" element in addition to step and range to
+ allow users to change step mismatched value from UI.
+
+ Tests: fast/forms/time-multiple-fields/time-multiple-fields-change-layout-by-value.html: for changing layout by value change.
+ This patch also adds new test case into fast/forms/time-multiple-fields/time-multiple-fields-appearance-basic.html.
+
+ * html/TimeInputType.cpp:
+ (WebCore::TimeInputType::createShadowSubtree): Changed for DateTimeEditElement::create signature change.
+ (WebCore::TimeInputType::minOrMaxAttributeChanged): Changed to call updateInnerTextValue instead of removed updateEditElementLayout()
+ (WebCore::TimeInputType::stepAttributeChanged): ditto.
+ (WebCore::TimeInputType::updateInnerTextValue): Changed for DateTimeEditElement::setValueAsDate() and setEmptyValue() signature change.
+ * html/TimeInputType.h:
+ (TimeInputType): Removed updateEditElementLayout() declaration.
+ * html/shadow/DateTimeEditElement.cpp:
+ (DateTimeEditBuilder):
+ (WebCore::DateTimeEditBuilder::DateTimeEditBuilder): Added a new parameter date value to constructor to use it for layout decision.
+ (WebCore::DateTimeEditBuilder::needMillisecondField): Changed to check date value too.
+ (WebCore::DateTimeEditBuilder::needMinuteField): ditto
+ (WebCore::DateTimeEditBuilder::needSecondField): ditto
+ (WebCore::DateTimeEditBuilder::shouldMillisecondFieldReadOnly): ditto
+ (WebCore::DateTimeEditBuilder::shouldMinuteFieldReadOnly): ditto
+ (WebCore::DateTimeEditBuilder::shouldSecondFieldReadOnly): ditto
+ (WebCore::DateTimeEditElement::create): Changed for removing stepRange parameter.
+ (WebCore::DateTimeEditElement::layout): Changed to keep focus field for new layout.
+ (WebCore::DateTimeEditElement::setValueAsDate): Changed to call layout() with StepRange and date value.
+ (WebCore::DateTimeEditElement::setEmptyValue): ditto
+ * html/shadow/DateTimeEditElement.h:
+ (DateTimeEditElement):
+
2012-08-23 Andreas Kling <[email protected]>
Use immutable StylePropertySets for element inline style declarations.
Modified: trunk/Source/WebCore/html/TimeInputType.cpp (126533 => 126534)
--- trunk/Source/WebCore/html/TimeInputType.cpp 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/Source/WebCore/html/TimeInputType.cpp 2012-08-24 04:23:10 UTC (rev 126534)
@@ -182,8 +182,7 @@
{
ASSERT(element()->shadow());
- const StepRange stepRange(createStepRange(AnyIsDefaultStep));
- RefPtr<DateTimeEditElement> dateTimeEditElement(DateTimeEditElement::create(element()->document(), m_dateTimeEditControlOwnerImpl, stepRange));
+ RefPtr<DateTimeEditElement> dateTimeEditElement(DateTimeEditElement::create(element()->document(), m_dateTimeEditControlOwnerImpl));
m_dateTimeEditElement = dateTimeEditElement.get();
element()->userAgentShadowRoot()->appendChild(m_dateTimeEditElement);
updateInnerTextValue();
@@ -238,7 +237,7 @@
void TimeInputType::minOrMaxAttributeChanged()
{
- updateEditElementLayout();
+ updateInnerTextValue();
}
void TimeInputType::readonlyAttributeChanged()
@@ -266,27 +265,21 @@
void TimeInputType::stepAttributeChanged()
{
- updateEditElementLayout();
+ updateInnerTextValue();
}
-void TimeInputType::updateEditElementLayout()
-{
- if (m_dateTimeEditElement)
- m_dateTimeEditElement->layout(createStepRange(AnyIsDefaultStep));
-}
-
void TimeInputType::updateInnerTextValue()
{
if (!m_dateTimeEditElement)
return;
+ const StepRange stepRange(createStepRange(AnyIsDefaultStep));
DateComponents date;
if (parseToDateComponents(element()->value(), &date))
- m_dateTimeEditElement->setValueAsDate(date);
+ m_dateTimeEditElement->setValueAsDate(stepRange, date);
else {
- const StepRange stepRange(createStepRange(AnyIsDefaultStep));
setMillisecondToDateComponents(stepRange.minimum().toDouble(), &date);
- m_dateTimeEditElement->setEmptyValue(date);
+ m_dateTimeEditElement->setEmptyValue(stepRange, date);
}
}
#else
Modified: trunk/Source/WebCore/html/TimeInputType.h (126533 => 126534)
--- trunk/Source/WebCore/html/TimeInputType.h 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/Source/WebCore/html/TimeInputType.h 2012-08-24 04:23:10 UTC (rev 126534)
@@ -80,8 +80,6 @@
friend class DateTimeEditControlOwnerImpl;
- void updateEditElementLayout();
-
// InputType functions
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE FINAL;
virtual void createShadowSubtree() OVERRIDE FINAL;
Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (126533 => 126534)
--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp 2012-08-24 04:23:10 UTC (rev 126534)
@@ -50,7 +50,7 @@
WTF_MAKE_NONCOPYABLE(DateTimeEditBuilder);
public:
- DateTimeEditBuilder(DateTimeEditElement&, const StepRange&);
+ DateTimeEditBuilder(DateTimeEditElement&, const StepRange&, const DateComponents&);
bool build(const String&);
bool needSecondField() const;
@@ -67,11 +67,13 @@
virtual void visitLiteral(const String&) OVERRIDE FINAL;
DateTimeEditElement& m_editElement;
+ const DateComponents& m_dateValue;
const StepRange& m_stepRange;
};
-DateTimeEditBuilder::DateTimeEditBuilder(DateTimeEditElement& elemnt, const StepRange& stepRange)
+DateTimeEditBuilder::DateTimeEditBuilder(DateTimeEditElement& elemnt, const StepRange& stepRange, const DateComponents& dateValue)
: m_editElement(elemnt)
+ , m_dateValue(dateValue)
, m_stepRange(stepRange)
{
}
@@ -84,19 +86,22 @@
bool DateTimeEditBuilder::needMillisecondField() const
{
- return !m_stepRange.minimum().remainder(static_cast<int>(msPerSecond)).isZero()
+ return m_dateValue.millisecond()
+ || !m_stepRange.minimum().remainder(static_cast<int>(msPerSecond)).isZero()
|| !m_stepRange.step().remainder(static_cast<int>(msPerSecond)).isZero();
}
bool DateTimeEditBuilder::needMinuteField() const
{
- return !m_stepRange.minimum().remainder(static_cast<int>(msPerHour)).isZero()
+ 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_stepRange.minimum().remainder(static_cast<int>(msPerMinute)).isZero()
+ return m_dateValue.second()
+ || !m_stepRange.minimum().remainder(static_cast<int>(msPerMinute)).isZero()
|| !m_stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
}
@@ -161,17 +166,17 @@
bool DateTimeEditBuilder::shouldMillisecondFieldReadOnly() const
{
- return m_stepRange.step().remainder(static_cast<int>(msPerSecond)).isZero();
+ return !m_dateValue.millisecond() && m_stepRange.step().remainder(static_cast<int>(msPerSecond)).isZero();
}
bool DateTimeEditBuilder::shouldMinuteFieldReadOnly() const
{
- return m_stepRange.step().remainder(static_cast<int>(msPerHour)).isZero();
+ return !m_dateValue.minute() && m_stepRange.step().remainder(static_cast<int>(msPerHour)).isZero();
}
bool DateTimeEditBuilder::shouldSecondFieldReadOnly() const
{
- return m_stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
+ return !m_dateValue.second() && m_stepRange.step().remainder(static_cast<int>(msPerMinute)).isZero();
}
void DateTimeEditBuilder::visitLiteral(const String& text)
@@ -213,10 +218,9 @@
appendChild(field);
}
-PassRefPtr<DateTimeEditElement> DateTimeEditElement::create(Document* document, EditControlOwner& editControlOwner, const StepRange& stepRange)
+PassRefPtr<DateTimeEditElement> DateTimeEditElement::create(Document* document, EditControlOwner& editControlOwner)
{
RefPtr<DateTimeEditElement> container = adoptRef(new DateTimeEditElement(document, editControlOwner));
- container->layout(stepRange);
return container.release();
}
@@ -341,12 +345,14 @@
return m_editControlOwner && m_editControlOwner->isEditControlOwnerReadOnly();
}
-void DateTimeEditElement::layout(const StepRange& stepRange)
+void DateTimeEditElement::layout(const StepRange& stepRange, const DateComponents& dateValue)
{
+ size_t focusFieldIndex = m_focusFieldIndex;
DateTimeFieldElement* const focusField = fieldAt(m_focusFieldIndex);
+ const AtomicString focusFieldId = focusField ? focusField->shadowPseudoId() : nullAtom;
focusFieldAt(invalidFieldIndex);
- DateTimeEditBuilder builder(*this, stepRange);
+ DateTimeEditBuilder builder(*this, stepRange, dateValue);
const String dateTimeFormat = builder.needSecondField() ? localizedTimeFormatText() : localizedShortTimeFormatText();
if (!builder.build(dateTimeFormat) || m_fields.isEmpty())
builder.build(builder.needSecondField() ? "HH:mm:ss" : "HH:mm");
@@ -355,13 +361,14 @@
m_spinButton = spinButton.get();
appendChild(spinButton);
- if (focusField) {
+ if (focusFieldIndex != invalidFieldIndex) {
for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex) {
- if (focusField == m_fields[fieldIndex]) {
- focusFieldAt(fieldIndex);
+ if (m_fields[fieldIndex]->shadowPseudoId() == focusFieldId) {
+ focusFieldIndex = fieldIndex;
break;
}
}
+ focusFieldAt(std::min(focusFieldIndex, m_fields.size() - 1));
}
}
@@ -434,14 +441,16 @@
focusField->defaultEventHandler(event);
}
-void DateTimeEditElement::setValueAsDate(const DateComponents& date)
+void DateTimeEditElement::setValueAsDate(const StepRange& stepRange, const DateComponents& date)
{
+ layout(stepRange, date);
for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
m_fields[fieldIndex]->setValueAsDate(date);
}
-void DateTimeEditElement::setEmptyValue(const DateComponents& dateForReadOnlyField)
+void DateTimeEditElement::setEmptyValue(const StepRange& stepRange, const DateComponents& dateForReadOnlyField)
{
+ layout(stepRange, 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 (126533 => 126534)
--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.h 2012-08-24 04:03:31 UTC (rev 126533)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.h 2012-08-24 04:23:10 UTC (rev 126534)
@@ -59,18 +59,17 @@
virtual bool isEditControlOwnerReadOnly() const = 0;
};
- static PassRefPtr<DateTimeEditElement> create(Document*, EditControlOwner&, const StepRange&);
+ static PassRefPtr<DateTimeEditElement> create(Document*, EditControlOwner&);
virtual ~DateTimeEditElement();
void addField(PassRefPtr<DateTimeFieldElement>);
virtual void defaultEventHandler(Event*) OVERRIDE;
void disabledStateChanged();
- void layout(const StepRange&);
void readOnlyStateChanged();
void removeEditControlOwner() { m_editControlOwner = 0; }
void resetLayout();
- void setEmptyValue(const DateComponents& dateForReadOnlyField);
- void setValueAsDate(const DateComponents&);
+ void setEmptyValue(const StepRange&, const DateComponents& dateForReadOnlyField);
+ void setValueAsDate(const StepRange&, const DateComponents&);
double valueAsDouble() const;
private:
@@ -95,6 +94,7 @@
void handleMouseEvent(MouseEvent*);
bool isDisabled() const;
bool isReadOnly() const;
+ void layout(const StepRange&, const DateComponents&);
size_t nextFieldIndex() const;
size_t previousFieldIndex() const;
void updateUIState();