summaryrefslogtreecommitdiffstats
path: root/khtml/ecma/kjs_dom.h
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/ecma/kjs_dom.h')
-rw-r--r--khtml/ecma/kjs_dom.h299
1 files changed, 299 insertions, 0 deletions
diff --git a/khtml/ecma/kjs_dom.h b/khtml/ecma/kjs_dom.h
new file mode 100644
index 000000000..e6b593fdb
--- /dev/null
+++ b/khtml/ecma/kjs_dom.h
@@ -0,0 +1,299 @@
+// -*- c-basic-offset: 2 -*-
+/*
+ * This file is part of the KDE libraries
+ * Copyright (C) 2000 Harri Porten (porten@kde.org)
+ * Copyright (C) 2003 Apple Computer, Inc.
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _KJS_DOM_H_
+#define _KJS_DOM_H_
+
+#include "dom/dom_node.h"
+#include "dom/dom_doc.h"
+#include "dom/dom_element.h"
+#include "dom/dom_xml.h"
+
+#include "ecma/kjs_binding.h"
+
+
+namespace KJS {
+
+ class DOMNode : public DOMObject {
+ public:
+ // Build a DOMNode
+ DOMNode(ExecState *exec, const DOM::Node& n);
+ // Constructor for inherited classes
+ DOMNode(const Object& proto, const DOM::Node& n);
+ ~DOMNode();
+ virtual bool toBoolean(ExecState *) const;
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+
+ virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
+ void putValueProperty(ExecState *exec, int token, const Value& value, int attr);
+ virtual DOM::Node toNode() const { return node; }
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+
+ virtual Value toPrimitive(ExecState *exec, Type preferred = UndefinedType) const;
+ virtual UString toString(ExecState *exec) const;
+ void setListener(ExecState *exec, int eventId, const Value& func) const;
+ Value getListener(int eventId) const;
+ virtual void pushEventHandlerScope(ExecState *exec, ScopeChain &scope) const;
+
+ enum { NodeName, NodeValue, NodeType, ParentNode, ParentElement,
+ ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling, Item,
+ Attributes, NamespaceURI, Prefix, LocalName, OwnerDocument, InsertBefore,
+ ReplaceChild, RemoveChild, AppendChild, HasAttributes, HasChildNodes,
+ CloneNode, Normalize, IsSupported, AddEventListener, RemoveEventListener,
+ DispatchEvent, Contains, InsertAdjacentHTML,
+ OnAbort, OnBlur, OnChange, OnClick, OnDblClick, OnDragDrop, OnError,
+ OnFocus, OnKeyDown, OnKeyPress, OnKeyUp, OnLoad, OnMouseDown,
+ OnMouseMove, OnMouseOut, OnMouseOver, OnMouseUp, OnMove, OnReset,
+ OnResize, OnSelect, OnSubmit, OnUnload,
+ OffsetLeft, OffsetTop, OffsetWidth, OffsetHeight, OffsetParent,
+ ClientWidth, ClientHeight, ScrollLeft, ScrollTop,
+ ScrollWidth, ScrollHeight, SourceIndex, TextContent };
+
+ protected:
+ DOM::Node node;
+ };
+
+ DEFINE_CONSTANT_TABLE(DOMNodeConstants)
+ KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE(DOMNodeProto, DOMNodeConstants)
+ DEFINE_PSEUDO_CONSTRUCTOR(NodeConstructor)
+
+ class DOMNodeList : public DOMObject {
+ public:
+ DOMNodeList(ExecState *, const DOM::NodeList& l);
+ ~DOMNodeList();
+ virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ virtual Value call(ExecState *exec, Object &thisObj, const List&args);
+ virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
+ virtual bool implementsCall() const { return true; }
+ virtual ReferenceList propList(ExecState *exec, bool recursive);
+
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ virtual bool toBoolean(ExecState *) const { return true; }
+ static const ClassInfo info;
+ DOM::NodeList nodeList() const { return list; }
+ enum { Item, NamedItem };
+ private:
+ DOM::NodeList list;
+ };
+
+ class DOMDocument : public DOMNode {
+ public:
+ // Build a DOMDocument
+ DOMDocument(ExecState *exec, const DOM::Document& d);
+ // Constructor for inherited classes
+ DOMDocument(const Object& proto, const DOM::Document& d);
+ virtual ~DOMDocument();
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+ virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
+ void putValueProperty(ExecState *exec, int token, const Value& value, int attr);
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { DocType, Implementation, DocumentElement, CharacterSet,
+ // Functions
+ CreateElement, CreateDocumentFragment, CreateTextNode, CreateComment,
+ CreateCDATASection, CreateProcessingInstruction, CreateAttribute,
+ CreateEntityReference, GetElementsByTagName, ImportNode, CreateElementNS,
+ CreateAttributeNS, GetElementsByTagNameNS, GetElementById,
+ CreateRange, CreateNodeIterator, CreateTreeWalker, DefaultView,
+ CreateEvent, StyleSheets, GetOverrideStyle, Abort, Load, LoadXML,
+ PreferredStylesheetSet, SelectedStylesheetSet, ReadyState, Async };
+ };
+
+ KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE(DOMDocumentProto, DOMNodeProto)
+
+ DEFINE_PSEUDO_CONSTRUCTOR(DocumentPseudoCtor)
+
+ class DOMAttr : public DOMNode {
+ public:
+ DOMAttr(ExecState *exec, const DOM::Attr& a) : DOMNode(exec, a) { }
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
+ Value getValueProperty(ExecState *exec, int token) const;
+ void putValueProperty(ExecState *exec, int token, const Value& value, int attr);
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { Name, Specified, ValueProperty, OwnerElement };
+ };
+
+ class DOMElement : public DOMNode {
+ public:
+ // Build a DOMElement
+ DOMElement(ExecState *exec, const DOM::Element& e);
+ // Constructor for inherited classes
+ DOMElement(const Object& proto, const DOM::Element& e);
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { TagName, Style,
+ GetAttribute, SetAttribute, RemoveAttribute, GetAttributeNode,
+ SetAttributeNode, RemoveAttributeNode, GetElementsByTagName,
+ GetAttributeNS, SetAttributeNS, RemoveAttributeNS, GetAttributeNodeNS,
+ SetAttributeNodeNS, GetElementsByTagNameNS, HasAttribute, HasAttributeNS };
+ };
+
+ KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE(DOMElementProto, DOMNodeProto)
+ DEFINE_PSEUDO_CONSTRUCTOR(ElementPseudoCtor)
+
+ class DOMDOMImplementation : public DOMObject {
+ public:
+ // Build a DOMDOMImplementation
+ DOMDOMImplementation(ExecState *, const DOM::DOMImplementation& i);
+ ~DOMDOMImplementation();
+ // no put - all functions
+ virtual const ClassInfo* classInfo() const { return &info; }
+ virtual bool toBoolean(ExecState *) const { return true; }
+ static const ClassInfo info;
+ enum { HasFeature, CreateDocumentType, CreateDocument, CreateCSSStyleSheet, CreateHTMLDocument };
+ DOM::DOMImplementation toImplementation() const { return implementation; }
+ private:
+ DOM::DOMImplementation implementation;
+ };
+
+ class DOMDocumentType : public DOMNode {
+ public:
+ // Build a DOMDocumentType
+ DOMDocumentType(ExecState *exec, const DOM::DocumentType& dt);
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { Name, Entities, Notations, PublicId, SystemId, InternalSubset };
+ };
+
+ class DOMNamedNodeMap : public DOMObject {
+ public:
+ DOMNamedNodeMap(ExecState *, const DOM::NamedNodeMap& m);
+ ~DOMNamedNodeMap();
+ virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ virtual bool toBoolean(ExecState *) const { return true; }
+ static const ClassInfo info;
+ enum { GetNamedItem, SetNamedItem, RemoveNamedItem, Item, Length,
+ GetNamedItemNS, SetNamedItemNS, RemoveNamedItemNS };
+ DOM::NamedNodeMap toMap() const { return map; }
+ private:
+ DOM::NamedNodeMap map;
+ };
+
+ class DOMProcessingInstruction : public DOMNode {
+ public:
+ DOMProcessingInstruction(ExecState *exec, const DOM::ProcessingInstruction& pi) : DOMNode(exec, pi) { }
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+ virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { Target, Data, Sheet };
+ };
+
+ class DOMNotation : public DOMNode {
+ public:
+ DOMNotation(ExecState *exec, const DOM::Notation& n) : DOMNode(exec, n) { }
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { PublicId, SystemId };
+ };
+
+ class DOMEntity : public DOMNode {
+ public:
+ DOMEntity(ExecState *exec, const DOM::Entity& e) : DOMNode(exec, e) { }
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ enum { PublicId, SystemId, NotationName };
+ };
+
+ // Constructor for DOMException - constructor stuff not implemented yet
+ class DOMExceptionConstructor : public DOMObject {
+ public:
+ DOMExceptionConstructor(ExecState *);
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *exec, int token) const;
+ // no put - all read-only
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ };
+
+ bool checkNodeSecurity(ExecState *exec, const DOM::Node& n);
+ KDE_EXPORT Value getDOMNode(ExecState *exec, const DOM::Node& n);
+ Value getDOMNamedNodeMap(ExecState *exec, const DOM::NamedNodeMap& m);
+ Value getDOMNodeList(ExecState *exec, const DOM::NodeList& l);
+ Value getDOMDOMImplementation(ExecState *exec, const DOM::DOMImplementation& i);
+ Object getDOMExceptionConstructor(ExecState *exec);
+
+ // Internal class, used for the collection return by e.g. document.forms.myinput
+ // when multiple nodes have the same name.
+ class DOMNamedNodesCollection : public DOMObject {
+ public:
+ DOMNamedNodesCollection(ExecState *exec, const QValueList<DOM::Node>& nodes );
+ virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ const QValueList<DOM::Node>& nodes() const { return m_nodes; }
+ enum { Length };
+ private:
+ QValueList<DOM::Node> m_nodes;
+ };
+
+ class DOMCharacterData : public DOMNode {
+ public:
+ // Build a DOMCharacterData
+ DOMCharacterData(ExecState *exec, const DOM::CharacterData& d);
+ // Constructor for inherited classes
+ DOMCharacterData(const Object& proto, const DOM::CharacterData& d);
+ virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *, int token) const;
+ virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ DOM::CharacterData toData() const { return static_cast<DOM::CharacterData>(node); }
+ enum { Data, Length,
+ SubstringData, AppendData, InsertData, DeleteData, ReplaceData };
+ };
+
+ class DOMText : public DOMCharacterData {
+ public:
+ DOMText(ExecState *exec, const DOM::Text& t);
+ virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
+ Value getValueProperty(ExecState *, int token) const;
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+ DOM::Text toText() const { return static_cast<DOM::Text>(node); }
+ enum { SplitText };
+ };
+
+} // namespace
+
+#endif