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, BodyScrollHeight, BodyScrollWidth,
00086 FormAction, FormEncType, FormElements, FormLength, FormAcceptCharset,
00087 FormReset, FormTarget, FormName, FormMethod, FormSubmit, SelectAdd,
00088 SelectTabIndex, SelectValue, SelectSelectedIndex, SelectLength,
00089 SelectRemove, SelectForm, SelectBlur, SelectType, SelectOptions,
00090 SelectDisabled, SelectMultiple, SelectName, SelectSize, SelectFocus,
00091 OptGroupDisabled, OptGroupLabel, OptionIndex, OptionSelected,
00092 OptionForm, OptionText, OptionDefaultSelected, OptionDisabled,
00093 OptionLabel, OptionValue, InputBlur, InputReadOnly, InputAccept,
00094 InputSize, InputDefaultValue, InputTabIndex, InputValue, InputType,
00095 InputFocus, InputMaxLength, InputDefaultChecked, InputDisabled,
00096 InputChecked, InputForm, InputAccessKey, InputAlign, InputAlt,
00097 InputName, InputSrc, InputUseMap, InputSelect, InputClick,
00098 TextAreaAccessKey, TextAreaName, TextAreaDefaultValue, TextAreaSelect,
00099 TextAreaCols, TextAreaDisabled, TextAreaForm, TextAreaType,
00100 TextAreaTabIndex, TextAreaReadOnly, TextAreaRows, TextAreaValue,
00101 TextAreaBlur, TextAreaFocus, ButtonForm, ButtonTabIndex, ButtonName,
00102 ButtonDisabled, ButtonAccessKey, ButtonType, ButtonValue, LabelHtmlFor,
00103 LabelForm, LabelAccessKey, FieldSetForm, LegendForm, LegendAccessKey,
00104 LegendAlign, UListType, UListCompact, OListStart, OListCompact,
00105 OListType, DListCompact, DirectoryCompact, MenuCompact, LIType,
00106 LIValue, DivAlign, ParagraphAlign, HeadingAlign, BlockQuoteCite,
00107 QuoteCite, PreWidth, BRClear, BaseFontColor, BaseFontSize,
00108 BaseFontFace, FontColor, FontSize, FontFace, HRWidth, HRNoShade,
00109 HRAlign, HRSize, ModCite, ModDateTime, AnchorShape, AnchorRel,
00110 AnchorAccessKey, AnchorCoords, AnchorHref, AnchorProtocol, AnchorHost,
00111 AnchorCharset, AnchorHrefLang, AnchorHostname, AnchorType, AnchorFocus,
00112 AnchorPort, AnchorPathName, AnchorHash, AnchorSearch, AnchorName,
00113 AnchorRev, AnchorTabIndex, AnchorTarget, AnchorText, AnchorBlur,
00114 ImageName, ImageAlign, ImageHspace, ImageVspace, ImageUseMap, ImageAlt,
00115 ImageLowSrc, ImageWidth, ImageIsMap, ImageBorder, ImageHeight,
00116 ImageLongDesc, ImageSrc, ImageX, ImageY, ImageComplete, ObjectHspace, ObjectHeight, ObjectAlign,
00117 ObjectBorder, ObjectCode, ObjectType, ObjectVspace, ObjectArchive,
00118 ObjectDeclare, ObjectForm, ObjectCodeBase, ObjectCodeType, ObjectData,
00119 ObjectName, ObjectStandby, ObjectTabIndex, ObjectUseMap, ObjectWidth, ObjectContentDocument,
00120 ParamName, ParamType, ParamValueType, ParamValue, AppletArchive,
00121 AppletAlt, AppletCode, AppletWidth, AppletAlign, AppletCodeBase,
00122 AppletName, AppletHeight, AppletHspace, AppletObject, AppletVspace,
00123 MapAreas, MapName, AreaHash, AreaHref, AreaTarget, AreaPort, AreaShape,
00124 AreaCoords, AreaAlt, AreaAccessKey, AreaNoHref, AreaHost, AreaProtocol,
00125 AreaHostName, AreaPathName, AreaSearch, AreaTabIndex, ScriptEvent,
00126 ScriptType, ScriptHtmlFor, ScriptText, ScriptSrc, ScriptCharset,
00127 ScriptDefer, TableSummary, TableTBodies, TableTHead, TableCellPadding,
00128 TableDeleteCaption, TableCreateCaption, TableCaption, TableWidth,
00129 TableCreateTFoot, TableAlign, TableTFoot, TableDeleteRow,
00130 TableCellSpacing, TableRows, TableBgColor, TableBorder, TableFrame,
00131 TableRules, TableCreateTHead, TableDeleteTHead, TableDeleteTFoot,
00132 TableInsertRow, TableCaptionAlign, TableColCh, TableColChOff,
00133 TableColAlign, TableColSpan, TableColVAlign, TableColWidth,
00134 TableSectionCh, TableSectionDeleteRow, TableSectionChOff,
00135 TableSectionRows, TableSectionAlign, TableSectionVAlign,
00136 TableSectionInsertRow, TableRowSectionRowIndex, TableRowRowIndex,
00137 TableRowChOff, TableRowCells, TableRowVAlign, TableRowCh,
00138 TableRowAlign, TableRowBgColor, TableRowDeleteCell, TableRowInsertCell,
00139 TableCellColSpan, TableCellNoWrap, TableCellAbbr, TableCellHeight,
00140 TableCellWidth, TableCellCellIndex, TableCellChOff, TableCellBgColor,
00141 TableCellCh, TableCellVAlign, TableCellRowSpan, TableCellHeaders,
00142 TableCellAlign, TableCellAxis, TableCellScope, FrameSetCols,
00143 FrameSetRows, FrameSrc, FrameLocation, FrameFrameBorder, FrameScrolling,
00144 FrameMarginWidth, FrameLongDesc, FrameMarginHeight, FrameName, FrameContentDocument,
00145 FrameNoResize, IFrameLongDesc, IFrameAlign,
00146 IFrameFrameBorder, IFrameSrc, IFrameName, IFrameHeight,
00147 IFrameMarginHeight, IFrameMarginWidth, IFrameScrolling, IFrameWidth, IFrameContentDocument,
00148 MarqueeStart, MarqueeStop,
00149 LayerTop, LayerLeft, LayerVisibility, LayerBgColor, LayerClip, LayerDocument, LayerLayers,
00150 ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
00151 ElementClassName, ElementInnerText, ElementDocument, ElementChildren, ElementAll };
00152
00153 DOM::HTMLElement toElement() const { return static_cast<DOM::HTMLElement>(node); }
00154 };
00155
00156
00157 class HTMLElementFunction : public DOMFunction {
00158 public:
00159 HTMLElementFunction(ExecState *exec, int i, int len);
00160 virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
00161 private:
00162 int id;
00163 };
00164
00165 class HTMLCollection : public DOMObject {
00166 public:
00167 HTMLCollection(ExecState *exec, const DOM::HTMLCollection& c);
00168 ~HTMLCollection();
00169 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00170 virtual Value call(ExecState *exec, Object &thisObj, const List&args);
00171 virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
00172 virtual bool implementsCall() const { return true; }
00173 virtual bool toBoolean(ExecState *) const;
00174 virtual Type type() const;
00175 virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00176 enum { Item, NamedItem, Tags };
00177 Value getNamedItems(ExecState *exec, const Identifier &propertyName) const;
00178 virtual const ClassInfo* classInfo() const { return &info; }
00179 static const ClassInfo info;
00180 DOM::HTMLCollection toCollection() const { return collection; }
00181 virtual void hide() { hidden = true; }
00182 protected:
00183 DOM::HTMLCollection collection;
00184 bool hidden;
00185 };
00186
00187 class HTMLSelectCollection : public HTMLCollection {
00188 public:
00189 HTMLSelectCollection(ExecState *exec, const DOM::HTMLCollection& c, const DOM::HTMLSelectElement& e)
00190 : HTMLCollection(exec, c), element(e) { }
00191 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00192 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00193 private:
00194 DOM::HTMLSelectElement element;
00195 };
00196
00198
00199 class OptionConstructorImp : public ObjectImp {
00200 public:
00201 OptionConstructorImp(ExecState *exec, const DOM::Document &d);
00202 virtual bool implementsConstruct() const;
00203 virtual Object construct(ExecState *exec, const List &args);
00204 private:
00205 DOM::Document doc;
00206 };
00207
00209
00210 class ImageConstructorImp : public ObjectImp {
00211 public:
00212 ImageConstructorImp(ExecState *exec, const DOM::Document &d);
00213 virtual bool implementsConstruct() const;
00214 virtual Object construct(ExecState *exec, const List &args);
00215 private:
00216 DOM::Document doc;
00217 };
00218
00219 class Image : public DOMObject, public khtml::CachedObjectClient {
00220 public:
00221 Image(ExecState*, const DOM::Document &d);
00222 ~Image();
00223 virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00224 Value getValueProperty(ExecState *exec, int token) const;
00225 virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00226 void putValueProperty(ExecState *exec, int token, const Value& value, int);
00227 virtual bool toBoolean(ExecState *) const { return true; }
00228 virtual void notifyFinished(khtml::CachedObject * finishedObj);
00229 virtual const ClassInfo* classInfo() const { return &info; }
00230 static const ClassInfo info;
00231 enum { Src, Complete, Width, Height, OnLoad };
00232 private:
00233 UString src;
00234 DOM::Document doc;
00235 khtml::CachedImage* img;
00236 JSEventListener *m_onLoadListener;
00237 };
00238
00239 Value getHTMLCollection(ExecState *exec, const DOM::HTMLCollection& c, bool hide=false);
00240 Value getSelectHTMLCollection(ExecState *exec, const DOM::HTMLCollection& c, const DOM::HTMLSelectElement& e);
00241
00242
00243
00244
00245
00246 class NamedTagLengthDeterminer {
00247 public:
00248 struct TagLength {
00249 DOM::NodeImpl::Id id; unsigned long length; DOM::NodeImpl *last;
00250 };
00251 NamedTagLengthDeterminer(const DOM::DOMString& n, TagLength *t, int l)
00252 : name(n), tags(t), nrTags(l) {}
00253 void operator () (DOM::NodeImpl *start);
00254 private:
00255 const DOM::DOMString& name;
00256 TagLength *tags;
00257 int nrTags;
00258 };
00259
00260
00261 }
00262
00263 #endif