WebCore:
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jul 2005 18:09:25 +0000 (18:09 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jul 2005 18:09:25 +0000 (18:09 +0000)
        Reviewed by Chris Blumenberg.

        Test cases added: none, this only affects Safari autocomplete; it doesn't affect any
        web pages.

        - some changes in the direction of weaning all the form-related SPI from NSView

        * kwq/DOMExtensions.h:
        added -[DOMHTMLInputElement isTextField]
        * kwq/DOMHTML.mm:
        (-[DOMHTMLInputElement isTextField]):
        new method that returns YES if this element is one of the types that's represented
        by a text field (as opposed to a button, slider, etc.). I could have put this method
        in Safari, but it seems useful for other WebKit clients.

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge viewForElement:]):
        added viewForElement: as a stopgap measure. This allowed me to convert controlsInForm:
        to return DOMElements rather than NSViews, while keeping autocomplete working in
        Safari tip of tree. When I finish the SPI conversion I'll delete this method. Note that
        from this point on, autocomplete will not work in Tiger Safari with tip of tree WebKit
        (it will always fail to find anything to autocomplete)
        (-[WebCoreBridge controlsInForm:]):
        now returns an array of DOMElement* rather than an array of NSView*

WebKit:

        Reviewed by Chris Blumenberg.

        - some changes in the direction of weaning all the form-related SPI from NSView

        * PublicHeaderChangesFromTiger.txt:
        noted that the WebCore change to add -[DOMHTMLInputElement isTextField] to
        DOMExtensions.h is a public header change.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation viewForElement:]):
        added viewForElement: as a stopgap measure. This allowed me to convert controlsInForm:
        to return DOMElements rather than NSViews, while keeping autocomplete working in
        Safari tip of tree. When I finish the SPI conversion I'll delete this method. Note that
        from this point on, autocomplete will not work in Tiger Safari with tip of tree WebKit
        (it will always fail to find anything to autocomplete)

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9871 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/kwq/DOMExtensions.h
WebCore/kwq/DOMHTML.mm
WebCore/kwq/WebCoreBridge.h
WebCore/kwq/WebCoreBridge.mm
WebKit/ChangeLog
WebKit/PublicHeaderChangesFromTiger.txt
WebKit/WebView.subproj/WebHTMLRepresentation.h
WebKit/WebView.subproj/WebHTMLRepresentation.m

index 8a35906..3b442b3 100644 (file)
@@ -1,33 +1,45 @@
-2005-07-21  Geoffrey Garen  <ggaren@apple.com>
+2005-07-22  John Sullivan  <sullivan@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
+        Reviewed by Chris Blumenberg.
+        
+        Test cases added: none, this only affects Safari autocomplete; it doesn't affect any
+        web pages.
 
-        Test cases added: (NONE)
+        - some changes in the direction of weaning all the form-related SPI from NSView
 
-        * WebCore.pbproj/project.pbxproj: Removed.
+        * kwq/DOMExtensions.h:
+        added -[DOMHTMLInputElement isTextField]
+        * kwq/DOMHTML.mm:
+        (-[DOMHTMLInputElement isTextField]):
+        new method that returns YES if this element is one of the types that's represented
+        by a text field (as opposed to a button, slider, etc.). I could have put this method
+        in Safari, but it seems useful for other WebKit clients.
+
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge viewForElement:]):
+        added viewForElement: as a stopgap measure. This allowed me to convert controlsInForm:
+        to return DOMElements rather than NSViews, while keeping autocomplete working in
+        Safari tip of tree. When I finish the SPI conversion I'll delete this method. Note that
+        from this point on, autocomplete will not work in Tiger Safari with tip of tree WebKit
+        (it will always fail to find anything to autocomplete)
+        (-[WebCoreBridge controlsInForm:]):
+        now returns an array of DOMElement* rather than an array of NSView*
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
+        * WebCore.pbproj/project.pbxproj: Removed.
 
-        Test cases added: (NONE)
+2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
         * WebCore.xcodeproj/.cvsignore: Added.
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
-        Test cases added: (NONE)
-
         * WebCore.xcodeproj/project.pbxproj: Added.
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
-        Test cases added: (NONE)
-
         * Makefile.am:
 
 2005-07-21  Beth Dakin  <bdakin@apple.com>
index ef6049f..aa8211f 100644 (file)
 - (void)setWidth:(long)width;
 @end
 
+@interface DOMHTMLInputElement (DOMHTMLInputElementExtensions)
+- (BOOL)isTextField;
+@end
+
 @interface DOMRGBColor (DOMRGBColorExtensions)
 - (DOMCSSPrimitiveValue *)alpha;
 @end
index 1c756a2..c89ce90 100644 (file)
@@ -1462,6 +1462,40 @@ using DOM::NodeImpl;
 
 @end
 
+@implementation DOMHTMLInputElement (DOMHTMLInputElementExtensions)
+
+- (BOOL)isTextField
+{
+    static NSArray *textInputTypes = nil;
+#ifndef NDEBUG
+    static NSArray *nonTextInputTypes = nil;
+#endif
+    
+    NSString *type = [self type];
+    
+    // No type at all is treated as text type
+    if ([type length] == 0)
+        return YES;
+    
+    if (textInputTypes == nil)
+        textInputTypes = [[NSSet alloc] initWithObjects:@"text", @"password", @"search", nil];
+    
+    BOOL isText = [textInputTypes containsObject:[type lowercaseString]];
+    
+#ifndef NDEBUG
+    if (nonTextInputTypes == nil)
+        nonTextInputTypes = [[NSSet alloc] initWithObjects:@"isindex", @"checkbox", @"radio", @"submit", @"reset", @"file", @"hidden", @"image", @"button", @"range", nil];
+    
+    // Catch cases where a new input type has been added that's not in these lists.
+    ASSERT(isText || [nonTextInputTypes containsObject:[type lowercaseString]]);
+#endif    
+    
+    return isText;
+}
+
+@end
+
+
 @implementation DOMHTMLTextAreaElement
 
 - (HTMLTextAreaElementImpl *)_textAreaElementImpl
index 12e183f..886d16f 100644 (file)
@@ -283,6 +283,7 @@ typedef enum
 
 - (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form;
 - (DOMElement *)elementForView:(NSView *)view;
+- (NSView *)viewForElement:(DOMElement *)view; // introduced temporarily to ease transition to view-free form SPI
 - (BOOL)elementDoesAutoComplete:(DOMElement *)element;
 - (BOOL)elementIsPassword:(DOMElement *)element;
 - (DOMElement *)formForElement:(DOMElement *)element;
index 9f0d826..d6230d5 100644 (file)
@@ -909,6 +909,11 @@ static NSView *viewForElement(ElementImpl *elementImpl)
     return nil;
 }
 
+- (NSView *)viewForElement:(DOMElement *)element
+{
+    return viewForElement([element _elementImpl]);
+}
+
 static HTMLInputElementImpl *inputElementFromDOMElement(DOMElement *element)
 {
     NodeImpl *node = [element _nodeImpl];
@@ -989,13 +994,11 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
         QPtrVector<HTMLGenericFormElementImpl> &elements = formElement->formElements;
         for (unsigned int i = 0; i < elements.count(); i++) {
             if (elements.at(i)->isEnumeratable()) {            // Skip option elements, other duds
-                NSView *view = viewForElement(elements.at(i));
-                if (view) {
-                    if (!results) {
-                        results = [NSMutableArray arrayWithObject:view];
-                    } else {
-                        [results addObject:view];
-                    }
+                DOMElement *de = [DOMElement _elementWithImpl:elements.at(i)];
+                if (!results) {
+                    results = [NSMutableArray arrayWithObject:de];
+                } else {
+                    [results addObject:de];
                 }
             }
         }
index 3e962a0..1babdab 100644 (file)
@@ -1,3 +1,22 @@
+2005-07-22  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Chris Blumenberg.
+
+        - some changes in the direction of weaning all the form-related SPI from NSView
+
+        * PublicHeaderChangesFromTiger.txt:
+        noted that the WebCore change to add -[DOMHTMLInputElement isTextField] to
+        DOMExtensions.h is a public header change.
+
+        * WebView.subproj/WebHTMLRepresentation.h:
+        * WebView.subproj/WebHTMLRepresentation.m:
+        (-[WebHTMLRepresentation viewForElement:]):
+        added viewForElement: as a stopgap measure. This allowed me to convert controlsInForm:
+        to return DOMElements rather than NSViews, while keeping autocomplete working in
+        Safari tip of tree. When I finish the SPI conversion I'll delete this method. Note that
+        from this point on, autocomplete will not work in Tiger Safari with tip of tree WebKit
+        (it will always fail to find anything to autocomplete)
+
 2005-07-21  Adele Peterson  <adele@apple.com>
 
         Reviewed by Darin.
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
         * WebKit.pbproj/project.pbxproj: Removed.
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
         * WebKit.xcodeproj/.cvsignore: Added.
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
         * WebKit.xcodeproj/project.pbxproj: Added.
 
 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
         * Makefile.am:
 
 2005-07-20  John Sullivan  <sullivan@apple.com>
index ff27926..f1fc0a6 100644 (file)
@@ -3,6 +3,12 @@ This file lists changes to WebKit public header files that have been made since
 When you make changes to public header files, please update this file, in the same general style as the ChangeLog file (new entries at top).
 ===============================================
 
+2005-07-22  John Sullivan  <sullivan@apple.com>
+
+Added -[DOMHTMLInputElement isTextField] to DOMExtensions.h (in WebCore, copied by build steps to WebKit).
+This is used by autocomplete code in Safari and could be moved there, but is a better fit in WebKit and
+is useful for developers.
+
 2005-06-22  John Sullivan  <sullivan@apple.com>
 
 Added the following values to the enum of WebMenuItem tags in WebUIDelegate.h:
index 49939d7..5be38d1 100644 (file)
@@ -52,6 +52,7 @@
 
 - (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form;
 - (DOMElement *)elementForView:(NSView *)view;
+- (NSView *)viewForElement:(DOMElement *)element; // introduced temporarily to ease transition to view-free form SPI
 - (BOOL)elementDoesAutoComplete:(DOMElement *)element;
 - (BOOL)elementIsPassword:(DOMElement *)element;
 - (DOMElement *)formForElement:(DOMElement *)element;
index 28ed957..0330cae 100644 (file)
     return [_private->bridge elementForView:view];
 }
 
+- (NSView *)viewForElement:(DOMElement *)element
+{
+    return [_private->bridge viewForElement:element];
+}
+
 - (BOOL)elementDoesAutoComplete:(DOMElement *)element
 {
     return [_private->bridge elementDoesAutoComplete:element];