Skip to content
  • keishi@webkit.org's avatar
    Add clear button to date/time input types · 85f0e7f8
    keishi@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=111319
    
    Reviewed by Kent Tamura.
    
    Source/WebCore:
    
    We want to remove the clear button from the calendar picker (Bug 109439)
    so we are adding the clear button to the right side of the input element.
    
    Tests: fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events.html
           fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events.html
           fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events.html
           fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events.html
           fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events.html
    
    * CMakeLists.txt: Added ClearButtonElement.cpp
    * GNUmakefile.list.am: Ditto.
    * Target.pri: Ditto.
    * WebCore.gypi: Ditto.
    * WebCore.vcproj/WebCore.vcproj: Ditto.
    * WebCore.vcxproj/WebCore.vcxproj: Ditto.
    * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
    * WebCore.xcodeproj/project.pbxproj: Ditto.
    * css/html.css:
    (input::-webkit-clear-button): Styles for the clear button.
    * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::editControlValueChanged):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::requiredAttributeChanged): Hide clear button if the value is required.
    (WebCore):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::focusAndSelectClearButtonOwner): Called on mouse down on clear button.
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldClearButtonRespondToMouseEvents):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::clearValue):
    (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateClearButtonVisibility): We want to hide the clear button if the value is required or the value is empty.
    * html/BaseMultipleFieldsDateAndTimeInputType.h:
    (BaseMultipleFieldsDateAndTimeInputType):
    * html/HTMLInputElement.cpp:
    (WebCore::HTMLInputElement::updateClearButtonVisibility):
    (WebCore):
    (WebCore::HTMLInputElement::requiredAttributeChanged):
    * html/HTMLInputElement.h:
    (HTMLInputElement):
    * html/InputType.cpp:
    (WebCore::InputType::requiredAttributeChanged): Notifies the InputType that the required attribute has changed.
    (WebCore):
    (WebCore::InputType::updateClearButtonVisibility):
    * html/InputType.h:
    (InputType):
    * html/shadow/ClearButtonElement.cpp: Added.
    (WebCore):
    (WebCore::ClearButtonElement::ClearButtonElement):
    (WebCore::ClearButtonElement::create):
    (WebCore::ClearButtonElement::detach):
    (WebCore::ClearButtonElement::releaseCapture): Stop capturing mouse events.
    (WebCore::ClearButtonElement::defaultEventHandler):
    * html/shadow/ClearButtonElement.h: Added.
    (WebCore):
    (ClearButtonElement):
    (ClearButtonOwner):
    (WebCore::ClearButtonElement::ClearButtonOwner::~ClearButtonOwner):
    (WebCore::ClearButtonElement::removeClearButtonOwner):
    (WebCore::ClearButtonElement::isMouseFocusable):
    
    LayoutTests:
    
    * fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events-expected.txt: Added.
    * fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events.html: Added.
    * fast/forms/date-multiple-fields/date-multiple-fields-mouse-events-expected.txt:
    * fast/forms/date-multiple-fields/date-multiple-fields-mouse-events.html:
    * fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events-expected.txt: Added.
    * fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events.html: Added.
    * fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events-expected.txt:
    * fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events.html:
    * fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events-expected.txt: Added.
    * fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events.html: Added.
    * fast/forms/month-multiple-fields/month-multiple-fields-mouse-events-expected.txt:
    * fast/forms/month-multiple-fields/month-multiple-fields-mouse-events.html:
    * fast/forms/resources/common-clearbutton-change-and-input-events.js: Added.
    (.testInput.onchange):
    (.testInput.oninput):
    (testClearButtonChangeAndInputEvents):
    * fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events-expected.txt: Added.
    * fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events.html: Added.
    * fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt:
    * fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html:
    * fast/forms/time-multiple-fields/time-multiple-fields-narrow-width-scroll.html:
    * fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events-expected.txt: Added.
    * fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events.html: Added.
    * fast/forms/week-multiple-fields/week-multiple-fields-mouse-events-expected.txt:
    * fast/forms/week-multiple-fields/week-multiple-fields-mouse-events.html:
    * platform/chromium/TestExpectations:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@145055 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    85f0e7f8