Changeset 43267 in webkit


Ignore:
Timestamp:
May 5, 2009 5:54:41 PM (15 years ago)
Author:
bolsinga@apple.com
Message:

WebCore:

2009-05-05 Greg Bolsinga <bolsinga@apple.com>

Reviewed by Sam Weinig.

https://bugs.webkit.org/show_bug.cgi?id=25554

Support HTML5 text control input types: email, number, tel, url

Test: fast/html/text-field-input-types.html

  • bindings/objc/DOMHTML.mm: (-[DOMHTMLInputElement _isTextField]): Call HTMLInputElement::isTextField directly.
  • html/HTMLInputElement.cpp: Use the new types where appropriate. (WebCore::HTMLInputElement::setInputType): (WebCore::HTMLInputElement::type): (WebCore::HTMLInputElement::saveState): (WebCore::HTMLInputElement::restoreState): (WebCore::HTMLInputElement::accessKeyAction): (WebCore::HTMLInputElement::rendererIsNeeded): (WebCore::HTMLInputElement::createRenderer): (WebCore::HTMLInputElement::appendFormData): (WebCore::HTMLInputElement::valueWithDefault): (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): (WebCore::HTMLInputElement::defaultEventHandler):
  • html/HTMLInputElement.h: Ditto. (WebCore::HTMLInputElement::): (WebCore::HTMLInputElement::isTextField):

LayoutTests:

2009-05-05 Greg Bolsinga <bolsinga@apple.com>

Reviewed by Sam Weinig.

https://bugs.webkit.org/show_bug.cgi?id=25554

Support HTML5 text control input types: email, number, tel, url

  • fast/html/text-field-input-types-expected.txt: Added.
  • fast/html/text-field-input-types.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r43258 r43267  
     12009-05-05  Greg Bolsinga  <bolsinga@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4       
     5        https://bugs.webkit.org/show_bug.cgi?id=25554
     6       
     7        Support HTML5 text control input types: email, number, tel, url
     8
     9        * fast/html/text-field-input-types-expected.txt: Added.
     10        * fast/html/text-field-input-types.html: Added.
     11
    1122009-05-05  Chris Fleizach  <cfleizach@apple.com>
    213
  • trunk/WebCore/ChangeLog

    r43265 r43267  
     12009-05-05  Greg Bolsinga  <bolsinga@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=25554
     6       
     7        Support HTML5 text control input types: email, number, tel, url
     8
     9        Test: fast/html/text-field-input-types.html
     10
     11        * bindings/objc/DOMHTML.mm:
     12        (-[DOMHTMLInputElement _isTextField]): Call HTMLInputElement::isTextField directly.
     13        * html/HTMLInputElement.cpp: Use the new types where appropriate.
     14        (WebCore::HTMLInputElement::setInputType):
     15        (WebCore::HTMLInputElement::type):
     16        (WebCore::HTMLInputElement::saveState):
     17        (WebCore::HTMLInputElement::restoreState):
     18        (WebCore::HTMLInputElement::accessKeyAction):
     19        (WebCore::HTMLInputElement::rendererIsNeeded):
     20        (WebCore::HTMLInputElement::createRenderer):
     21        (WebCore::HTMLInputElement::appendFormData):
     22        (WebCore::HTMLInputElement::valueWithDefault):
     23        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
     24        (WebCore::HTMLInputElement::defaultEventHandler):
     25        * html/HTMLInputElement.h: Ditto.
     26        (WebCore::HTMLInputElement::):
     27        (WebCore::HTMLInputElement::isTextField):
     28
    1292009-04-01  miggilin  <mr.diggilin@gmail.com>
    230
  • trunk/WebCore/bindings/objc/DOMHTML.mm

    r43187 r43267  
    105105- (BOOL)_isTextField
    106106{
    107     // We could make this public API as-is, or we could change it into a method that returns whether
    108     // the element is a text field or a button or ... ?
    109     static NSArray *textInputTypes = nil;
    110 #ifndef NDEBUG
    111     static NSArray *nonTextInputTypes = nil;
    112 #endif
    113    
    114     NSString *fieldType = [self type];
    115    
    116     // No type at all is treated as text type
    117     if ([fieldType length] == 0)
    118         return YES;
    119    
    120     if (textInputTypes == nil)
    121         textInputTypes = [[NSSet alloc] initWithObjects:@"text", @"password", @"search", @"isindex", nil];
    122    
    123     BOOL isText = [textInputTypes containsObject:[fieldType lowercaseString]];
    124    
    125 #ifndef NDEBUG
    126     if (nonTextInputTypes == nil)
    127         nonTextInputTypes = [[NSSet alloc] initWithObjects:@"checkbox", @"radio", @"submit", @"reset", @"file", @"hidden", @"image", @"button", @"range", nil];
    128    
    129     // Catch cases where a new input type has been added that's not in these lists.
    130     ASSERT(isText || [nonTextInputTypes containsObject:[fieldType lowercaseString]]);
    131 #endif   
    132    
    133     return isText;
     107    return core(self)->isTextField();
    134108}
    135109
  • trunk/WebCore/html/HTMLInputElement.cpp

    r43237 r43267  
    231231    else if (equalIgnoringCase(t, "range"))
    232232        newType = RANGE;
     233    else if (equalIgnoringCase(t, "email"))
     234        newType = EMAIL;
     235    else if (equalIgnoringCase(t, "number"))
     236        newType = NUMBER;
     237    else if (equalIgnoringCase(t, "tel"))
     238        newType = TELEPHONE;
     239    else if (equalIgnoringCase(t, "url"))
     240        newType = URL;
    233241    else
    234242        newType = TEXT;
     
    314322            return checkbox;
    315323        }
     324        case EMAIL: {
     325            DEFINE_STATIC_LOCAL(const AtomicString, email, ("email"));
     326            return email;
     327        }
    316328        case FILE: {
    317329            DEFINE_STATIC_LOCAL(const AtomicString, file, ("file"));
     
    328340        case ISINDEX:
    329341            return emptyAtom;
     342        case NUMBER: {
     343            DEFINE_STATIC_LOCAL(const AtomicString, number, ("number"));
     344            return number;
     345        }
    330346        case PASSWORD: {
    331347            DEFINE_STATIC_LOCAL(const AtomicString, password, ("password"));
     
    352368            return submit;
    353369        }
     370        case TELEPHONE: {
     371            DEFINE_STATIC_LOCAL(const AtomicString, telephone, ("tel"));
     372            return telephone;
     373        }
    354374        case TEXT: {
    355375            DEFINE_STATIC_LOCAL(const AtomicString, text, ("text"));
    356376            return text;
    357377        }
     378        case URL: {
     379            DEFINE_STATIC_LOCAL(const AtomicString, url, ("url"));
     380            return url;
     381        }
    358382    }
    359383    return emptyAtom;
     
    367391    switch (inputType()) {
    368392        case BUTTON:
     393        case EMAIL:
    369394        case FILE:
    370395        case HIDDEN:
    371396        case IMAGE:
    372397        case ISINDEX:
     398        case NUMBER:
    373399        case RANGE:
    374400        case RESET:
    375401        case SEARCH:
    376402        case SUBMIT:
     403        case TELEPHONE:
    377404        case TEXT:
     405        case URL:
    378406            result = value();
    379407            return true;
     
    394422    switch (inputType()) {
    395423        case BUTTON:
     424        case EMAIL:
    396425        case FILE:
    397426        case HIDDEN:
    398427        case IMAGE:
    399428        case ISINDEX:
     429        case NUMBER:
    400430        case RANGE:
    401431        case RESET:
    402432        case SEARCH:
    403433        case SUBMIT:
     434        case TELEPHONE:
    404435        case TEXT:
     436        case URL:
    405437            setValue(state);
    406438            break;
     
    498530            // a no-op for this type
    499531            break;
     532        case EMAIL:
    500533        case ISINDEX:
     534        case NUMBER:
    501535        case PASSWORD:
    502536        case SEARCH:
     537        case TELEPHONE:
    503538        case TEXT:
     539        case URL:
    504540            // should never restore previous selection here
    505541            focus(false);
     
    634670        case BUTTON:
    635671        case CHECKBOX:
     672        case EMAIL:
    636673        case FILE:
    637674        case IMAGE:
    638675        case ISINDEX:
     676        case NUMBER:
    639677        case PASSWORD:
    640678        case RADIO:
     
    643681        case SEARCH:
    644682        case SUBMIT:
     683        case TELEPHONE:
    645684        case TEXT:
     685        case URL:
    646686            return HTMLFormControlElementWithState::rendererIsNeeded(style);
    647687        case HIDDEN:
     
    670710        case RANGE:
    671711            return new (arena) RenderSlider(this);
     712        case EMAIL:
    672713        case ISINDEX:
     714        case NUMBER:
    673715        case PASSWORD:
    674716        case SEARCH:
     717        case TELEPHONE:
    675718        case TEXT:
     719        case URL:
    676720            return new (arena) RenderTextControlSingleLine(this);
    677721    }
     
    752796
    753797    switch (inputType()) {
     798        case EMAIL:
    754799        case HIDDEN:
    755800        case ISINDEX:
     801        case NUMBER:
    756802        case PASSWORD:
    757803        case RANGE:
    758804        case SEARCH:
     805        case TELEPHONE:
    759806        case TEXT:
     807        case URL:
    760808            // always successful
    761809            encoding.appendData(name(), value());
     
    907955            case BUTTON:
    908956            case CHECKBOX:
     957            case EMAIL:
    909958            case FILE:
    910959            case HIDDEN:
    911960            case IMAGE:
    912961            case ISINDEX:
     962            case NUMBER:
    913963            case PASSWORD:
    914964            case RADIO:
    915965            case RANGE:
    916966            case SEARCH:
     967            case TELEPHONE:
    917968            case TEXT:
     969            case URL:
    918970                break;
    919971            case RESET:
     
    10031055        case SUBMIT:
    10041056            return false;
     1057        case EMAIL:
    10051058        case FILE:
    10061059        case ISINDEX:
     1060        case NUMBER:
    10071061        case PASSWORD:
    10081062        case RANGE:
    10091063        case SEARCH:
     1064        case TELEPHONE:
    10101065        case TEXT:
     1066        case URL:
    10111067            return true;
    10121068    }
     
    11741230            switch (inputType()) {
    11751231                case CHECKBOX:
     1232                case EMAIL:
    11761233                case HIDDEN:
    11771234                case ISINDEX:
     1235                case NUMBER:
    11781236                case PASSWORD:
    11791237                case RANGE:
    11801238                case SEARCH:
     1239                case TELEPHONE:
    11811240                case TEXT:
     1241                case URL:
    11821242                    // Simulate mouse click on the default form button for enter for these types of elements.
    11831243                    clickDefaultFormButton = true;
     
    12971357                        clickElement = true;
    12981358                    break;
     1359                case EMAIL:
    12991360                case HIDDEN:
    13001361                case ISINDEX:
     1362                case NUMBER:
    13011363                case PASSWORD:
    13021364                case RANGE:
    13031365                case SEARCH:
     1366                case TELEPHONE:
    13041367                case TEXT:
     1368                case URL:
    13051369                    break;
    13061370            }
  • trunk/WebCore/html/HTMLInputElement.h

    r41511 r43267  
    5151        BUTTON,
    5252        SEARCH,
    53         RANGE
     53        RANGE,
     54        EMAIL,
     55        NUMBER,
     56        TELEPHONE,
     57        URL
    5458    };
    5559   
     
    8993    bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; }
    9094    virtual bool isRadioButton() const { return m_type == RADIO; }
    91     virtual bool isTextField() const { return m_type == TEXT || m_type == PASSWORD || m_type == SEARCH || m_type == ISINDEX; }
     95    virtual bool isTextField() const { return m_type == TEXT || m_type == PASSWORD || m_type == SEARCH || m_type == ISINDEX || m_type == EMAIL || m_type == NUMBER || m_type == TELEPHONE || m_type == URL; }
    9296    virtual bool isSearchField() const { return m_type == SEARCH; }
    9397    virtual bool isInputTypeHidden() const { return m_type == HIDDEN; }
     
    233237    OwnPtr<HTMLImageLoader> m_imageLoader;
    234238    RefPtr<FileList> m_fileList;
    235     unsigned m_type : 4; // InputType
     239    unsigned m_type : 5; // InputType
    236240    bool m_checked : 1;
    237241    bool m_defaultChecked : 1;
Note: See TracChangeset for help on using the changeset viewer.