Changeset 130147 in webkit
- Timestamp:
- Oct 2, 2012 3:21:37 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r130145 r130147 1 2012-10-02 Yoshifumi Inoue <yosin@chromium.org> 2 3 [Forms] Multiple fields datetime/datetime-local input UI 4 https://bugs.webkit.org/show_bug.cgi?id=97997 5 6 Reviewed by Kent Tamura. 7 8 This patch adds Chromium port specific expectations for "datetime" and 9 "datetime-local" input type tests for multiple fields datetime input UI. 10 11 * platform/chromium/fast/forms/datetime/datetime-input-visible-string-expected.txt: Added. Multiple fields datetime input UI doesn't have selection. 12 * platform/chromium/fast/forms/datetime/datetime-stepup-stepdown-from-renderer-expected.txt: Added. On multiple fields datetime input UI, step down/up decrement/increment a field rather than whole value. 13 * platform/chromium/fast/forms/datetimelocal/datetimelocal-input-visible-string-expected.txt: Added. Multiple fields datetime-local input UI doesn't have selection. 14 * platform/chromium/fast/forms/datetimelocal/datetimelocal-stepup-stepdown-from-renderer-expected.txt: Added. On multiple fields datetime-local input UI, step down/up decrement/increment a field rather than whole value. 15 1 16 2012-10-02 Zan Dobersek <zandobersek@gmail.com> 2 17 -
trunk/Source/WebCore/ChangeLog
r130146 r130147 1 2012-10-02 Yoshifumi Inoue <yosin@chromium.org> 2 3 [Forms] Multiple fields datetime/datetime-local input UI 4 https://bugs.webkit.org/show_bug.cgi?id=97997 5 6 Reviewed by Kent Tamura. 7 8 This patch introduces multiple fields "datetime" and "datetime-local" 9 input UI in DRT. We'll enable these features once we add tests. 10 11 No new tests. To reduce size of this patch, other patches add tests 12 for multiple fields datetime/datetime-local input UI. 13 14 Note: Actual outputs of four tests 15 - fast/forms/datetime/datetime-input-visible-string.html 16 - fast/forms/datetime/datetime-stepup-stepdown-from-renderer.html 17 - fast/forms/datetimelocal/datetimelocal-input-visible-string.html 18 - fast/forms/datetimelocal/datetimelocal-stepup-stepdown-from-renderer.html 19 are different. 20 21 * bindings/generic/RuntimeEnabledFeatures.cpp: 22 (WebCore): 23 * css/html.css: 24 (input::-webkit-datetime-edit-day-field): Added for field appearance. 25 (input::-webkit-datetime-edit-day-field:focus): Added to remove focus ring. 26 * html/DateTimeInputType.cpp: 27 (WebCore::DateTimeInputType::formatDateTimeFieldsState): Added to format numeric value to string value as specified in HTML5 specification. 28 (WebCore::DateTimeInputType::setupLayoutParameters): Added to set layout of multiple fields. 29 * html/DateTimeInputType.h: Changed to include BaseMultipleFieldsDateAndTimeInputType.h and introduce BaseDateTimeInputType typedef. 30 (WebCore::DateTimeInputType::DateTimeInputType): Changed base class name to BaseDateTimeInputType. 31 (DateTimeInputType): Changed to add declarations for formatDateTimeFieldsState() and setupLayoutParameters(). 32 * html/DateTimeLocalInputType.cpp: 33 (WebCore::DateTimeLocalInputType::formatDateTimeFieldsState): Added to format numeric value to string value as specified in HTML5 specification. 34 (WebCore::DateTimeLocalInputType::setupLayoutParameters): Added to set layout of multiple fields. 35 * html/DateTimeLocalInputType.h: Changed to include BaseMultipleFieldsDateAndTimeInputType.h and introduce BaseDateTimeLocalInputType typedef. 36 (WebCore::DateTimeLocalInputType::DateTimeLocalInputType): Changed base class name to BaseDateTimeLocalInputType. 37 (DateTimeLocalInputType): Changed to add declarations for formatDateTimeFieldsState() and setupLayoutParameters(). 38 * html/shadow/DateTimeEditElement.cpp: 39 (DateTimeEditBuilder): Changed to add member variable m_placeholderForDay. 40 (WebCore::DateTimeEditBuilder::DateTimeEditBuilder): Changed to initialize m_placeholderForDay. 41 (WebCore::DateTimeEditBuilder::visitField): Changed to support week field. 42 * html/shadow/DateTimeEditElement.h: 43 (LayoutParameters): Changed to add placeholderForDay member variable. 44 1 45 2012-10-02 Vsevolod Vlasov <vsevik@chromium.org> 2 46 -
trunk/Source/WebCore/css/html.css
r130024 r130147 478 478 479 479 #if defined(ENABLE_INPUT_MULTIPLE_FIELDS_UI) && ENABLE_INPUT_MULTIPLE_FIELDS_UI 480 input[type="datetime"], 481 input[type="datetime-local"], 480 482 input[type="month"], 481 483 input[type="time"], … … 498 500 } 499 501 500 input::-webkit-datetime-edit- hour-field {502 input::-webkit-datetime-edit-day-field { 501 503 -webkit-user-modify: read-only !important; 502 504 display: inline-block; … … 506 508 } 507 509 508 input::-webkit-datetime-edit- millisecond-field {510 input::-webkit-datetime-edit-hour-field { 509 511 -webkit-user-modify: read-only !important; 510 512 display: inline-block; … … 514 516 } 515 517 516 input::-webkit-datetime-edit-mi nute-field {518 input::-webkit-datetime-edit-millisecond-field { 517 519 -webkit-user-modify: read-only !important; 518 520 display: inline-block; … … 522 524 } 523 525 524 input::-webkit-datetime-edit-m onth-field {526 input::-webkit-datetime-edit-minute-field { 525 527 -webkit-user-modify: read-only !important; 526 528 display: inline-block; … … 530 532 } 531 533 534 input::-webkit-datetime-edit-month-field { 535 -webkit-user-modify: read-only !important; 536 display: inline-block; 537 border: none; 538 text-align: center; 539 padding: 0.15em; 540 } 541 532 542 /* This selector is used when step >= 3600 second but format contains minute field. */ 533 543 input::-webkit-datetime-edit-minute-field[readonly] { … … 561 571 /* Remove focus ring from fields and use highlight color */ 562 572 input::-webkit-datetime-edit-ampm-field:focus, 573 input::-webkit-datetime-edit-day-field:focus, 563 574 input::-webkit-datetime-edit-hour-field:focus, 564 575 input::-webkit-datetime-edit-millisecond-field:focus, -
trunk/Source/WebCore/html/DateTimeInputType.cpp
r128149 r130147 40 40 41 41 #if ENABLE(INPUT_TYPE_DATETIME) 42 43 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 44 #include "DateTimeFieldsState.h" 45 #include "LocalizedStrings.h" 46 #include "Localizer.h" 47 #include <wtf/text/StringBuilder.h> 48 #include <wtf/text/WTFString.h> 49 #endif 42 50 43 51 namespace WebCore { … … 98 106 } 99 107 108 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 109 // FIXME: It is better to share code for DateTimeInputType::formatDateTimeFieldsState() 110 // and DateTimeInputLocalType::formatDateTimeFieldsState(). 111 String DateTimeInputType::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const 112 { 113 if (!dateTimeFieldsState.hasDayOfMonth() || !dateTimeFieldsState.hasMonth() || !dateTimeFieldsState.hasYear() 114 || !dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM()) 115 return emptyString(); 116 117 if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond()) { 118 return String::format("%04u-%02u-%02uT%02u:%02u:%02u.%03uZ", 119 dateTimeFieldsState.year(), 120 dateTimeFieldsState.month() + 1, 121 dateTimeFieldsState.dayOfMonth(), 122 dateTimeFieldsState.hour23(), 123 dateTimeFieldsState.minute(), 124 dateTimeFieldsState.hasSecond() ? dateTimeFieldsState.second() : 0, 125 dateTimeFieldsState.millisecond()); 126 } 127 128 if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second()) { 129 return String::format("%04u-%02u-%02uT%02u:%02u:%02uZ", 130 dateTimeFieldsState.year(), 131 dateTimeFieldsState.month() + 1, 132 dateTimeFieldsState.dayOfMonth(), 133 dateTimeFieldsState.hour23(), 134 dateTimeFieldsState.minute(), 135 dateTimeFieldsState.second()); 136 } 137 138 return String::format("%04u-%02u-%02uT%02u:%02uZ", 139 dateTimeFieldsState.year(), 140 dateTimeFieldsState.month() + 1, 141 dateTimeFieldsState.dayOfMonth(), 142 dateTimeFieldsState.hour23(), 143 dateTimeFieldsState.minute()); 144 } 145 146 void DateTimeInputType::setupLayoutParameters(DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& date) const 147 { 148 // FIXME: It is better to have Localizer::dateTimeFormat() and use it 149 // here rather than constructing from dateFormat() and timeFormat(). 150 StringBuilder builder; 151 builder.append(layoutParameters.localizer.dateFormat()); 152 builder.append(' '); 153 if (date.second() || layoutParameters.shouldHaveSecondField()) { 154 builder.append(layoutParameters.localizer.timeFormat()); 155 layoutParameters.fallbackDateTimeFormat = "dd/MM/yyyy HH:mm:ss"; 156 } else { 157 builder.append(layoutParameters.localizer.shortTimeFormat()); 158 layoutParameters.fallbackDateTimeFormat = "dd/MM/yyyy HH:mm"; 159 } 160 161 layoutParameters.dateTimeFormat = builder.toString(); 162 layoutParameters.placeholderForDay = placeholderForDayOfMonthField(); 163 layoutParameters.placeholderForMonth = placeholderForMonthField(); 164 layoutParameters.placeholderForYear = placeholderForYearField(); 165 } 166 #endif 167 100 168 } // namespace WebCore 101 169 -
trunk/Source/WebCore/html/DateTimeInputType.h
r120313 r130147 35 35 36 36 #if ENABLE(INPUT_TYPE_DATETIME) 37 #include "BaseMultipleFieldsDateAndTimeInputType.h" 37 38 38 39 namespace WebCore { 39 40 40 class DateTimeInputType : public BaseDateAndTimeInputType { 41 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 42 typedef BaseMultipleFieldsDateAndTimeInputType BaseDateTimeInputType; 43 #else 44 typedef BaseDateAndTimeInputType BaseDateTimeInputType; 45 #endif 46 47 class DateTimeInputType : public BaseDateTimeInputType { 41 48 public: 42 49 static PassOwnPtr<InputType> create(HTMLInputElement*); 43 50 44 51 private: 45 DateTimeInputType(HTMLInputElement* element) : BaseDate AndTimeInputType(element) { }52 DateTimeInputType(HTMLInputElement* element) : BaseDateTimeInputType(element) { } 46 53 virtual const AtomicString& formControlType() const OVERRIDE; 47 54 virtual DateComponents::Type dateType() const OVERRIDE; … … 51 58 virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE; 52 59 virtual bool isDateTimeField() const OVERRIDE; 60 61 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 62 // BaseMultipleFieldsDateAndTimeInputType functions 63 virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL; 64 virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const OVERRIDE FINAL; 65 #endif 53 66 }; 54 67 -
trunk/Source/WebCore/html/DateTimeLocalInputType.cpp
r128149 r130147 39 39 40 40 #if ENABLE(INPUT_TYPE_DATETIMELOCAL) 41 42 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 43 #include "DateTimeFieldsState.h" 44 #include "LocalizedStrings.h" 45 #include "Localizer.h" 46 #include <wtf/text/StringBuilder.h> 47 #include <wtf/text/WTFString.h> 48 #endif 41 49 42 50 namespace WebCore { … … 104 112 } 105 113 114 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 115 // FIXME: It is better to share code for DateTimeInputType::formatDateTimeFieldsState() 116 // and DateTimeInputLocalType::formatDateTimeFieldsState(). 117 String DateTimeLocalInputType::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const 118 { 119 if (!dateTimeFieldsState.hasDayOfMonth() || !dateTimeFieldsState.hasMonth() || !dateTimeFieldsState.hasYear() 120 || !dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM()) 121 return emptyString(); 122 123 if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond()) { 124 return String::format("%04u-%02u-%02uT%02u:%02u:%02u.%03u", 125 dateTimeFieldsState.year(), 126 dateTimeFieldsState.month() + 1, 127 dateTimeFieldsState.dayOfMonth(), 128 dateTimeFieldsState.hour23(), 129 dateTimeFieldsState.minute(), 130 dateTimeFieldsState.hasSecond() ? dateTimeFieldsState.second() : 0, 131 dateTimeFieldsState.millisecond()); 132 } 133 134 if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second()) { 135 return String::format("%04u-%02u-%02uT%02u:%02u:%02u", 136 dateTimeFieldsState.year(), 137 dateTimeFieldsState.month() + 1, 138 dateTimeFieldsState.dayOfMonth(), 139 dateTimeFieldsState.hour23(), 140 dateTimeFieldsState.minute(), 141 dateTimeFieldsState.second()); 142 } 143 144 return String::format("%04u-%02u-%02uT%02u:%02u", 145 dateTimeFieldsState.year(), 146 dateTimeFieldsState.month() + 1, 147 dateTimeFieldsState.dayOfMonth(), 148 dateTimeFieldsState.hour23(), 149 dateTimeFieldsState.minute()); 150 } 151 152 void DateTimeLocalInputType::setupLayoutParameters(DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& date) const 153 { 154 // FIXME: It is better to have Localizer::dateTimeFormat() and use it 155 // here rather than constructing from dateFormat() and timeFormat(). 156 StringBuilder builder; 157 builder.append(layoutParameters.localizer.dateFormat()); 158 builder.append(' '); 159 if (date.second() || layoutParameters.shouldHaveSecondField()) { 160 builder.append(layoutParameters.localizer.timeFormat()); 161 layoutParameters.fallbackDateTimeFormat = "dd/MM/yyyy HH:mm:ss"; 162 } else { 163 builder.append(layoutParameters.localizer.shortTimeFormat()); 164 layoutParameters.fallbackDateTimeFormat = "dd/MM/yyyy HH:mm"; 165 } 166 167 layoutParameters.dateTimeFormat = builder.toString(); 168 layoutParameters.placeholderForDay = placeholderForDayOfMonthField(); 169 layoutParameters.placeholderForMonth = placeholderForMonthField(); 170 layoutParameters.placeholderForYear = placeholderForYearField(); 171 } 172 #endif 173 106 174 } // namespace WebCore 107 175 -
trunk/Source/WebCore/html/DateTimeLocalInputType.h
r117738 r130147 32 32 #define DateTimeLocalInputType_h 33 33 34 #include "BaseDateAndTimeInputType.h"35 36 34 #if ENABLE(INPUT_TYPE_DATETIMELOCAL) 35 #include "BaseMultipleFieldsDateAndTimeInputType.h" 37 36 38 37 namespace WebCore { 39 38 40 class DateTimeLocalInputType : public BaseDateAndTimeInputType { 39 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 40 typedef BaseMultipleFieldsDateAndTimeInputType BaseDateTimeLocalInputType; 41 #else 42 typedef BaseDateAndTimeInputType BaseDateTimeLocalInputType; 43 #endif 44 45 class DateTimeLocalInputType : public BaseDateTimeLocalInputType { 41 46 public: 42 47 static PassOwnPtr<InputType> create(HTMLInputElement*); 43 48 44 49 private: 45 DateTimeLocalInputType(HTMLInputElement* element) : BaseDate AndTimeInputType(element) { }50 DateTimeLocalInputType(HTMLInputElement* element) : BaseDateTimeLocalInputType(element) { } 46 51 virtual const AtomicString& formControlType() const OVERRIDE; 47 52 virtual DateComponents::Type dateType() const OVERRIDE; … … 52 57 virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE; 53 58 virtual bool isDateTimeLocalField() const OVERRIDE; 59 60 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 61 // BaseMultipleFieldsDateAndTimeInputType functions 62 virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL; 63 virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const OVERRIDE FINAL; 64 #endif 54 65 }; 55 66 -
trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp
r130024 r130147 68 68 const StepRange m_stepRange; 69 69 Localizer& m_localizer; 70 const String m_placeholderForDay; 70 71 const String m_placeholderForMonth; 71 72 const String m_placeholderForYear; … … 77 78 , m_stepRange(layoutParameters.stepRange) 78 79 , m_localizer(layoutParameters.localizer) 80 , m_placeholderForDay(layoutParameters.placeholderForDay) 79 81 , m_placeholderForMonth(layoutParameters.placeholderForMonth) 80 82 , m_placeholderForYear(layoutParameters.placeholderForYear) … … 100 102 101 103 switch (fieldType) { 104 case DateTimeFormat::FieldTypeDayOfMonth: 105 m_editElement.addField(DateTimeDayFieldElement::create(document, m_editElement, m_placeholderForDay)); 106 return; 107 102 108 case DateTimeFormat::FieldTypeHour11: 103 109 m_editElement.addField(DateTimeHourFieldElement::create(document, m_editElement, 0, 11)); -
trunk/Source/WebCore/html/shadow/DateTimeEditElement.h
r129867 r130147 67 67 Localizer& localizer; 68 68 const StepRange stepRange; 69 String placeholderForDay; 69 70 String placeholderForMonth; 70 71 String placeholderForYear;
Note: See TracChangeset
for help on using the changeset viewer.