Changeset 134036 in webkit
- Timestamp:
- Nov 9, 2012 2:03:11 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r134035 r134036 1 2012-11-09 Kent Tamura <tkent@chromium.org> 2 3 Don't use RenderTextControlSingleLine for date/time input types without the multiple-fields UI 4 https://bugs.webkit.org/show_bug.cgi?id=101722 5 6 Reviewed by Hajime Morita. 7 8 Because the date/time input types are not textfields, we should not use 9 RenderTextControlSingleLine, and don't need to create shadow trees for 10 RenderTextControlSingleLine. 11 12 No new tests. Covered by fast/forms/*/*-appearance-*.html. 13 14 * css/html.css: 15 (input[type="date"]): 16 It has menulist appeanrace by default, and should be a flexible box to 17 center the inner text. 10em width is almost same as the default width of 18 text fields. 19 (input[type="datetime"]): Ditto. 20 (input[type="datetime-local"]): Ditto. 21 (input[type="month"]): Ditto. 22 (input[type="time"]): Ditto. 23 (input[type="week"]): Ditto. 24 (input::-webkit-date-and-time-value): 25 Added. A style for the inner text block. 26 * html/BaseChooserOnlyDateAndTimeInputType.cpp: 27 (WebCore::BaseChooserOnlyDateAndTimeInputType::createRenderer): 28 Don't create RenderTextControlSingleLine. 29 (WebCore::BaseChooserOnlyDateAndTimeInputType::updateInnerTextValue): 30 Skip TextFieldInputType::updateInnerTextValue. 31 (WebCore::BaseChooserOnlyDateAndTimeInputType::forwardEvent): 32 Skip TextFieldInputType::forwardEvent. 33 (WebCore::BaseChooserOnlyDateAndTimeInputType::createShadowSubtree): 34 Just add one element to the shadow root. 35 (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance): 36 Sets a localized value to the inner text block. 37 (WebCore::BaseChooserOnlyDateAndTimeInputType::setValue): 38 Calls updateAppearance if the value is updated. 39 * html/BaseChooserOnlyDateAndTimeInputType.h: 40 (BaseChooserOnlyDateAndTimeInputType): Declare updateAppearance, 41 createRenderer, updateInnerTextValue, forwardEvent, createShadowSubtree, 42 and setValue. 43 * html/BaseDateAndTimeInputType.h: 44 (WebCore): Add a FIXME comment. 45 (BaseDateAndTimeInputType): 46 Make visibleValue protected. It is used by BaseChooserOnlyDateAndTimeInputType. 47 * html/TextFieldInputType.h: 48 (TextFieldInputType): 49 Make setValue protected. It is used by BaseChooserOnlyDateAndTimeInputType. 50 1 51 2012-11-09 Vsevolod Vlasov <vsevik@chromium.org> 2 52 -
trunk/Source/WebCore/css/html.css
r132452 r134036 602 602 -webkit-margin-start: 2px; 603 603 } 604 605 #else 606 607 #if defined(ENABLE_INPUT_TYPE_DATE) && ENABLE_INPUT_TYPE_DATE 608 input[type="date"] { 609 -webkit-align-items: center; 610 -webkit-appearance: menulist; 611 display: -webkit-inline-flex; 612 overflow: hidden; 613 width: 10em; 614 } 615 #endif 616 #if defined(ENABLE_INPUT_TYPE_DATETIME) && ENABLE_INPUT_TYPE_DATETIME 617 input[type="datetime"] { 618 -webkit-align-items: center; 619 -webkit-appearance: menulist; 620 display: -webkit-inline-flex; 621 overflow: hidden; 622 width: 10em; 623 } 624 #endif 625 #if defined(ENABLE_INPUT_TYPE_DATETIMELOCAL) && ENABLE_INPUT_TYPE_DATETIMELOCAL 626 input[type="datetime-local"] { 627 -webkit-align-items: center; 628 -webkit-appearance: menulist; 629 display: -webkit-inline-flex; 630 overflow: hidden; 631 width: 10em; 632 } 633 #endif 634 #if defined(ENABLE_INPUT_TYPE_MONTH) && ENABLE_INPUT_TYPE_MONTH 635 input[type="month"] { 636 -webkit-align-items: center; 637 -webkit-appearance: menulist; 638 display: -webkit-inline-flex; 639 overflow: hidden; 640 width: 10em; 641 } 642 #endif 643 #if defined(ENABLE_INPUT_TYPE_TIME) && ENABLE_INPUT_TYPE_TIME 644 input[type="time"] { 645 -webkit-align-items: center; 646 -webkit-appearance: menulist; 647 display: -webkit-inline-flex; 648 overflow: hidden; 649 width: 10em; 650 } 651 #endif 652 #if defined(ENABLE_INPUT_TYPE_WEEK) && ENABLE_INPUT_TYPE_WEEK 653 input[type="week"] { 654 -webkit-align-items: center; 655 -webkit-appearance: menulist; 656 display: -webkit-inline-flex; 657 overflow: hidden; 658 width: 10em; 659 } 660 #endif 661 662 input::-webkit-date-and-time-value { 663 margin-left: 4px; 664 } 604 665 #endif 605 666 -
trunk/Source/WebCore/html/BaseChooserOnlyDateAndTimeInputType.cpp
r133441 r134036 30 30 #include "Chrome.h" 31 31 #include "ChromeClient.h" 32 #include "HTMLDivElement.h" 32 33 #include "HTMLInputElement.h" 33 34 #include "Page.h" 34 35 #include "ScriptController.h" 36 #include "ShadowRoot.h" 35 37 36 38 namespace WebCore { … … 57 59 return; 58 60 m_dateTimeChooser = chrome->client()->openDateTimeChooser(this, parameters); 61 } 62 63 RenderObject* BaseChooserOnlyDateAndTimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const 64 { 65 // Cancel the override by TextFieldInputType. 66 // FIXME: Remove this function when we stop inheriting TextFieldInputType. 67 return InputType::createRenderer(arena, style); 68 } 69 70 void BaseChooserOnlyDateAndTimeInputType::updateInnerTextValue() 71 { 72 // Cancel the override by TextFieldInputType. 73 // FIXME: Remove this function when we stop inheriting TextFieldInputType. 74 } 75 76 void BaseChooserOnlyDateAndTimeInputType::forwardEvent(Event*) 77 { 78 // Cancel the override by TextFieldInputType. 79 // FIXME: Remove this function when we stop inheriting TextFieldInputType. 80 } 81 82 void BaseChooserOnlyDateAndTimeInputType::createShadowSubtree() 83 { 84 DEFINE_STATIC_LOCAL(AtomicString, valueContainerPseudo, ("-webkit-date-and-time-value", AtomicString::ConstructFromLiteral)); 85 86 RefPtr<HTMLDivElement> valueContainer = HTMLDivElement::create(element()->document()); 87 valueContainer->setPseudo(valueContainerPseudo); 88 element()->userAgentShadowRoot()->appendChild(valueContainer.get()); 89 updateAppearance(); 90 } 91 92 void BaseChooserOnlyDateAndTimeInputType::updateAppearance() 93 { 94 Node* node = element()->userAgentShadowRoot()->firstChild(); 95 if (!node || !node->isHTMLElement()) 96 return; 97 String displayValue = visibleValue(); 98 if (displayValue.isEmpty()) { 99 // Need to put something to keep text baseline. 100 displayValue = ASCIILiteral(" "); 101 } 102 toHTMLElement(node)->setInnerText(displayValue, ASSERT_NO_EXCEPTION); 103 } 104 105 void BaseChooserOnlyDateAndTimeInputType::setValue(const String& value, bool valueChanged, TextFieldEventBehavior eventBehavior) 106 { 107 BaseDateAndTimeInputType::setValue(value, valueChanged, eventBehavior); 108 if (valueChanged) 109 updateAppearance(); 59 110 } 60 111 -
trunk/Source/WebCore/html/BaseChooserOnlyDateAndTimeInputType.h
r133441 r134036 41 41 42 42 private: 43 void updateAppearance(); 43 44 void closeDateTimeChooser(); 44 45 45 46 // InputType functions: 47 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE; 48 virtual void updateInnerTextValue() OVERRIDE; 49 void forwardEvent(Event*) OVERRIDE; 50 virtual void createShadowSubtree() OVERRIDE; 46 51 virtual void detach() OVERRIDE; 52 virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE; 47 53 virtual void handleDOMActivateEvent(Event*) OVERRIDE; 48 54 virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE; -
trunk/Source/WebCore/html/BaseDateAndTimeInputType.h
r133284 r134036 40 40 41 41 // A super class of date, datetime, datetime-local, month, time, and week types. 42 // FIXME: Don't inherit TextFieldInputType. webkit.org/b/100935 42 43 class BaseDateAndTimeInputType : public TextFieldInputType { 43 44 protected: … … 50 51 String serializeWithComponents(const DateComponents&) const; 51 52 virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0; 53 virtual String visibleValue() const OVERRIDE; 52 54 53 55 private: … … 64 66 virtual String serializeWithMilliseconds(double) const; 65 67 virtual String localizeValue(const String&) const OVERRIDE; 66 virtual String visibleValue() const OVERRIDE;67 68 virtual String convertFromVisibleValue(const String&) const OVERRIDE; 68 69 }; -
trunk/Source/WebCore/html/TextFieldInputType.h
r132291 r134036 66 66 virtual void readonlyAttributeChanged() OVERRIDE; 67 67 virtual void handleBlurEvent() OVERRIDE; 68 virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE; 68 69 virtual void updateInnerTextValue() OVERRIDE; 69 70 … … 78 79 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE; 79 80 virtual bool shouldUseInputMethod() const OVERRIDE; 80 virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE;81 81 virtual String sanitizeValue(const String&) const OVERRIDE; 82 82 virtual bool shouldRespectListAttribute() OVERRIDE;
Note: See TracChangeset
for help on using the changeset viewer.