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,
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,
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   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   private:
00264     QValueList<DOM::Node> m_nodes;
00265   };
00266 
00267   class DOMCharacterData : public DOMNode {
00268   public:
00269     
00270     DOMCharacterData(ExecState *exec, const DOM::CharacterData& d);
00271     
00272     DOMCharacterData(const Object& proto, const DOM::CharacterData& d);
00273     virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
00274     Value getValueProperty(ExecState *, int token) const;
00275     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00276     virtual const ClassInfo* classInfo() const { return &info; }
00277     static const ClassInfo info;
00278     DOM::CharacterData toData() const { return static_cast<DOM::CharacterData>(node); }
00279     enum { Data, Length,
00280            SubstringData, AppendData, InsertData, DeleteData, ReplaceData };
00281   };
00282 
00283   class DOMText : public DOMCharacterData {
00284   public:
00285     DOMText(ExecState *exec, const DOM::Text& t);
00286     virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
00287     Value getValueProperty(ExecState *, int token) const;
00288     virtual const ClassInfo* classInfo() const { return &info; }
00289     static const ClassInfo info;
00290     DOM::Text toText() const { return static_cast<DOM::Text>(node); }
00291     enum { SplitText };
00292   };
00293 
00294 } 
00295 
00296 #endif