00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _KJS_DOM_H_
00023 #define _KJS_DOM_H_
00024
00025 #include "dom/dom_node.h"
00026 #include "dom/dom_doc.h"
00027 #include "dom/dom_element.h"
00028 #include "dom/dom_xml.h"
00029
00030 #include "ecma/kjs_binding.h"
00031
00032 namespace KJS {
00033
00034 class DOMNode : public DOMObject {
00035 public:
00036
00037 DOMNode(ExecState *exec, const DOM::Node& n);
00038
00039 DOMNode(const Object& proto, const DOM::Node& n);
00040 ~DOMNode();
00041 virtual bool toBoolean(ExecState *) const;
00042 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00043 Value getValueProperty(ExecState *exec, int token) const;
00044
00045 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00046 void putValueProperty(ExecState *exec, int token, const Value& value, int attr);
00047 virtual DOM::Node toNode() const { return node; }
00048 virtual const ClassInfo* classInfo() const { return &info; }
00049 static const ClassInfo info;
00050
00051 virtual Value toPrimitive(ExecState *exec, Type preferred = UndefinedType) const;
00052 virtual UString toString(ExecState *exec) const;
00053 void setListener(ExecState *exec, int eventId, const Value& func) const;
00054 Value getListener(int eventId) const;
00055 virtual void pushEventHandlerScope(ExecState *exec, ScopeChain &scope) const;
00056
00057 enum { NodeName, NodeValue, NodeType, ParentNode, ParentElement,
00058 ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling, Item,
00059 Attributes, NamespaceURI, Prefix, LocalName, OwnerDocument, InsertBefore,
00060 ReplaceChild, RemoveChild, AppendChild, HasAttributes, HasChildNodes,
00061 CloneNode, Normalize, IsSupported, AddEventListener, RemoveEventListener,
00062 DispatchEvent, Contains, InsertAdjacentHTML,
00063 OnAbort, OnBlur, OnChange, OnClick, OnDblClick, OnDragDrop, OnError,
00064 OnFocus, OnKeyDown, OnKeyPress, OnKeyUp, OnLoad, OnMouseDown,
00065 OnMouseMove, OnMouseOut, OnMouseOver, OnMouseUp, OnMove, OnReset,
00066 OnResize, OnSelect, OnSubmit, OnUnload,
00067 OffsetLeft, OffsetTop, OffsetWidth, OffsetHeight, OffsetParent,
00068 ClientWidth, ClientHeight, ScrollLeft, ScrollTop,
00069 ScrollWidth, ScrollHeight, SourceIndex };
00070
00071 protected:
00072 DOM::Node node;
00073 };
00074
00075 class DOMNodeList : public DOMObject {
00076 public:
00077 DOMNodeList(ExecState *, const DOM::NodeList& l);
00078 ~DOMNodeList();
00079 virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00080 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00081 virtual Value call(ExecState *exec, Object &thisObj, const List&args);
00082 virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
00083 virtual bool implementsCall() const { return true; }
00084
00085 virtual const ClassInfo* classInfo() const { return &info; }
00086 virtual bool toBoolean(ExecState *) const { return true; }
00087 static const ClassInfo info;
00088 DOM::NodeList nodeList() const { return list; }
00089 enum { Item, NamedItem };
00090 private:
00091 DOM::NodeList list;
00092 };
00093
00094 class DOMDocument : public DOMNode {
00095 public:
00096
00097 DOMDocument(ExecState *exec, const DOM::Document& d);
00098
00099 DOMDocument(const Object& proto, const DOM::Document& d);
00100 virtual ~DOMDocument();
00101 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00102 Value getValueProperty(ExecState *exec, int token) const;
00103 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00104 void putValueProperty(ExecState *exec, int token, const Value& value, int attr);
00105 virtual const ClassInfo* classInfo() const { return &info; }
00106 static const ClassInfo info;
00107 enum { DocType, Implementation, DocumentElement,
00108
00109 CreateElement, CreateDocumentFragment, CreateTextNode, CreateComment,
00110 CreateCDATASection, CreateProcessingInstruction, CreateAttribute,
00111 CreateEntityReference, GetElementsByTagName, ImportNode, CreateElementNS,
00112 CreateAttributeNS, GetElementsByTagNameNS, GetElementById,
00113 CreateRange, CreateNodeIterator, CreateTreeWalker, DefaultView,
00114 CreateEvent, StyleSheets, GetOverrideStyle, Abort, Load, LoadXML,
00115 PreferredStylesheetSet, SelectedStylesheetSet, ReadyState, Async };
00116 };
00117
00118 class DOMAttr : public DOMNode {
00119 public:
00120 DOMAttr(ExecState *exec, const DOM::Attr& a) : DOMNode(exec, a) { }
00121 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00122 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00123 Value getValueProperty(ExecState *exec, int token) const;
00124 void putValueProperty(ExecState *exec, int token, const Value& value, int attr);
00125 virtual const ClassInfo* classInfo() const { return &info; }
00126 static const ClassInfo info;
00127 enum { Name, Specified, ValueProperty, OwnerElement };
00128 };
00129
00130 class DOMElement : public DOMNode {
00131 public:
00132
00133 DOMElement(ExecState *exec, const DOM::Element& e);
00134
00135 DOMElement(const Object& proto, const DOM::Element& e);
00136 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00137
00138 virtual const ClassInfo* classInfo() const { return &info; }
00139 static const ClassInfo info;
00140 enum { TagName, Style,
00141 GetAttribute, SetAttribute, RemoveAttribute, GetAttributeNode,
00142 SetAttributeNode, RemoveAttributeNode, GetElementsByTagName,
00143 GetAttributeNS, SetAttributeNS, RemoveAttributeNS, GetAttributeNodeNS,
00144 SetAttributeNodeNS, GetElementsByTagNameNS, HasAttribute, HasAttributeNS };
00145 };
00146
00147 class DOMDOMImplementation : public DOMObject {
00148 public:
00149
00150 DOMDOMImplementation(ExecState *, const DOM::DOMImplementation& i);
00151 ~DOMDOMImplementation();
00152
00153 virtual const ClassInfo* classInfo() const { return &info; }
00154 virtual bool toBoolean(ExecState *) const { return true; }
00155 static const ClassInfo info;
00156 enum { HasFeature, CreateDocumentType, CreateDocument, CreateCSSStyleSheet, CreateHTMLDocument };
00157 DOM::DOMImplementation toImplementation() const { return implementation; }
00158 private:
00159 DOM::DOMImplementation implementation;
00160 };
00161
00162 class DOMDocumentType : public DOMNode {
00163 public:
00164
00165 DOMDocumentType(ExecState *exec, const DOM::DocumentType& dt);
00166 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00167 Value getValueProperty(ExecState *exec, int token) const;
00168
00169 virtual const ClassInfo* classInfo() const { return &info; }
00170 static const ClassInfo info;
00171 enum { Name, Entities, Notations, PublicId, SystemId, InternalSubset };
00172 };
00173
00174 class DOMNamedNodeMap : public DOMObject {
00175 public:
00176 DOMNamedNodeMap(ExecState *, const DOM::NamedNodeMap& m);
00177 ~DOMNamedNodeMap();
00178 virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00179 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00180
00181 virtual const ClassInfo* classInfo() const { return &info; }
00182 virtual bool toBoolean(ExecState *) const { return true; }
00183 static const ClassInfo info;
00184 enum { GetNamedItem, SetNamedItem, RemoveNamedItem, Item, Length,
00185 GetNamedItemNS, SetNamedItemNS, RemoveNamedItemNS };
00186 DOM::NamedNodeMap toMap() const { return map; }
00187 private:
00188 DOM::NamedNodeMap map;
00189 };
00190
00191 class DOMProcessingInstruction : public DOMNode {
00192 public:
00193 DOMProcessingInstruction(ExecState *exec, const DOM::ProcessingInstruction& pi) : DOMNode(exec, pi) { }
00194 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00195 Value getValueProperty(ExecState *exec, int token) const;
00196 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00197 virtual const ClassInfo* classInfo() const { return &info; }
00198 static const ClassInfo info;
00199 enum { Target, Data, Sheet };
00200 };
00201
00202 class DOMNotation : public DOMNode {
00203 public:
00204 DOMNotation(ExecState *exec, const DOM::Notation& n) : DOMNode(exec, n) { }
00205 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00206 Value getValueProperty(ExecState *exec, int token) const;
00207
00208 virtual const ClassInfo* classInfo() const { return &info; }
00209 static const ClassInfo info;
00210 enum { PublicId, SystemId };
00211 };
00212
00213 class DOMEntity : public DOMNode {
00214 public:
00215 DOMEntity(ExecState *exec, const DOM::Entity& e) : DOMNode(exec, e) { }
00216 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00217 Value getValueProperty(ExecState *exec, int token) const;
00218
00219 virtual const ClassInfo* classInfo() const { return &info; }
00220 static const ClassInfo info;
00221 enum { PublicId, SystemId, NotationName };
00222 };
00223
00224
00225 class NodeConstructor : public DOMObject {
00226 public:
00227 NodeConstructor(ExecState *);
00228 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00229 Value getValueProperty(ExecState *exec, int token) const;
00230
00231 virtual const ClassInfo* classInfo() const { return &info; }
00232 static const ClassInfo info;
00233 };
00234
00235
00236 class DOMExceptionConstructor : public DOMObject {
00237 public:
00238 DOMExceptionConstructor(ExecState *);
00239 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00240 Value getValueProperty(ExecState *exec, int token) const;
00241
00242 virtual const ClassInfo* classInfo() const { return &info; }
00243 static const ClassInfo info;
00244 };
00245
00246 bool checkNodeSecurity(ExecState *exec, const DOM::Node& n);
00247 KDE_EXPORT Value getDOMNode(ExecState *exec, const DOM::Node& n);
00248 Value getDOMNamedNodeMap(ExecState *exec, const DOM::NamedNodeMap& m);
00249 Value getDOMNodeList(ExecState *exec, const DOM::NodeList& l);
00250 Value getDOMDOMImplementation(ExecState *exec, const DOM::DOMImplementation& i);
00251 Object getNodeConstructor(ExecState *exec);
00252 Object getDOMExceptionConstructor(ExecState *exec);
00253
00254
00255
00256 class DOMNamedNodesCollection : public DOMObject {
00257 public:
00258 DOMNamedNodesCollection(ExecState *exec, const QValueList<DOM::Node>& nodes );
00259 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00260 virtual const ClassInfo* classInfo() const { return &info; }
00261 static const ClassInfo info;
00262 const QValueList<DOM::Node>& nodes() const { return m_nodes; }
00263 enum { Length };
00264 private:
00265 QValueList<DOM::Node> m_nodes;
00266 };
00267
00268 class DOMCharacterData : public DOMNode {
00269 public:
00270
00271 DOMCharacterData(ExecState *exec, const DOM::CharacterData& d);
00272
00273 DOMCharacterData(const Object& proto, const DOM::CharacterData& d);
00274 virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
00275 Value getValueProperty(ExecState *, int token) const;
00276 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00277 virtual const ClassInfo* classInfo() const { return &info; }
00278 static const ClassInfo info;
00279 DOM::CharacterData toData() const { return static_cast<DOM::CharacterData>(node); }
00280 enum { Data, Length,
00281 SubstringData, AppendData, InsertData, DeleteData, ReplaceData };
00282 };
00283
00284 class DOMText : public DOMCharacterData {
00285 public:
00286 DOMText(ExecState *exec, const DOM::Text& t);
00287 virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
00288 Value getValueProperty(ExecState *, int token) const;
00289 virtual const ClassInfo* classInfo() const { return &info; }
00290 static const ClassInfo info;
00291 DOM::Text toText() const { return static_cast<DOM::Text>(node); }
00292 enum { SplitText };
00293 };
00294
00295 }
00296
00297 #endif