diff options
Diffstat (limited to 'WebCore/dom/Element.h')
-rw-r--r-- | WebCore/dom/Element.h | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/WebCore/dom/Element.h b/WebCore/dom/Element.h new file mode 100644 index 0000000..b9dc0fd --- /dev/null +++ b/WebCore/dom/Element.h @@ -0,0 +1,254 @@ +/* + * Copyright (C) 1999 Lars Knoll (knoll@kde.org) + * (C) 1999 Antti Koivisto (koivisto@kde.org) + * (C) 2001 Peter Kelly (pmk@post.com) + * (C) 2001 Dirk Mueller (mueller@kde.org) + * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef Element_h +#define Element_h + +#include "ContainerNode.h" +#include "QualifiedName.h" +#include "ScrollTypes.h" + +namespace WebCore { + +class Attr; +class Attribute; +class CSSStyleDeclaration; +class ElementRareData; +class IntSize; + +class Element : public ContainerNode { +public: + Element(const QualifiedName&, Document*); + ~Element(); + + const AtomicString& getIDAttribute() const; + bool hasAttribute(const QualifiedName&) const; + const AtomicString& getAttribute(const QualifiedName&) const; + void setAttribute(const QualifiedName&, const AtomicString& value, ExceptionCode&); + void removeAttribute(const QualifiedName&, ExceptionCode&); + + bool hasAttributes() const; + + bool hasAttribute(const String& name) const; + bool hasAttributeNS(const String& namespaceURI, const String& localName) const; + + const AtomicString& getAttribute(const String& name) const; + const AtomicString& getAttributeNS(const String& namespaceURI, const String& localName) const; + + void setAttribute(const AtomicString& name, const AtomicString& value, ExceptionCode&); + void setAttributeNS(const AtomicString& namespaceURI, const AtomicString& qualifiedName, const AtomicString& value, ExceptionCode&); + + void scrollIntoView (bool alignToTop = true); + void scrollIntoViewIfNeeded(bool centerIfNeeded = true); + + void scrollByUnits(int units, ScrollGranularity); + void scrollByLines(int lines); + void scrollByPages(int pages); + + int offsetLeft(); + int offsetTop(); + int offsetWidth(); + int offsetHeight(); + Element* offsetParent(); + int clientLeft(); + int clientTop(); + int clientWidth(); + int clientHeight(); + int scrollLeft(); + int scrollTop(); + void setScrollLeft(int); + void setScrollTop(int); + int scrollWidth(); + int scrollHeight(); + + void removeAttribute(const String& name, ExceptionCode&); + void removeAttributeNS(const String& namespaceURI, const String& localName, ExceptionCode&); + + PassRefPtr<Attr> getAttributeNode(const String& name); + PassRefPtr<Attr> getAttributeNodeNS(const String& namespaceURI, const String& localName); + PassRefPtr<Attr> setAttributeNode(Attr*, ExceptionCode&); + PassRefPtr<Attr> setAttributeNodeNS(Attr*, ExceptionCode&); + PassRefPtr<Attr> removeAttributeNode(Attr*, ExceptionCode&); + + virtual CSSStyleDeclaration* style(); + + const QualifiedName& tagQName() const { return m_tagName; } + String tagName() const { return nodeName(); } + bool hasTagName(const QualifiedName& tagName) const { return m_tagName.matches(tagName); } + + // A fast function for checking the local name against another atomic string. + bool hasLocalName(const AtomicString& other) const { return m_tagName.localName() == other; } + bool hasLocalName(const QualifiedName& other) const { return m_tagName.localName() == other.localName(); } + + const AtomicString& localName() const { return m_tagName.localName(); } + const AtomicString& prefix() const { return m_tagName.prefix(); } + virtual void setPrefix(const AtomicString&, ExceptionCode&); + const AtomicString& namespaceURI() const { return m_tagName.namespaceURI(); } + + virtual KURL baseURI() const; + + // DOM methods overridden from parent classes + virtual NodeType nodeType() const; + virtual PassRefPtr<Node> cloneNode(bool deep); + virtual String nodeName() const; + virtual void insertedIntoDocument(); + virtual void removedFromDocument(); + virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0); + + void normalizeAttributes(); + + virtual bool isInputTypeHidden() const { return false; } + virtual bool isPasswordField() const { return false; } + + String nodeNamePreservingCase() const; + + // convenience methods which ignore exceptions + void setAttribute(const QualifiedName&, const AtomicString& value); + void setBooleanAttribute(const QualifiedName& name, bool); + + virtual NamedAttrMap* attributes() const; + NamedAttrMap* attributes(bool readonly) const; + + // This method is called whenever an attribute is added, changed or removed. + virtual void attributeChanged(Attribute*, bool preserveDecls = false); + + // not part of the DOM + void setAttributeMap(PassRefPtr<NamedAttrMap>); + + virtual void copyNonAttributeProperties(const Element* source) {} + + virtual void attach(); + virtual void detach(); + virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); + virtual void recalcStyle(StyleChange = NoChange); + + virtual RenderStyle* computedStyle(); + + virtual bool childTypeAllowed(NodeType); + + virtual PassRefPtr<Attribute> createAttribute(const QualifiedName&, const AtomicString& value); + + void dispatchAttrRemovalEvent(Attribute*); + void dispatchAttrAdditionEvent(Attribute*); + + virtual void accessKeyAction(bool sendToAnyEvent) { } + + virtual bool isURLAttribute(Attribute*) const; + virtual const QualifiedName& imageSourceAttributeName() const; + virtual String target() const { return String(); } + virtual void focus(bool restorePreviousSelection = true); + virtual void updateFocusAppearance(bool restorePreviousSelection); + void blur(); + +#ifndef NDEBUG + virtual void formatForDebugger(char* buffer, unsigned length) const; +#endif + + bool contains(const Node*) const; + + String innerText() const; + String outerText() const; + + virtual String title() const; + + String openTagStartToString() const; + + void updateId(const AtomicString& oldId, const AtomicString& newId); + + IntSize minimumSizeForResizing() const; + void setMinimumSizeForResizing(const IntSize&); + + // Use Document::registerForDocumentActivationCallbacks() to subscribe these + virtual void documentWillBecomeInactive() { } + virtual void documentDidBecomeActive() { } + + bool isFinishedParsingChildren() const { return m_parsingChildrenFinished; } + virtual void finishParsingChildren(); + virtual void beginParsingChildren() { m_parsingChildrenFinished = false; } + + // ElementTraversal API + Element* firstElementChild() const; + Element* lastElementChild() const; + Element* previousElementSibling() const; + Element* nextElementSibling() const; + unsigned childElementCount() const; + +private: + virtual void createAttributeMap() const; + + virtual void updateStyleAttribute() const {} + +#if ENABLE(SVG) + virtual void updateAnimatedSVGAttribute(const String&) const {} +#endif + + void updateFocusAppearanceSoonAfterAttach(); + void cancelFocusAppearanceUpdate(); + + virtual const AtomicString& virtualPrefix() const { return prefix(); } + virtual const AtomicString& virtualLocalName() const { return localName(); } + virtual const AtomicString& virtualNamespaceURI() const { return namespaceURI(); } + + QualifiedName m_tagName; + virtual NodeRareData* createRareData(); + +protected: + ElementRareData* rareData() const; + ElementRareData* ensureRareData(); + + mutable RefPtr<NamedAttrMap> namedAttrMap; + + // These two bits are really used by the StyledElement subclass, but they are pulled up here in order to be shared with other + // Element bits. + mutable bool m_isStyleAttributeValid : 1; + mutable bool m_synchronizingStyleAttribute : 1; + +#if ENABLE(SVG) + // These bit is are used by SVGElement subclasses, and it lives here for the same reason as above. + mutable bool m_areSVGAttributesValid : 1; + mutable bool m_synchronizingSVGAttributes : 1; +#endif + +private: + bool m_parsingChildrenFinished : 1; +}; + +inline bool Node::hasTagName(const QualifiedName& name) const +{ + return isElementNode() && static_cast<const Element*>(this)->hasTagName(name); +} + +inline bool Node::hasAttributes() const +{ + return isElementNode() && static_cast<const Element*>(this)->hasAttributes(); +} + +inline NamedAttrMap* Node::attributes() const +{ + return isElementNode() ? static_cast<const Element*>(this)->attributes() : 0; +} + +} //namespace + +#endif |