5f29d527ff273c6fdcaa036650a0978f24fda1d9
[WebKit-https.git] / WebCore / khtml / ecma / kjs_html.h
1 // -*- c-basic-offset: 2 -*-
2 /*
3  *  This file is part of the KDE libraries
4  *  Copyright (C) 1999 Harri Porten (porten@kde.org)
5  *  Copyright (C) 2003 Apple Computer, Inc.
6  *
7  *  This library is free software; you can redistribute it and/or
8  *  modify it under the terms of the GNU Lesser General Public
9  *  License as published by the Free Software Foundation; either
10  *  version 2 of the License, or (at your option) any later version.
11  *
12  *  This library is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  *  Lesser General Public License for more details.
16  *
17  *  You should have received a copy of the GNU Lesser General Public
18  *  License along with this library; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #ifndef _KJS_HTML_H_
23 #define _KJS_HTML_H_
24
25 #include "dom/html_document.h"
26 #include "dom/html_base.h"
27 #include "dom/html_misc.h"
28 #include "dom/html_form.h"
29 #include "misc/loader_client.h"
30
31 #include "ecma/kjs_binding.h"
32 #include "ecma/kjs_dom.h"
33
34 #include <qguardedptr.h>
35
36 class HTMLElement;
37
38 namespace KJS {
39
40   class HTMLDocument : public DOMDocument {
41   public:
42     HTMLDocument(ExecState *exec, const DOM::HTMLDocument &d) : DOMDocument(exec, d) { }
43     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
44     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
45     void putValue(ExecState *exec, int token, const Value& value, int /*attr*/);
46     virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
47     virtual const ClassInfo* classInfo() const { return &info; }
48     static const ClassInfo info;
49     enum { Title, Referrer, Domain, URL, Body, Location, Cookie,
50            Images, Applets, Embeds, Links, Forms, Anchors, Scripts, All, Clear, Open, Close,
51            Write, WriteLn, GetElementsByName, CaptureEvents, ReleaseEvents,
52            BgColor, FgColor, AlinkColor, LinkColor, VlinkColor, LastModified, Height, Width, Dir, DesignMode };
53     DOM::Document toDocument() const { return static_cast<DOM::Document>( node ); }
54   };
55
56   class HTMLElement : public DOMElement {
57   public:
58     HTMLElement(ExecState *exec, const DOM::HTMLElement &e) : DOMElement(exec, e) { }
59     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
60     Value getValueProperty(ExecState *exec, int token) const;
61     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
62     void putValue(ExecState *exec, int token, const Value& value, int);
63     virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
64     virtual UString toString(ExecState *exec) const;
65     virtual void pushEventHandlerScope(ExecState *exec, ScopeChain &scope) const;
66     virtual const ClassInfo* classInfo() const;
67     static const ClassInfo info;
68
69     static const ClassInfo html_info, head_info, link_info, title_info,
70       meta_info, base_info, isIndex_info, style_info, body_info, form_info,
71       select_info, optGroup_info, option_info, input_info, textArea_info,
72       button_info, label_info, fieldSet_info, legend_info, ul_info, ol_info,
73       dl_info, dir_info, menu_info, li_info, div_info, p_info, heading_info,
74       blockQuote_info, q_info, pre_info, br_info, baseFont_info, font_info,
75       hr_info, mod_info, a_info, canvas_info, img_info, object_info, param_info,
76       applet_info, map_info, area_info, script_info, table_info,
77       caption_info, col_info, tablesection_info, tr_info,
78       tablecell_info, frameSet_info, frame_info, iFrame_info, marquee_info;
79
80     enum { HtmlVersion, HeadProfile, LinkHref, LinkRel, LinkMedia,
81            LinkCharset, LinkDisabled, LinkHrefLang, LinkRev, LinkTarget, LinkType,
82            LinkSheet, TitleText, MetaName, MetaHttpEquiv, MetaContent, MetaScheme,
83            BaseHref, BaseTarget, IsIndexForm, IsIndexPrompt, StyleDisabled,
84            StyleSheet, StyleType, StyleMedia, BodyBackground, BodyVLink, BodyText,
85            BodyLink, BodyALink, BodyBgColor, BodyScrollLeft, BodyScrollTop, BodyScrollHeight, BodyScrollWidth,
86            FormAction, FormEncType, FormElements, FormLength, FormAcceptCharset,
87            FormReset, FormTarget, FormName, FormMethod, FormSubmit, SelectAdd,
88            SelectTabIndex, SelectValue, SelectSelectedIndex, SelectLength,
89            SelectRemove, SelectForm, SelectBlur, SelectType, SelectOptions,
90            SelectDisabled, SelectMultiple, SelectName, SelectSize, SelectFocus,
91            OptGroupDisabled, OptGroupLabel, OptionIndex, OptionSelected,
92            OptionForm, OptionText, OptionDefaultSelected, OptionDisabled,
93            OptionLabel, OptionValue, InputBlur, InputReadOnly, InputAccept,
94            InputSize, InputDefaultValue, InputTabIndex, InputValue, InputType,
95            InputFocus, InputMaxLength, InputDefaultChecked, InputDisabled,
96            InputChecked, InputForm, InputAccessKey, InputAlign, InputAlt,
97            InputName, InputSrc, InputUseMap, InputSelect, InputClick,
98            TextAreaAccessKey, TextAreaName, TextAreaDefaultValue, TextAreaSelect,
99            TextAreaCols, TextAreaDisabled, TextAreaForm, TextAreaType,
100            TextAreaTabIndex, TextAreaReadOnly, TextAreaRows, TextAreaValue,
101            TextAreaBlur, TextAreaFocus, ButtonForm, ButtonTabIndex, ButtonName,
102            ButtonDisabled, ButtonAccessKey, ButtonType, ButtonValue, LabelHtmlFor,
103            LabelForm, LabelAccessKey, FieldSetForm, LegendForm, LegendAccessKey,
104            LegendAlign, UListType, UListCompact, OListStart, OListCompact,
105            OListType, DListCompact, DirectoryCompact, MenuCompact, LIType,
106            LIValue, DivAlign, ParagraphAlign, HeadingAlign, BlockQuoteCite,
107            QuoteCite, PreWidth, BRClear, BaseFontColor, BaseFontSize,
108            BaseFontFace, FontColor, FontSize, FontFace, HRWidth, HRNoShade,
109            HRAlign, HRSize, ModCite, ModDateTime, AnchorShape, AnchorRel,
110            AnchorAccessKey, AnchorCoords, AnchorHref, AnchorProtocol, AnchorHost,
111            AnchorCharset, AnchorHrefLang, AnchorHostname, AnchorType, AnchorFocus,
112            AnchorPort, AnchorPathName, AnchorHash, AnchorSearch, AnchorName,
113            AnchorRev, AnchorTabIndex, AnchorTarget, AnchorText, AnchorBlur, AnchorToString, 
114            ImageName, ImageAlign, ImageHspace, ImageVspace, ImageUseMap, ImageAlt,
115            ImageLowSrc, ImageWidth, ImageIsMap, ImageBorder, ImageHeight,
116            ImageLongDesc, ImageSrc, ImageX, ImageY, ObjectHspace, ObjectHeight, ObjectAlign,
117            ObjectBorder, ObjectCode, ObjectType, ObjectVspace, ObjectArchive,
118            ObjectDeclare, ObjectForm, ObjectCodeBase, ObjectCodeType, ObjectData,
119            ObjectName, ObjectStandby, ObjectTabIndex, ObjectUseMap, ObjectWidth, ObjectContentDocument,
120            ParamName, ParamType, ParamValueType, ParamValue, AppletArchive,
121            AppletAlt, AppletCode, AppletWidth, AppletAlign, AppletCodeBase,
122            AppletName, AppletHeight, AppletHspace, AppletObject, AppletVspace,
123            MapAreas, MapName, AreaHash, AreaHref, AreaTarget, AreaPort, AreaShape,
124            AreaCoords, AreaAlt, AreaAccessKey, AreaNoHref, AreaHost, AreaProtocol,
125            AreaHostName, AreaPathName, AreaSearch, AreaTabIndex, ScriptEvent,
126            ScriptType, ScriptHtmlFor, ScriptText, ScriptSrc, ScriptCharset,
127            ScriptDefer, TableSummary, TableTBodies, TableTHead, TableCellPadding,
128            TableDeleteCaption, TableCreateCaption, TableCaption, TableWidth,
129            TableCreateTFoot, TableAlign, TableTFoot, TableDeleteRow,
130            TableCellSpacing, TableRows, TableBgColor, TableBorder, TableFrame,
131            TableRules, TableCreateTHead, TableDeleteTHead, TableDeleteTFoot,
132            TableInsertRow, TableCaptionAlign, TableColCh, TableColChOff,
133            TableColAlign, TableColSpan, TableColVAlign, TableColWidth,
134            TableSectionCh, TableSectionDeleteRow, TableSectionChOff,
135            TableSectionRows, TableSectionAlign, TableSectionVAlign,
136            TableSectionInsertRow, TableRowSectionRowIndex, TableRowRowIndex,
137            TableRowChOff, TableRowCells, TableRowVAlign, TableRowCh,
138            TableRowAlign, TableRowBgColor, TableRowDeleteCell, TableRowInsertCell,
139            TableCellColSpan, TableCellNoWrap, TableCellAbbr, TableCellHeight,
140            TableCellWidth, TableCellCellIndex, TableCellChOff, TableCellBgColor,
141            TableCellCh, TableCellVAlign, TableCellRowSpan, TableCellHeaders,
142            TableCellAlign, TableCellAxis, TableCellScope, FrameSetCols,
143            FrameSetRows, FrameSrc, FrameLocation, FrameFrameBorder, FrameScrolling,
144            FrameMarginWidth, FrameLongDesc, FrameMarginHeight, FrameName, FrameContentDocument,
145            FrameNoResize, IFrameLongDesc, IFrameDocument, IFrameAlign,
146            IFrameFrameBorder, IFrameSrc, IFrameName, IFrameHeight,
147            IFrameMarginHeight, IFrameMarginWidth, IFrameScrolling, IFrameWidth, IFrameContentDocument,
148            MarqueeStart, MarqueeStop,
149            GetContext,
150            ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
151            ElementClassName, ElementInnerText, ElementDocument, ElementChildren, ElementContentEditable,
152            ElementIsContentEditable, ElementOuterHTML, ElementOuterText};
153
154     DOM::HTMLElement toElement() const { return static_cast<DOM::HTMLElement>(node); }
155   };
156
157
158   class HTMLElementFunction : public DOMFunction {
159   public:
160     HTMLElementFunction(ExecState *exec, int i, int len);
161     virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
162   private:
163     int id;
164   };
165
166   class HTMLCollection : public DOMObject {
167   public:
168     HTMLCollection(ExecState *exec, const DOM::HTMLCollection &c);
169     ~HTMLCollection();
170     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
171     virtual Value call(ExecState *exec, Object &thisObj, const List&args);
172     virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
173     virtual bool implementsCall() const { return true; }
174     virtual bool toBoolean(ExecState *) const { return true; }
175     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
176     enum { Item, NamedItem, Tags };
177     Value getNamedItems(ExecState *exec, const Identifier &propertyName) const;
178     virtual const ClassInfo* classInfo() const { return &info; }
179     static const ClassInfo info;
180     DOM::HTMLCollection toCollection() const { return collection; }
181   protected:
182     DOM::HTMLCollection collection;
183   };
184
185   class HTMLSelectCollection : public HTMLCollection {
186   public:
187     HTMLSelectCollection(ExecState *exec, const DOM::HTMLCollection &c, const DOM::HTMLSelectElement &e)
188       : HTMLCollection(exec, c), element(e) { }
189     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
190     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
191   private:
192     DOM::HTMLSelectElement element;
193   };
194
195   ////////////////////// Option Object ////////////////////////
196
197   class OptionConstructorImp : public ObjectImp {
198   public:
199     OptionConstructorImp(ExecState *exec, const DOM::Document &d);
200     virtual bool implementsConstruct() const;
201     virtual Object construct(ExecState *exec, const List &args);
202   private:
203     DOM::Document doc;
204   };
205
206   ////////////////////// Image Object ////////////////////////
207
208   class ImageConstructorImp : public ObjectImp {
209   public:
210     ImageConstructorImp(ExecState *exec, const DOM::Document &d);
211     virtual bool implementsConstruct() const;
212     virtual Object construct(ExecState *exec, const List &args);
213   private:
214     DOM::Document doc;
215   };
216
217   class Image : public DOMObject, public khtml::CachedObjectClient {
218   public:
219     Image(const DOM::Document &d);
220     ~Image();
221     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
222     Value getValueProperty(ExecState *exec, int token) const;
223     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
224     void putValue(ExecState *exec, int token, const Value& value, int /*attr*/);
225     void notifyFinished(khtml::CachedObject *);
226     virtual bool toBoolean(ExecState *) const { return true; }
227     virtual const ClassInfo* classInfo() const { return &info; }
228     static const ClassInfo info;
229     enum { Src, Complete, OnLoad };
230     
231     khtml::CachedImage* image() { return img; }
232     
233   private:
234     UString src;
235     QGuardedPtr<DOM::DocumentImpl> doc;
236     khtml::CachedImage* img;
237     JSEventListener *onLoadListener;
238   };
239
240   ////////////////////// Context2D Object ////////////////////////
241
242   class Context2D : public DOMObject {
243   friend class Context2DFunction;
244   public:
245     Context2D(const DOM::HTMLElement &e);
246     ~Context2D();
247     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
248     Value getValueProperty(ExecState *exec, int token) const;
249     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
250     void putValue(ExecState *exec, int token, const Value& value, int /*attr*/);
251     virtual bool toBoolean(ExecState *) const { return true; }
252     virtual const ClassInfo* classInfo() const { return &info; }
253     static const ClassInfo info;
254
255     enum { 
256         Save, Restore,
257         Scale, Rotate, Translate,
258         BeginPath, ClosePath, 
259         SetStrokeColor, SetFillColor, SetLineWidth, SetLineCap, SetLineJoin, SetMiterLimit, 
260         FillPath, StrokePath, 
261         MoveToPoint, AddLineToPoint, AddQuadraticCurveToPoint, AddBezierCurveToPoint, AddArcToPoint, AddArc, AddRect, Clip,
262         ClearRect, FillRect, StrokeRect,
263         DrawImage, DrawImageFromRect,
264         SetShadow, ClearShadow,
265         SetAlpha, SetCompositeOperation};
266
267     DOM::HTMLElementImpl *_element;
268     unsigned int _needsFlushRasterCache;
269   };
270
271   Value getHTMLCollection(ExecState *exec, const DOM::HTMLCollection &c);
272   Value getSelectHTMLCollection(ExecState *exec, const DOM::HTMLCollection &c, const DOM::HTMLSelectElement &e);
273
274
275 }; // namespace
276
277 #endif