00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef _KJS_HTML_H_
00023
#define _KJS_HTML_H_
00024
00025
#include "dom/html_document.h"
00026
#include "dom/html_base.h"
00027
#include "dom/html_misc.h"
00028
#include "dom/html_form.h"
00029
#include "misc/loader_client.h"
00030
00031
#include "ecma/kjs_binding.h"
00032
#include "ecma/kjs_dom.h"
00033
#include "xml/dom_nodeimpl.h"
00034
00035
namespace KJS {
00036
00037
class HTMLElement;
00038
00039
class HTMLDocument :
public DOMDocument {
00040
public:
00041
HTMLDocument(ExecState *exec,
const DOM::HTMLDocument& d);
00042
virtual Value tryGet(ExecState *exec,
const Identifier &propertyName)
const;
00043
virtual void tryPut(ExecState *exec,
const Identifier &propertyName,
const Value& value,
int attr = None);
00044
void putValueProperty(ExecState *exec,
int token,
const Value& value,
int );
00045
virtual bool hasProperty(ExecState *exec,
const Identifier &propertyName)
const;
00046
virtual const ClassInfo* classInfo()
const {
return &info; }
00047
static const ClassInfo info;
00048
enum { Title, Referrer, Domain, URL, Body, Location, Cookie,
00049 Images, Applets, Links, Forms, Layers, Anchors, Scripts, All,
Clear, Open, Close,
00050 Write, WriteLn, GetElementsByName, GetSelection, CaptureEvents, ReleaseEvents,
00051 BgColor, FgColor, AlinkColor, LinkColor, VlinkColor, LastModified,
00052 Height, Width, Dir, Frames, CompatMode };
00053
DOM::Document toDocument()
const {
return static_cast<DOM::Document>( node ); }
00054 };
00055
00056
class HTMLElement :
public DOMElement {
00057
public:
00058
HTMLElement(ExecState *exec,
const DOM::HTMLElement& e) : DOMElement(exec, e) { }
00059
virtual Value tryGet(ExecState *exec,
const Identifier &propertyName)
const;
00060 Value getValueProperty(ExecState *exec,
int token)
const;
00061
virtual void tryPut(ExecState *exec,
const Identifier &propertyName,
const Value& value,
int attr = None);
00062
void putValueProperty(ExecState *exec,
int token,
const Value& value,
int);
00063
virtual bool hasProperty(ExecState *exec,
const Identifier &propertyName)
const;
00064
virtual UString toString(ExecState *exec)
const;
00065
virtual void pushEventHandlerScope(ExecState *exec, ScopeChain &scope)
const;
00066
virtual const ClassInfo* classInfo() const;
00067 static const ClassInfo info;
00068
00069 static const ClassInfo html_info, head_info, link_info, title_info,
00070 meta_info, base_info, isIndex_info, style_info, body_info, form_info,
00071 select_info, optGroup_info, option_info, input_info, textArea_info,
00072 button_info, label_info, fieldSet_info, legend_info, ul_info, ol_info,
00073 dl_info, dir_info, menu_info, li_info, div_info, p_info, heading_info,
00074 blockQuote_info, q_info, pre_info, br_info, baseFont_info, font_info,
00075 hr_info, mod_info, a_info, img_info, object_info, param_info,
00076 applet_info, map_info, area_info, script_info, table_info,
00077 caption_info, col_info, tablesection_info, tr_info,
00078 tablecell_info, frameSet_info, frame_info, iFrame_info, marquee_info, layer_info;
00079
00080 enum { HtmlVersion, HeadProfile, LinkHref, LinkRel, LinkMedia,
00081 LinkCharset, LinkDisabled, LinkHrefLang, LinkRev, LinkTarget, LinkType,
00082 LinkSheet, TitleText, MetaName, MetaHttpEquiv, MetaContent, MetaScheme,
00083 BaseHref, BaseTarget, IsIndexForm, IsIndexPrompt, StyleDisabled,
00084
StyleSheet, StyleType, StyleMedia, BodyBackground, BodyVLink, BodyText,
00085 BodyLink, BodyALink, BodyBgColor, BodyScrollLeft, BodyScrollTop,
00086 BodyScrollHeight, BodyScrollWidth, BodyOnLoad,
00087 FormAction, FormEncType, FormElements, FormLength, FormAcceptCharset,
00088 FormReset, FormTarget, FormName, FormMethod, FormSubmit, SelectAdd,
00089 SelectTabIndex, SelectValue, SelectSelectedIndex, SelectLength,
00090 SelectRemove, SelectForm, SelectBlur, SelectType, SelectOptions,
00091 SelectDisabled, SelectMultiple, SelectName, SelectSize, SelectFocus,
00092 OptGroupDisabled, OptGroupLabel, OptionIndex, OptionSelected,
00093 OptionForm, OptionText, OptionDefaultSelected, OptionDisabled,
00094 OptionLabel, OptionValue, InputBlur, InputReadOnly, InputAccept,
00095 InputSize, InputDefaultValue, InputTabIndex, InputValue, InputType,
00096 InputFocus, InputMaxLength, InputDefaultChecked, InputDisabled,
00097 InputChecked, InputForm, InputAccessKey, InputAlign, InputAlt,
00098 InputName, InputSrc, InputUseMap, InputSelect, InputClick,
00099 TextAreaAccessKey, TextAreaName, TextAreaDefaultValue, TextAreaSelect,
00100 TextAreaCols, TextAreaDisabled, TextAreaForm, TextAreaType,
00101 TextAreaTabIndex, TextAreaReadOnly, TextAreaRows, TextAreaValue,
00102 TextAreaBlur, TextAreaFocus, ButtonForm, ButtonTabIndex, ButtonName,
00103 ButtonDisabled, ButtonAccessKey, ButtonType, ButtonValue, LabelHtmlFor,
00104 LabelForm, LabelAccessKey, FieldSetForm, LegendForm, LegendAccessKey,
00105 LegendAlign, UListType, UListCompact, OListStart, OListCompact,
00106 OListType, DListCompact, DirectoryCompact, MenuCompact, LIType,
00107 LIValue, DivAlign, ParagraphAlign, HeadingAlign, BlockQuoteCite,
00108 QuoteCite, PreWidth, BRClear, BaseFontColor, BaseFontSize,
00109 BaseFontFace, FontColor, FontSize, FontFace, HRWidth, HRNoShade,
00110 HRAlign, HRSize, ModCite, ModDateTime, AnchorShape, AnchorRel,
00111 AnchorAccessKey, AnchorCoords, AnchorHref, AnchorProtocol, AnchorHost,
00112 AnchorCharset, AnchorHrefLang, AnchorHostname, AnchorType, AnchorFocus,
00113 AnchorPort, AnchorPathName, AnchorHash, AnchorSearch, AnchorName,
00114 AnchorRev, AnchorTabIndex, AnchorTarget, AnchorText, AnchorBlur,
00115 ImageName, ImageAlign, ImageHspace, ImageVspace, ImageUseMap, ImageAlt,
00116 ImageLowSrc, ImageWidth, ImageIsMap, ImageBorder, ImageHeight,
00117 ImageLongDesc, ImageSrc, ImageX, ImageY, ImageComplete, ObjectHspace, ObjectHeight, ObjectAlign,
00118 ObjectBorder, ObjectCode, ObjectType, ObjectVspace, ObjectArchive,
00119 ObjectDeclare, ObjectForm, ObjectCodeBase, ObjectCodeType, ObjectData,
00120 ObjectName, ObjectStandby, ObjectTabIndex, ObjectUseMap, ObjectWidth, ObjectContentDocument,
00121 ParamName, ParamType, ParamValueType, ParamValue, AppletArchive,
00122 AppletAlt, AppletCode, AppletWidth, AppletAlign, AppletCodeBase,
00123 AppletName, AppletHeight, AppletHspace, AppletObject, AppletVspace,
00124 MapAreas, MapName, AreaHash, AreaHref, AreaTarget, AreaPort, AreaShape,
00125 AreaCoords, AreaAlt, AreaAccessKey, AreaNoHref, AreaHost, AreaProtocol,
00126 AreaHostName, AreaPathName, AreaSearch, AreaTabIndex, ScriptEvent,
00127 ScriptType, ScriptHtmlFor, ScriptText, ScriptSrc, ScriptCharset,
00128 ScriptDefer, TableSummary, TableTBodies, TableTHead, TableCellPadding,
00129 TableDeleteCaption, TableCreateCaption, TableCaption, TableWidth,
00130 TableCreateTFoot, TableAlign, TableTFoot, TableDeleteRow,
00131 TableCellSpacing, TableRows, TableBgColor, TableBorder, TableFrame,
00132 TableRules, TableCreateTHead, TableDeleteTHead, TableDeleteTFoot,
00133 TableInsertRow, TableCaptionAlign, TableColCh, TableColChOff,
00134 TableColAlign, TableColSpan, TableColVAlign, TableColWidth,
00135 TableSectionCh, TableSectionDeleteRow, TableSectionChOff,
00136 TableSectionRows, TableSectionAlign, TableSectionVAlign,
00137 TableSectionInsertRow, TableRowSectionRowIndex, TableRowRowIndex,
00138 TableRowChOff, TableRowCells, TableRowVAlign, TableRowCh,
00139 TableRowAlign, TableRowBgColor, TableRowDeleteCell, TableRowInsertCell,
00140 TableCellColSpan, TableCellNoWrap, TableCellAbbr, TableCellHeight,
00141 TableCellWidth, TableCellCellIndex, TableCellChOff, TableCellBgColor,
00142 TableCellCh, TableCellVAlign, TableCellRowSpan, TableCellHeaders,
00143 TableCellAlign, TableCellAxis, TableCellScope, FrameSetCols,
00144 FrameSetRows, FrameSrc, FrameLocation, FrameFrameBorder, FrameScrolling,
00145 FrameMarginWidth, FrameLongDesc, FrameMarginHeight, FrameName, FrameContentDocument,
00146 FrameNoResize, IFrameLongDesc, IFrameAlign,
00147 IFrameFrameBorder, IFrameSrc, IFrameName, IFrameHeight,
00148 IFrameMarginHeight, IFrameMarginWidth, IFrameScrolling, IFrameWidth, IFrameContentDocument,
00149 MarqueeStart, MarqueeStop,
00150 LayerTop, LayerLeft, LayerVisibility, LayerBgColor, LayerClip, LayerDocument, LayerLayers,
00151 ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
00152 ElementClassName, ElementInnerText, ElementDocument, ElementChildren, ElementAll };
00153
00154
DOM::HTMLElement toElement()
const {
return static_cast<DOM::HTMLElement>(node); }
00155 };
00156
00157
00158
class HTMLElementFunction :
public DOMFunction {
00159
public:
00160 HTMLElementFunction(ExecState *exec,
int i,
int len);
00161
virtual Value tryCall(ExecState *exec, Object &thisObj,
const List&args);
00162
private:
00163
int id;
00164 };
00165
00166
class HTMLCollection :
public DOMObject {
00167
public:
00168
HTMLCollection(ExecState *exec,
const DOM::HTMLCollection& c);
00169 ~
HTMLCollection();
00170
virtual Value tryGet(ExecState *exec,
const Identifier &propertyName)
const;
00171
virtual Value call(ExecState *exec, Object &thisObj,
const List&args);
00172
virtual Value tryCall(ExecState *exec, Object &thisObj,
const List&args);
00173
virtual bool implementsCall()
const {
return true; }
00174
virtual bool toBoolean(ExecState *) const;
00175 virtual Type type() const;
00176 virtual
bool hasProperty(ExecState *exec, const Identifier &p) const;
00177 enum { Item, NamedItem, Tags };
00178 Value getNamedItems(ExecState *exec,
const Identifier &propertyName)
const;
00179
virtual const ClassInfo* classInfo()
const {
return &info; }
00180
static const ClassInfo info;
00181
DOM::HTMLCollection toCollection()
const {
return collection; }
00182
virtual void hide() { hidden =
true; }
00183
protected:
00184
DOM::HTMLCollection collection;
00185
bool hidden;
00186 };
00187
00188
class HTMLSelectCollection :
public HTMLCollection {
00189
public:
00190 HTMLSelectCollection(ExecState *exec,
const DOM::HTMLCollection& c,
const DOM::HTMLSelectElement& e)
00191 :
HTMLCollection(exec, c), element(e) { }
00192
virtual Value tryGet(ExecState *exec,
const Identifier &propertyName)
const;
00193
virtual void tryPut(ExecState *exec,
const Identifier &propertyName,
const Value& value,
int attr = None);
00194
private:
00195
DOM::HTMLSelectElement element;
00196 };
00197
00199
00200
class OptionConstructorImp :
public ObjectImp {
00201
public:
00202 OptionConstructorImp(ExecState *exec,
const DOM::Document &d);
00203
virtual bool implementsConstruct() const;
00204 virtual Object construct(ExecState *exec, const List &args);
00205 private:
00206 DOM::
Document doc;
00207 };
00208
00210
00211 class ImageConstructorImp : public ObjectImp {
00212
public:
00213 ImageConstructorImp(ExecState *exec,
const DOM::Document &d);
00214
virtual bool implementsConstruct() const;
00215 virtual Object construct(ExecState *exec, const List &args);
00216 private:
00217 DOM::
Document doc;
00218 };
00219
00220 class Image : public
DOMObject, public khtml::CachedObjectClient {
00221
public:
00222 Image(ExecState*,
const DOM::Document &d);
00223 ~Image();
00224
virtual Value tryGet(ExecState *exec,
const Identifier &propertyName)
const;
00225 Value getValueProperty(ExecState *exec,
int token)
const;
00226
virtual void tryPut(ExecState *exec,
const Identifier &propertyName,
const Value& value,
int attr = None);
00227
void putValueProperty(ExecState *exec,
int token,
const Value& value,
int);
00228
virtual bool toBoolean(ExecState *)
const {
return true; }
00229
virtual void notifyFinished(khtml::CachedObject * finishedObj);
00230
virtual const ClassInfo* classInfo()
const {
return &info; }
00231
static const ClassInfo info;
00232
enum { Src, Complete, Width, Height, OnLoad };
00233
private:
00234 UString src;
00235
DOM::Document doc;
00236 khtml::CachedImage* img;
00237 JSEventListener *m_onLoadListener;
00238 };
00239
00240 Value getHTMLCollection(ExecState *exec,
const DOM::HTMLCollection& c,
bool hide=
false);
00241 Value getSelectHTMLCollection(ExecState *exec,
const DOM::HTMLCollection& c,
const DOM::HTMLSelectElement& e);
00242
00243
00244
00245
00246
00247
class NamedTagLengthDeterminer {
00248
public:
00249
struct TagLength {
00250 DOM::NodeImpl::Id
id;
unsigned long length; DOM::NodeImpl *last;
00251 };
00252 NamedTagLengthDeterminer(
const DOM::DOMString& n, TagLength *t,
int l)
00253 :
name(n), tags(t), nrTags(l) {}
00254
void operator () (DOM::NodeImpl *start);
00255
private:
00256
const DOM::DOMString&
name;
00257 TagLength *tags;
00258
int nrTags;
00259 };
00260
00261
00262 }
00263
00264
#endif