3e4a057e0a7293e9644a94f43b7f25cb6b2ffa43
[WebKit-https.git] / WebCore / khtml / dom / html_document.cpp
1 /**
2  * This file is part of the DOM implementation for KDE.
3  *
4  * (C) 1999 Lars Knoll (knoll@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 Library 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  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  *
22  */
23 // --------------------------------------------------------------------------
24
25 #include "html_document.h"
26
27 #include "dom/html_misc.h"
28 #include "xml/dom_textimpl.h"
29 #include "html/html_documentimpl.h"
30 #include "html/html_miscimpl.h"
31 #include "misc/htmlhashes.h"
32 #include "dom/html_image.h"
33 #include "dom/html_form.h"
34 #include "html/html_imageimpl.h"
35 #include "html/html_formimpl.h"
36 #include "dom/dom_exception.h"
37
38 using namespace DOM;
39
40 HTMLDocument::HTMLDocument() : Document(false) // create the impl here
41 {
42     impl = DOMImplementationImpl::instance()->createHTMLDocument();
43     impl->ref();
44
45 }
46
47 HTMLDocument::HTMLDocument(KHTMLView *parent)
48     : Document(false) // create the impl here
49 {
50     impl = DOMImplementationImpl::instance()->createHTMLDocument(parent);
51     impl->ref();
52 }
53
54 HTMLDocument::HTMLDocument(const HTMLDocument &other) : Document(other)
55 {
56 }
57
58 HTMLDocument::HTMLDocument(HTMLDocumentImpl *impl) : Document(impl)
59 {
60 }
61
62 HTMLDocument &HTMLDocument::operator = (const Node &other)
63 {
64     if(other.nodeType() != DOCUMENT_NODE) {
65         if ( impl ) impl->deref();
66         impl = 0;
67     } else {
68         DocumentImpl *d = static_cast<DocumentImpl *>(other.handle());
69         if(!d->isHTMLDocument()) {
70             if ( impl ) impl->deref();
71         impl = 0;
72         } else {
73         Node::operator =(other);
74         }
75     }
76     return *this;
77 }
78
79 HTMLDocument &HTMLDocument::operator = (const HTMLDocument &other)
80 {
81     Document::operator =(other);
82     return *this;
83 }
84
85 HTMLDocument::~HTMLDocument()
86 {
87 }
88
89 DOMString HTMLDocument::title() const
90 {
91     if(!impl) return DOMString();
92     return static_cast<HTMLDocumentImpl *>(impl)->title();
93 }
94
95 void HTMLDocument::setTitle( const DOMString &v )
96 {
97 #if APPLE_CHANGES
98     if (!impl) return;
99     ((HTMLDocumentImpl *)impl)->setTitle(v);
100 #else
101     // ###
102 #endif
103 }
104
105 DOMString HTMLDocument::referrer() const
106 {
107     if(!impl) return DOMString();
108     return ((HTMLDocumentImpl *)impl)->referrer();
109 }
110
111 DOMString HTMLDocument::completeURL(const DOMString& str) const
112 {
113     if(!impl) return str;
114     return ((HTMLDocumentImpl *)impl)->completeURL(str.string());
115 }
116
117 DOMString HTMLDocument::domain() const
118 {
119     if(!impl) return DOMString();
120     return ((HTMLDocumentImpl *)impl)->domain();
121 }
122
123 DOMString HTMLDocument::lastModified() const
124 {
125     if(!impl) return DOMString();
126     return ((HTMLDocumentImpl *)impl)->lastModified();
127 }
128
129 DOMString HTMLDocument::URL() const
130 {
131     if(!impl) return DOMString();
132     return ((HTMLDocumentImpl *)impl)->URL();
133 }
134
135 HTMLElement HTMLDocument::body() const
136 {
137     if(!impl) return 0;
138     return ((HTMLDocumentImpl *)impl)->body();
139 }
140
141 void HTMLDocument::setBody(const HTMLElement &_body)
142 {
143     if (!impl) return;
144     int exceptioncode = 0;
145     ((HTMLDocumentImpl *)impl)->setBody(static_cast<HTMLElementImpl *>(_body.handle()), exceptioncode);
146     if ( exceptioncode )
147         throw DOMException( exceptioncode );
148     return;
149 }
150
151 HTMLCollection HTMLDocument::images() const
152 {
153     if(!impl) return HTMLCollection();
154     return HTMLCollection(impl, HTMLCollectionImpl::DOC_IMAGES);
155 }
156
157 HTMLCollection HTMLDocument::applets() const
158 {
159     if(!impl) return HTMLCollection();
160     return HTMLCollection(impl, HTMLCollectionImpl::DOC_APPLETS);
161 }
162
163 HTMLCollection HTMLDocument::embeds() const
164 {
165     if(!impl) return HTMLCollection();
166     return HTMLCollection(impl, HTMLCollectionImpl::DOC_EMBEDS);
167 }
168
169 HTMLCollection HTMLDocument::links() const
170 {
171     if(!impl) return HTMLCollection();
172     return HTMLCollection(impl, HTMLCollectionImpl::DOC_LINKS);
173 }
174
175 HTMLCollection HTMLDocument::forms() const
176 {
177     if(!impl) return HTMLCollection();
178     return HTMLCollection(impl, HTMLCollectionImpl::DOC_FORMS);
179 }
180
181 HTMLCollection HTMLDocument::anchors() const
182 {
183     if(!impl) return HTMLCollection();
184     return HTMLCollection(impl, HTMLCollectionImpl::DOC_ANCHORS);
185 }
186
187 HTMLCollection HTMLDocument::all() const
188 {
189     if(!impl) return HTMLCollection();
190     return HTMLCollection(impl, HTMLCollectionImpl::DOC_ALL);
191 }
192
193 DOMString HTMLDocument::cookie() const
194 {
195    if (!impl) return DOMString();
196    return ((HTMLDocumentImpl *)impl)->cookie();
197 }
198
199 void HTMLDocument::setCookie( const DOMString & value )
200 {
201    if (impl)
202         ((HTMLDocumentImpl *)impl)->setCookie(value);
203
204 }
205
206 #if APPLE_CHANGES
207
208 void HTMLDocument::setPolicyBaseURL( const DOMString &s )
209 {
210    if (impl)
211         ((HTMLDocumentImpl *)impl)->setPolicyBaseURL(s);
212 }
213
214 #endif
215
216 void HTMLDocument::open(  )
217 {
218     if(impl)
219         ((HTMLDocumentImpl *)impl)->open(  );
220 }
221
222 void HTMLDocument::close(  )
223 {
224     if(impl)
225         ((HTMLDocumentImpl *)impl)->close(  );
226 }
227
228 void HTMLDocument::write( const DOMString &text )
229 {
230     if(impl)
231         ((HTMLDocumentImpl *)impl)->write( text );
232 }
233
234 void HTMLDocument::writeln( const DOMString &text )
235 {
236     if(impl)
237         ((HTMLDocumentImpl *)impl)->writeln( text );
238 }
239
240 NodeList HTMLDocument::getElementsByName( const DOMString &elementName )
241 {
242     if(!impl) return 0;
243     return new NameNodeListImpl(impl, elementName);
244 }