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, 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   /* Helper function object for determining the number
00244    * of occurrences of xxxx as in document.xxxx or window.xxxx.
00245    * The order of the TagLength array is the order of preference.
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 } // namespace
00263 
00264 #endif
KDE Logo
This file is part of the documentation for khtml Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Apr 22 16:07:46 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003