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