Diff
Modified: trunk/LayoutTests/ChangeLog (134545 => 134546)
--- trunk/LayoutTests/ChangeLog 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/LayoutTests/ChangeLog 2012-11-14 06:30:04 UTC (rev 134546)
@@ -1,3 +1,17 @@
+2012-11-13 Kunihiko Sakamoto <ksakam...@chromium.org>
+
+ Enable calendar picker for input types datetime/datetime-local
+ https://bugs.webkit.org/show_bug.cgi?id=101889
+
+ Reviewed by Kent Tamura.
+
+ Added tests for calendar picker for inpt type=datetime/datetime-local.
+
+ * platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-expected.txt: Added.
+ * platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime.html: Added.
+ * platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt: Added.
+ * platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal.html: Added.
+
2012-11-13 Keishi Hattori <kei...@webkit.org>
Enable datalist UI for input types week and month
Added: trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-expected.txt (0 => 134546)
--- trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-expected.txt 2012-11-14 06:30:04 UTC (rev 134546)
@@ -0,0 +1,15 @@
+Tests if calendar picker works for datetime as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Check that page popup doesn't exist at first.
+PASS document.getElementById("mock-page-popup") is null
+PASS selectedDate() is "2011-12-31"
+PASS selectedDate() is "2012-01-01"
+PASS document.getElementById("mock-page-popup") is null
+PASS document.getElementById("datetime").value is "2012-01-01T12:53:45Z"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime.html (0 => 134546)
--- trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime.html 2012-11-14 06:30:04 UTC (rev 134546)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<input type=datetime id=datetime value="2011-12-31T12:53:45Z">
+<script>
+description("Tests if calendar picker works for datetime as expected.");
+
+debug('Check that page popup doesn\'t exist at first.');
+shouldBeNull('document.getElementById("mock-page-popup")');
+
+openPicker(document.getElementById('datetime'), test);
+
+function test() {
+ shouldBeEqualToString('selectedDate()', '2011-12-31');
+
+ eventSender.keyDown('rightArrow');
+ shouldBeEqualToString('selectedDate()', '2012-01-01');
+
+ eventSender.keyDown('\n');
+ waitUntilClosing(testAfterClosing);
+}
+
+function testAfterClosing() {
+ shouldBeNull('document.getElementById("mock-page-popup")');
+ shouldBeEqualToString('document.getElementById("datetime").value', '2012-01-01T12:53:45Z');
+
+ finishJSTest();
+}
+
+</script>
+<script src=""
+</body>
+</html>
Added: trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt (0 => 134546)
--- trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt 2012-11-14 06:30:04 UTC (rev 134546)
@@ -0,0 +1,15 @@
+Tests if calendar picker works for datetime-local as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Check that page popup doesn't exist at first.
+PASS document.getElementById("mock-page-popup") is null
+PASS selectedDate() is "2011-12-31"
+PASS selectedDate() is "2012-01-01"
+PASS document.getElementById("mock-page-popup") is null
+PASS document.getElementById("datetimelocal").value is "2012-01-01T12:53:45"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal.html (0 => 134546)
--- trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-datetimelocal.html 2012-11-14 06:30:04 UTC (rev 134546)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<input type=datetime-local id=datetimelocal value="2011-12-31T12:53:45">
+<script>
+description("Tests if calendar picker works for datetime-local as expected.");
+
+debug('Check that page popup doesn\'t exist at first.');
+shouldBeNull('document.getElementById("mock-page-popup")');
+
+openPicker(document.getElementById('datetimelocal'), test);
+
+function test() {
+ shouldBeEqualToString('selectedDate()', '2011-12-31');
+
+ eventSender.keyDown('rightArrow');
+ shouldBeEqualToString('selectedDate()', '2012-01-01');
+
+ eventSender.keyDown('\n');
+ waitUntilClosing(testAfterClosing);
+}
+
+function testAfterClosing() {
+ shouldBeNull('document.getElementById("mock-page-popup")');
+ shouldBeEqualToString('document.getElementById("datetimelocal").value', '2012-01-01T12:53:45');
+
+ finishJSTest();
+}
+
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (134545 => 134546)
--- trunk/Source/WebCore/ChangeLog 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/ChangeLog 2012-11-14 06:30:04 UTC (rev 134546)
@@ -1,3 +1,33 @@
+2012-11-13 Kunihiko Sakamoto <ksakam...@chromium.org>
+
+ Enable calendar picker for input types datetime/datetime-local
+ https://bugs.webkit.org/show_bug.cgi?id=101889
+
+ Reviewed by Kent Tamura.
+
+ This adds calendar picker to <input type=datetime> and <input type=datetime-local>.
+ When a user choose a date from calendar picker, year/month/day fields of the input
+ element are updated and hour/minute/second fields are unchanged.
+
+ Tests: platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-local.html
+ platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime.html
+
+ * Resources/pagepopups/calendarPicker.js: Day.parse accepts datetime string (just drops time part).
+ * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue):
+ If the given value is not valid for the element, try to parse it as a date string.
+ * html/DateTimeInputType.cpp:
+ (WebCore::DateTimeInputType::formatDateTimeFieldsState): DateTimeFieldsState::month() returns 1-12, not 0-11.
+ * html/DateTimeLocalInputType.cpp:
+ (WebCore::DateTimeLocalInputType::formatDateTimeFieldsState): Ditto.
+ * html/shadow/DateTimeEditElement.cpp:
+ (WebCore::DateTimeEditElement::setOnlyYearMonthDay): Added.
+ (WebCore):
+ * html/shadow/DateTimeEditElement.h:
+ (DateTimeEditElement):
+ * rendering/RenderThemeChromiumCommon.cpp:
+ (WebCore::RenderThemeChromiumCommon::supportsCalendarPicker): Return true for datetime and datetimelocal too.
+
2012-11-13 Sheriff Bot <webkit.review....@gmail.com>
Unreviewed, rolling out r134524.
Modified: trunk/Source/WebCore/Resources/pagepopups/calendarPicker.js (134545 => 134546)
--- trunk/Source/WebCore/Resources/pagepopups/calendarPicker.js 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/Resources/pagepopups/calendarPicker.js 2012-11-14 06:30:04 UTC (rev 134546)
@@ -220,7 +220,7 @@
this.date = dateObject.getUTCDate();
};
-Day.ISOStringRegExp = /^(\d+)-(\d+)-(\d+)$/;
+Day.ISOStringRegExp = /^(\d+)-(\d+)-(\d+)/;
/**
* @param {!string} str
Modified: trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp (134545 => 134546)
--- trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp 2012-11-14 06:30:04 UTC (rev 134546)
@@ -130,7 +130,17 @@
void BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue(const String& value)
{
- element()->setValue(value, DispatchChangeEvent);
+ if (element()->isValidValue(value)) {
+ element()->setValue(value, DispatchChangeEvent);
+ return;
+ }
+
+ if (!m_dateTimeEditElement)
+ return;
+ DateComponents date;
+ unsigned end;
+ if (date.parseDate(value.characters(), value.length(), 0, end) && end == value.length())
+ m_dateTimeEditElement->setOnlyYearMonthDay(date);
}
bool BaseMultipleFieldsDateAndTimeInputType::setupDateTimeChooserParameters(DateTimeChooserParameters& parameters)
Modified: trunk/Source/WebCore/html/DateTimeInputType.cpp (134545 => 134546)
--- trunk/Source/WebCore/html/DateTimeInputType.cpp 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/html/DateTimeInputType.cpp 2012-11-14 06:30:04 UTC (rev 134546)
@@ -117,7 +117,7 @@
if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond()) {
return String::format("%04u-%02u-%02uT%02u:%02u:%02u.%03uZ",
dateTimeFieldsState.year(),
- dateTimeFieldsState.month() + 1,
+ dateTimeFieldsState.month(),
dateTimeFieldsState.dayOfMonth(),
dateTimeFieldsState.hour23(),
dateTimeFieldsState.minute(),
@@ -128,7 +128,7 @@
if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second()) {
return String::format("%04u-%02u-%02uT%02u:%02u:%02uZ",
dateTimeFieldsState.year(),
- dateTimeFieldsState.month() + 1,
+ dateTimeFieldsState.month(),
dateTimeFieldsState.dayOfMonth(),
dateTimeFieldsState.hour23(),
dateTimeFieldsState.minute(),
@@ -137,7 +137,7 @@
return String::format("%04u-%02u-%02uT%02u:%02uZ",
dateTimeFieldsState.year(),
- dateTimeFieldsState.month() + 1,
+ dateTimeFieldsState.month(),
dateTimeFieldsState.dayOfMonth(),
dateTimeFieldsState.hour23(),
dateTimeFieldsState.minute());
Modified: trunk/Source/WebCore/html/DateTimeLocalInputType.cpp (134545 => 134546)
--- trunk/Source/WebCore/html/DateTimeLocalInputType.cpp 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/html/DateTimeLocalInputType.cpp 2012-11-14 06:30:04 UTC (rev 134546)
@@ -123,7 +123,7 @@
if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond()) {
return String::format("%04u-%02u-%02uT%02u:%02u:%02u.%03u",
dateTimeFieldsState.year(),
- dateTimeFieldsState.month() + 1,
+ dateTimeFieldsState.month(),
dateTimeFieldsState.dayOfMonth(),
dateTimeFieldsState.hour23(),
dateTimeFieldsState.minute(),
@@ -134,7 +134,7 @@
if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second()) {
return String::format("%04u-%02u-%02uT%02u:%02u:%02u",
dateTimeFieldsState.year(),
- dateTimeFieldsState.month() + 1,
+ dateTimeFieldsState.month(),
dateTimeFieldsState.dayOfMonth(),
dateTimeFieldsState.hour23(),
dateTimeFieldsState.minute(),
@@ -143,7 +143,7 @@
return String::format("%04u-%02u-%02uT%02u:%02u",
dateTimeFieldsState.year(),
- dateTimeFieldsState.month() + 1,
+ dateTimeFieldsState.month(),
dateTimeFieldsState.dayOfMonth(),
dateTimeFieldsState.hour23(),
dateTimeFieldsState.minute());
Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (134545 => 134546)
--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp 2012-11-14 06:30:04 UTC (rev 134546)
@@ -529,6 +529,21 @@
return focusedFieldIndex() != invalidFieldIndex;
}
+void DateTimeEditElement::setOnlyYearMonthDay(const DateComponents& date)
+{
+ ASSERT(date.type() == DateComponents::Date);
+
+ if (!m_editControlOwner)
+ return;
+
+ DateTimeFieldsState dateTimeFieldsState = valueAsDateTimeFieldsState();
+ dateTimeFieldsState.setYear(date.fullYear());
+ dateTimeFieldsState.setMonth(date.month() + 1);
+ dateTimeFieldsState.setDayOfMonth(date.monthDay());
+ setValueAsDateTimeFieldsState(dateTimeFieldsState);
+ m_editControlOwner->editControlValueChanged();
+}
+
void DateTimeEditElement::stepDown()
{
if (DateTimeFieldElement* const field = focusedField())
Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.h (134545 => 134546)
--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.h 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.h 2012-11-14 06:30:04 UTC (rev 134546)
@@ -98,6 +98,7 @@
void setEmptyValue(const LayoutParameters&, const DateComponents& dateForReadOnlyField);
void setValueAsDate(const LayoutParameters&, const DateComponents&);
void setValueAsDateTimeFieldsState(const DateTimeFieldsState&);
+ void setOnlyYearMonthDay(const DateComponents&);
void stepDown();
void stepUp();
String value() const;
Modified: trunk/Source/WebCore/rendering/RenderThemeChromiumCommon.cpp (134545 => 134546)
--- trunk/Source/WebCore/rendering/RenderThemeChromiumCommon.cpp 2012-11-14 06:18:03 UTC (rev 134545)
+++ trunk/Source/WebCore/rendering/RenderThemeChromiumCommon.cpp 2012-11-14 06:30:04 UTC (rev 134546)
@@ -51,8 +51,9 @@
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
bool RenderThemeChromiumCommon::supportsCalendarPicker(const AtomicString& type)
{
- // FIXME: We'd like to support datetime, and datetime-local too.
return type == InputTypeNames::date()
+ || type == InputTypeNames::datetime()
+ || type == InputTypeNames::datetimelocal()
|| type == InputTypeNames::month()
|| type == InputTypeNames::week();
}