khtml Library API Documentation

kjs_html.h

00001 // -*- c-basic-offset: 2 -*-
00002 /*
00003  *  This file is part of the KDE libraries
00004  *  Copyright (C) 1999 Harri Porten (porten@kde.org)
00005  *  Copyright (C) 2003 Apple Computer, Inc.
00006  *
00007  *  This library is free software; you can redistribute it and/or
00008  *  modify it under the terms of the GNU Library General Public
00009  *  License as published by the Free Software Foundation; either
00010  *  version 2 of the License, or (at your option) any later version.
00011  *
00012  *  This library is distributed in the hope that it will be useful,
00013  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  *  Library General Public License for more details.
00016  *
00017  *  You should have received a copy of the GNU Library General Public
00018  *  License along with this library; if not, write to the Free Software
00019  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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"  // for NodeImpl::Id
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 /*attr*/);
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, 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 };
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;
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            ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
00149            ElementClassName, ElementInnerText, ElementDocument, ElementChildren, ElementAll };
00150 
00151     DOM::HTMLElement toElement() const { return static_cast<DOM::HTMLElement>(node); }
00152   };
00153 
00154 
00155   class HTMLElementFunction : public DOMFunction {
00156   public:
00157     HTMLElementFunction(ExecState *exec, int i, int len);
00158     virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
00159   private:
00160     int id;
00161   };
00162 
00163   class HTMLCollection : public DOMObject {
00164   public:
00165     HTMLCollection(ExecState *exec, const DOM::HTMLCollection& c);
00166     ~HTMLCollection();
00167     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00168     virtual Value call(ExecState *exec, Object &thisObj, const List&args);
00169     virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
00170     virtual bool implementsCall() const { return true; }
00171     virtual bool toBoolean(ExecState *) const { return true; }
00172     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00173     enum { Item, NamedItem, Tags };
00174     Value getNamedItems(ExecState *exec, const Identifier &propertyName) const;
00175     virtual const ClassInfo* classInfo() const { return &info; }
00176     static const ClassInfo info;
00177     DOM::HTMLCollection toCollection() const { return collection; }
00178   protected:
00179     DOM::HTMLCollection collection;
00180   };
00181 
00182   class HTMLSelectCollection : public HTMLCollection {
00183   public:
00184     HTMLSelectCollection(ExecState *exec, const DOM::HTMLCollection& c, const DOM::HTMLSelectElement& e)
00185       : HTMLCollection(exec, c), element(e) { }
00186     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00187     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00188   private:
00189     DOM::HTMLSelectElement element;
00190   };
00191 
00193 
00194   class OptionConstructorImp : public ObjectImp {
00195   public:
00196     OptionConstructorImp(ExecState *exec, const DOM::Document &d);
00197     virtual bool implementsConstruct() const;
00198     virtual Object construct(ExecState *exec, const List &args);
00199   private:
00200     DOM::Document doc;
00201   };
00202 
00204 
00205   class ImageConstructorImp : public ObjectImp {
00206   public:
00207     ImageConstructorImp(ExecState *exec, const DOM::Document &d);
00208     virtual bool implementsConstruct() const;
00209     virtual Object construct(ExecState *exec, const List &args);
00210   private:
00211     DOM::Document doc;
00212   };
00213 
00214   class Image : public DOMObject, public khtml::CachedObjectClient {
00215   public:
00216     Image(ExecState*, const DOM::Document &d);
00217     ~Image();
00218     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
00219     Value getValueProperty(ExecState *exec, int token) const;
00220     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
00221     void putValueProperty(ExecState *exec, int token, const Value& value, int);
00222     virtual bool toBoolean(ExecState *) const { return true; }
00223     virtual void notifyFinished(khtml::CachedObject * finishedObj);
00224     virtual const ClassInfo* classInfo() const { return &info; }
00225     static const ClassInfo info;
00226     enum { Src, Complete, Width, Height, OnLoad };
00227   private:
00228     UString src;
00229     DOM::Document doc;
00230     khtml::CachedImage* img;
00231     JSEventListener *m_onLoadListener;
00232   };
00233 
00234   Value getHTMLCollection(ExecState *exec, const DOM::HTMLCollection& c);
00235   Value getSelectHTMLCollection(ExecState *exec, const DOM::HTMLCollection& c, const DOM::HTMLSelectElement& e);
00236 
00237   /* Helper function object for determining the number
00238    * of occurrences of xxxx as in document.xxxx or window.xxxx.
00239    * The order of the TagLength array is the order of preference.
00240    */
00241   class NamedTagLengthDeterminer {
00242   public:
00243     struct TagLength {
00244       DOM::NodeImpl::Id id; unsigned long length; DOM::NodeImpl *last;
00245     };
00246     NamedTagLengthDeterminer(const DOM::DOMString& n, TagLength *t, int l)
00247       : name(n), tags(t), nrTags(l) {}
00248     void operator () (DOM::NodeImpl *start);
00249   private:
00250     const DOM::DOMString& name;
00251     TagLength *tags;
00252     int nrTags;
00253   };
00254 
00255 
00256 } // namespace
00257 
00258 #endif
KDE Logo
This file is part of the documentation for khtml Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun May 16 22:06:33 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003