diff -r 000000000000 -r 4f2f89ce4247 WebCore/bindings/objc/DOMHTML.mm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebCore/bindings/objc/DOMHTML.mm Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2006 Samuel Weinig + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "config.h" + +#import "DOMDocumentFragmentInternal.h" +#import "DOMExtensions.h" +#import "DOMHTMLCollectionInternal.h" +#import "DOMHTMLDocumentInternal.h" +#import "DOMHTMLInputElementInternal.h" +#import "DOMHTMLSelectElementInternal.h" +#import "DOMHTMLTextAreaElementInternal.h" +#import "DOMNodeInternal.h" +#import "DOMPrivate.h" +#import "DocumentFragment.h" +#import "FrameView.h" +#import "HTMLCollection.h" +#import "HTMLDocument.h" +#import "HTMLInputElement.h" +#import "HTMLSelectElement.h" +#import "HTMLTextAreaElement.h" +#import "Page.h" +#import "Range.h" +#import "RenderTextControl.h" +#import "Settings.h" +#import "markup.h" + +//------------------------------------------------------------------------------------------ +// DOMHTMLDocument + +@implementation DOMHTMLDocument (DOMHTMLDocumentExtensions) + +- (DOMDocumentFragment *)createDocumentFragmentWithMarkupString:(NSString *)markupString baseURL:(NSURL *)baseURL +{ + return kit(createFragmentFromMarkup(core(self), markupString, [baseURL absoluteString]).get()); +} + +- (DOMDocumentFragment *)createDocumentFragmentWithText:(NSString *)text +{ + // FIXME: Since this is not a contextual fragment, it won't handle whitespace properly. + return kit(createFragmentFromText(core(self)->createRange().get(), text).get()); +} + +@end + +@implementation DOMHTMLDocument (WebPrivate) + +- (DOMDocumentFragment *)_createDocumentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString +{ + NSURL *baseURL = core(self)->completeURL(WebCore::deprecatedParseURL(baseURLString)); + return [self createDocumentFragmentWithMarkupString:markupString baseURL:baseURL]; +} + +- (DOMDocumentFragment *)_createDocumentFragmentWithText:(NSString *)text +{ + return [self createDocumentFragmentWithText:text]; +} + +@end + +#ifdef BUILDING_ON_TIGER +@implementation DOMHTMLDocument (DOMHTMLDocumentOverrides) + +- (DOMNode *)firstChild +{ + WebCore::HTMLDocument* coreHTMLDocument = core(self); + if (!coreHTMLDocument->page() || !coreHTMLDocument->page()->settings()->needsTigerMailQuirks()) + return kit(coreHTMLDocument->firstChild()); + + WebCore::Node* child = coreHTMLDocument->firstChild(); + while (child && child->nodeType() == WebCore::Node::DOCUMENT_TYPE_NODE) + child = child->nextSibling(); + + return kit(child); +} + +@end +#endif + +@implementation DOMHTMLInputElement (FormAutoFillTransition) + +- (BOOL)_isTextField +{ + return core(self)->isTextField(); +} + +- (NSRect)_rectOnScreen +{ + // Returns bounding rect of text field, in screen coordinates. + NSRect result = [self boundingBox]; + if (!core(self)->document()->view()) + return result; + + NSView* view = core(self)->document()->view()->documentView(); + result = [view convertRect:result toView:nil]; + result.origin = [[view window] convertBaseToScreen:result.origin]; + return result; +} + +- (void)_replaceCharactersInRange:(NSRange)targetRange withString:(NSString *)replacementString selectingFromIndex:(int)index +{ + WebCore::HTMLInputElement* inputElement = core(self); + if (inputElement) { + WebCore::String newValue = inputElement->value(); + newValue.replace(targetRange.location, targetRange.length, replacementString); + inputElement->setValue(newValue); + inputElement->setSelectionRange(index, newValue.length()); + } +} + +- (NSRange)_selectedRange +{ + WebCore::HTMLInputElement* inputElement = core(self); + if (inputElement) { + int start = inputElement->selectionStart(); + int end = inputElement->selectionEnd(); + return NSMakeRange(start, end - start); + } + return NSMakeRange(NSNotFound, 0); +} + +- (BOOL)_isAutofilled +{ + return core(self)->isAutofilled(); +} + +- (void)_setAutofilled:(BOOL)filled +{ + // This notifies the input element that the content has been autofilled + // This allows WebKit to obey the -webkit-autofill pseudo style, which + // changes the background color. + core(self)->setAutofilled(filled); +} + +@end + +@implementation DOMHTMLSelectElement (FormAutoFillTransition) + +- (void)_activateItemAtIndex:(int)index +{ + // Use the setSelectedIndexByUser function so a change event will be fired. + if (WebCore::HTMLSelectElement* select = core(self)) + select->setSelectedIndexByUser(index, true, true); +} + +@end + +@implementation DOMHTMLInputElement (FormPromptAdditions) + +- (BOOL)_isEdited +{ + WebCore::RenderObject *renderer = core(self)->renderer(); + return renderer && [self _isTextField] && static_cast(renderer)->lastChangeWasUserEdit(); +} + +@end + +@implementation DOMHTMLTextAreaElement (FormPromptAdditions) + +- (BOOL)_isEdited +{ + WebCore::RenderObject* renderer = core(self)->renderer(); + return renderer && static_cast(renderer)->lastChangeWasUserEdit(); +} + +@end + +Class kitClass(WebCore::HTMLCollection* collection) +{ + if (collection->type() == WebCore::SelectOptions) + return [DOMHTMLOptionsCollection class]; + return [DOMHTMLCollection class]; +}