📄 dom.mm
字号:
break; case WebCore::Node::CDATA_SECTION_NODE: wrapperClass = [DOMCDATASection class]; break; case WebCore::Node::ENTITY_REFERENCE_NODE: wrapperClass = [DOMEntityReference class]; break; case WebCore::Node::ENTITY_NODE: wrapperClass = [DOMEntity class]; break; case WebCore::Node::PROCESSING_INSTRUCTION_NODE: wrapperClass = [DOMProcessingInstruction class]; break; case WebCore::Node::COMMENT_NODE: wrapperClass = [DOMComment class]; break; case WebCore::Node::DOCUMENT_NODE: if (static_cast<WebCore::Document*>(impl)->isHTMLDocument()) wrapperClass = [DOMHTMLDocument class];#if ENABLE(SVG) else if (static_cast<WebCore::Document*>(impl)->isSVGDocument()) wrapperClass = [DOMSVGDocument class];#endif else wrapperClass = [DOMDocument class]; break; case WebCore::Node::DOCUMENT_TYPE_NODE: wrapperClass = [DOMDocumentType class]; break; case WebCore::Node::DOCUMENT_FRAGMENT_NODE: wrapperClass = [DOMDocumentFragment class]; break; case WebCore::Node::NOTATION_NODE: wrapperClass = [DOMNotation class]; break; case WebCore::Node::XPATH_NAMESPACE_NODE: // FIXME: Create an XPath objective C wrapper // See http://bugs.webkit.org/show_bug.cgi?id=8755 return nil; } return [[[wrapperClass alloc] _initWithNode:impl] autorelease];}+ (id <DOMEventTarget>)_wrapEventTarget:(WebCore::EventTarget *)eventTarget{ if (!eventTarget) return nil; // We don't have an ObjC binding for XMLHttpRequest return [DOMNode _wrapNode:eventTarget->toNode()];}- (WebCore::Node *)_node{ return reinterpret_cast<WebCore::Node*>(_internal);}- (JSC::Bindings::RootObject*)_rootObject{ if (WebCore::Node *n = [self _node]) { if (WebCore::Frame* frame = n->document()->frame()) return frame->script()->bindingRootObject(); } return 0;}@end@implementation DOMNode (DOMNodeExtensions)// FIXME: This should be implemented in Node so we don't have to fetch the renderer.// If it was, we could even autogenerate.- (NSRect)boundingBox{ [self _node]->document()->updateLayoutIgnorePendingStylesheets(); WebCore::RenderObject *renderer = [self _node]->renderer(); if (renderer) return renderer->absoluteBoundingBoxRect(); return NSZeroRect;}// FIXME: This should be implemented in Node so we don't have to fetch the renderer.// If it was, we could even autogenerate.- (NSArray *)lineBoxRects{ [self _node]->document()->updateLayoutIgnorePendingStylesheets(); WebCore::RenderObject *renderer = [self _node]->renderer(); if (renderer) { Vector<WebCore::IntRect> rects; renderer->absoluteRectsForRange(rects); return kit(rects); } return nil;}@end#if ENABLE(SVG)@implementation DOMSVGElementInstance (WebCoreInternal)- (id)_initWithSVGElementInstance:(WebCore::SVGElementInstance *)impl{ ASSERT(impl); [super _init]; _internal = reinterpret_cast<DOMObjectInternal*>(impl); impl->ref(); WebCore::addDOMWrapper(self, impl); return self;}+ (DOMSVGElementInstance *)_wrapSVGElementInstance:(WebCore::SVGElementInstance *)impl{ if (!impl) return nil; id cachedInstance; cachedInstance = WebCore::getDOMWrapper(impl); if (cachedInstance) return [[cachedInstance retain] autorelease]; return [[[self alloc] _initWithSVGElementInstance:impl] autorelease];}+ (id <DOMEventTarget>)_wrapEventTarget:(WebCore::EventTarget *)eventTarget{ if (!eventTarget) return nil; return [DOMSVGElementInstance _wrapSVGElementInstance:eventTarget->toSVGElementInstance()];}- (WebCore::SVGElementInstance *)_SVGElementInstance{ return reinterpret_cast<WebCore::SVGElementInstance*>(_internal);}@end#endif@implementation DOMNode (DOMNodeExtensionsPendingPublic)- (NSImage *)renderedImage{ if (WebCore::Node *node = [self _node]) if (WebCore::Frame* frame = node->document()->frame()) return frame->nodeImage(node); return nil;}@end@implementation DOMRange (DOMRangeExtensions)- (NSRect)boundingBox{ [self _range]->ownerDocument()->updateLayoutIgnorePendingStylesheets(); return [self _range]->boundingBox();}- (NSArray *)lineBoxRects{ Vector<WebCore::IntRect> rects; [self _range]->ownerDocument()->updateLayoutIgnorePendingStylesheets(); [self _range]->addLineBoxRects(rects); return kit(rects);}@end//------------------------------------------------------------------------------------------// DOMElement// FIXME: this should be auto-generated in DOMElement.mm@implementation DOMElement (DOMElementAppKitExtensions)// FIXME: this should be implemented in the implementation- (NSImage*)image{ WebCore::RenderObject* renderer = [self _element]->renderer(); if (renderer && renderer->isImage()) { WebCore::RenderImage* img = static_cast<WebCore::RenderImage*>(renderer); if (img->cachedImage() && !img->cachedImage()->errorOccurred()) return img->cachedImage()->image()->getNSImage(); } return nil;}@end@implementation DOMElement (WebPrivate)// FIXME: this should be implemented in the implementation- (NSFont *)_font{ WebCore::RenderObject* renderer = [self _element]->renderer(); if (renderer) return renderer->style()->font().primaryFont()->getNSFont(); return nil;}// FIXME: this should be implemented in the implementation- (NSData *)_imageTIFFRepresentation{ WebCore::RenderObject* renderer = [self _element]->renderer(); if (renderer && renderer->isImage()) { WebCore::RenderImage* img = static_cast<WebCore::RenderImage*>(renderer); if (img->cachedImage() && !img->cachedImage()->errorOccurred()) return (NSData*)(img->cachedImage()->image()->getTIFFRepresentation()); } return nil;}// FIXME: this should be implemented in the implementation- (NSURL *)_getURLAttribute:(NSString *)name{ ASSERT(name); WebCore::Element* element = [self _element]; ASSERT(element); return element->document()->completeURL(parseURL(element->getAttribute(name)));}// FIXME: this should be implemented in the implementation- (BOOL)isFocused{ WebCore::Element* impl = [self _element]; if (impl->document()->focusedNode() == impl) return YES; return NO;}@end//------------------------------------------------------------------------------------------// DOMRange@implementation DOMRange (WebPrivate)- (NSString *)description{ if (!_internal) return @"<DOMRange: null>"; return [NSString stringWithFormat:@"<DOMRange: %@ %d %@ %d>", [self startContainer], [self startOffset], [self endContainer], [self endOffset]];}// FIXME: this should be removed as soon as all internal Apple uses of it have been replaced with// calls to the public method - (NSString *)text.- (NSString *)_text{ return [self text];}@end//------------------------------------------------------------------------------------------// DOMNodeFilter// FIXME: This implementation should be in it's own file.@implementation DOMNodeFilter- (id)_initWithNodeFilter:(WebCore::NodeFilter *)impl{ ASSERT(impl); [super _init]; _internal = reinterpret_cast<DOMObjectInternal*>(impl); impl->ref(); WebCore::addDOMWrapper(self, impl); return self;}+ (DOMNodeFilter *)_wrapNodeFilter:(WebCore::NodeFilter *)impl{ if (!impl) return nil; id cachedInstance; cachedInstance = WebCore::getDOMWrapper(impl); if (cachedInstance) return [[cachedInstance retain] autorelease]; return [[[self alloc] _initWithNodeFilter:impl] autorelease];}- (WebCore::NodeFilter *)_nodeFilter{ return reinterpret_cast<WebCore::NodeFilter*>(_internal);}- (void)dealloc{ if (_internal) reinterpret_cast<WebCore::NodeFilter*>(_internal)->deref(); [super dealloc];}- (void)finalize{ if (_internal) reinterpret_cast<WebCore::NodeFilter*>(_internal)->deref(); [super finalize];}- (short)acceptNode:(DOMNode *)node{ return [self _nodeFilter]->acceptNode([node _node]);}@end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -