You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/tdehtml/ecma/kjs_dom.h

300 lines
13 KiB

// -*- 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 TQValueList<DOM::Node>& nodes );
virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
virtual const ClassInfo* classInfo() const { return &info; }
static const ClassInfo info;
const TQValueList<DOM::Node>& nodes() const { return m_nodes; }
enum { Length };
private:
TQValueList<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