Changeset 43267 in webkit
- Timestamp:
- May 5, 2009 5:54:41 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r43258 r43267 1 2009-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 1 12 2009-05-05 Chris Fleizach <cfleizach@apple.com> 2 13 -
trunk/WebCore/ChangeLog
r43265 r43267 1 2009-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 1 29 2009-04-01 miggilin <mr.diggilin@gmail.com> 2 30 -
trunk/WebCore/bindings/objc/DOMHTML.mm
r43187 r43267 105 105 - (BOOL)_isTextField 106 106 { 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(); 134 108 } 135 109 -
trunk/WebCore/html/HTMLInputElement.cpp
r43237 r43267 231 231 else if (equalIgnoringCase(t, "range")) 232 232 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; 233 241 else 234 242 newType = TEXT; … … 314 322 return checkbox; 315 323 } 324 case EMAIL: { 325 DEFINE_STATIC_LOCAL(const AtomicString, email, ("email")); 326 return email; 327 } 316 328 case FILE: { 317 329 DEFINE_STATIC_LOCAL(const AtomicString, file, ("file")); … … 328 340 case ISINDEX: 329 341 return emptyAtom; 342 case NUMBER: { 343 DEFINE_STATIC_LOCAL(const AtomicString, number, ("number")); 344 return number; 345 } 330 346 case PASSWORD: { 331 347 DEFINE_STATIC_LOCAL(const AtomicString, password, ("password")); … … 352 368 return submit; 353 369 } 370 case TELEPHONE: { 371 DEFINE_STATIC_LOCAL(const AtomicString, telephone, ("tel")); 372 return telephone; 373 } 354 374 case TEXT: { 355 375 DEFINE_STATIC_LOCAL(const AtomicString, text, ("text")); 356 376 return text; 357 377 } 378 case URL: { 379 DEFINE_STATIC_LOCAL(const AtomicString, url, ("url")); 380 return url; 381 } 358 382 } 359 383 return emptyAtom; … … 367 391 switch (inputType()) { 368 392 case BUTTON: 393 case EMAIL: 369 394 case FILE: 370 395 case HIDDEN: 371 396 case IMAGE: 372 397 case ISINDEX: 398 case NUMBER: 373 399 case RANGE: 374 400 case RESET: 375 401 case SEARCH: 376 402 case SUBMIT: 403 case TELEPHONE: 377 404 case TEXT: 405 case URL: 378 406 result = value(); 379 407 return true; … … 394 422 switch (inputType()) { 395 423 case BUTTON: 424 case EMAIL: 396 425 case FILE: 397 426 case HIDDEN: 398 427 case IMAGE: 399 428 case ISINDEX: 429 case NUMBER: 400 430 case RANGE: 401 431 case RESET: 402 432 case SEARCH: 403 433 case SUBMIT: 434 case TELEPHONE: 404 435 case TEXT: 436 case URL: 405 437 setValue(state); 406 438 break; … … 498 530 // a no-op for this type 499 531 break; 532 case EMAIL: 500 533 case ISINDEX: 534 case NUMBER: 501 535 case PASSWORD: 502 536 case SEARCH: 537 case TELEPHONE: 503 538 case TEXT: 539 case URL: 504 540 // should never restore previous selection here 505 541 focus(false); … … 634 670 case BUTTON: 635 671 case CHECKBOX: 672 case EMAIL: 636 673 case FILE: 637 674 case IMAGE: 638 675 case ISINDEX: 676 case NUMBER: 639 677 case PASSWORD: 640 678 case RADIO: … … 643 681 case SEARCH: 644 682 case SUBMIT: 683 case TELEPHONE: 645 684 case TEXT: 685 case URL: 646 686 return HTMLFormControlElementWithState::rendererIsNeeded(style); 647 687 case HIDDEN: … … 670 710 case RANGE: 671 711 return new (arena) RenderSlider(this); 712 case EMAIL: 672 713 case ISINDEX: 714 case NUMBER: 673 715 case PASSWORD: 674 716 case SEARCH: 717 case TELEPHONE: 675 718 case TEXT: 719 case URL: 676 720 return new (arena) RenderTextControlSingleLine(this); 677 721 } … … 752 796 753 797 switch (inputType()) { 798 case EMAIL: 754 799 case HIDDEN: 755 800 case ISINDEX: 801 case NUMBER: 756 802 case PASSWORD: 757 803 case RANGE: 758 804 case SEARCH: 805 case TELEPHONE: 759 806 case TEXT: 807 case URL: 760 808 // always successful 761 809 encoding.appendData(name(), value()); … … 907 955 case BUTTON: 908 956 case CHECKBOX: 957 case EMAIL: 909 958 case FILE: 910 959 case HIDDEN: 911 960 case IMAGE: 912 961 case ISINDEX: 962 case NUMBER: 913 963 case PASSWORD: 914 964 case RADIO: 915 965 case RANGE: 916 966 case SEARCH: 967 case TELEPHONE: 917 968 case TEXT: 969 case URL: 918 970 break; 919 971 case RESET: … … 1003 1055 case SUBMIT: 1004 1056 return false; 1057 case EMAIL: 1005 1058 case FILE: 1006 1059 case ISINDEX: 1060 case NUMBER: 1007 1061 case PASSWORD: 1008 1062 case RANGE: 1009 1063 case SEARCH: 1064 case TELEPHONE: 1010 1065 case TEXT: 1066 case URL: 1011 1067 return true; 1012 1068 } … … 1174 1230 switch (inputType()) { 1175 1231 case CHECKBOX: 1232 case EMAIL: 1176 1233 case HIDDEN: 1177 1234 case ISINDEX: 1235 case NUMBER: 1178 1236 case PASSWORD: 1179 1237 case RANGE: 1180 1238 case SEARCH: 1239 case TELEPHONE: 1181 1240 case TEXT: 1241 case URL: 1182 1242 // Simulate mouse click on the default form button for enter for these types of elements. 1183 1243 clickDefaultFormButton = true; … … 1297 1357 clickElement = true; 1298 1358 break; 1359 case EMAIL: 1299 1360 case HIDDEN: 1300 1361 case ISINDEX: 1362 case NUMBER: 1301 1363 case PASSWORD: 1302 1364 case RANGE: 1303 1365 case SEARCH: 1366 case TELEPHONE: 1304 1367 case TEXT: 1368 case URL: 1305 1369 break; 1306 1370 } -
trunk/WebCore/html/HTMLInputElement.h
r41511 r43267 51 51 BUTTON, 52 52 SEARCH, 53 RANGE 53 RANGE, 54 EMAIL, 55 NUMBER, 56 TELEPHONE, 57 URL 54 58 }; 55 59 … … 89 93 bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; } 90 94 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; } 92 96 virtual bool isSearchField() const { return m_type == SEARCH; } 93 97 virtual bool isInputTypeHidden() const { return m_type == HIDDEN; } … … 233 237 OwnPtr<HTMLImageLoader> m_imageLoader; 234 238 RefPtr<FileList> m_fileList; 235 unsigned m_type : 4; // InputType239 unsigned m_type : 5; // InputType 236 240 bool m_checked : 1; 237 241 bool m_defaultChecked : 1;
Note: See TracChangeset
for help on using the changeset viewer.