1 /* 2 * This file is part of the DOM implementation for KDE. 3 * 4 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 5 * (C) 1999 Antti Koivisto (koivisto@kde.org) 6 * (C) 2002-2003 Apple Computer, Inc. 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Library General Public 10 * License as published by the Free Software Foundation; either 11 * version 2 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Library General Public License for more details. 17 * 18 * You should have received a copy of the GNU Library General Public License 19 * along with this library; see the file COPYING.LIB. If not, write to 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 * Boston, MA 02110-1301, USA. 22 * 23 */ 24 #ifndef HTML_HEADIMPL_H 25 #define HTML_HEADIMPL_H 26 27 #include "html/html_elementimpl.h" 28 #include "misc/loader_client.h" 29 #include "css/css_stylesheetimpl.h" 30 31 namespace khtml 32 { 33 class CachedCSSStyleSheet; 34 class CachedObject; 35 } 36 37 namespace DOM 38 { 39 40 class DOMString; 41 class StyleSheetImpl; 42 class CSSStyleSheetImpl; 43 44 class HTMLBaseElementImpl : public HTMLElementImpl 45 { 46 public: HTMLBaseElementImpl(DocumentImpl * doc)47 HTMLBaseElementImpl(DocumentImpl *doc) 48 : HTMLElementImpl(doc) {} 49 href()50 DOMString href() const 51 { 52 return DOMString(m_href); 53 } target()54 DOMString target() const 55 { 56 return m_target; 57 } 58 59 Id id() const override; 60 void parseAttribute(AttributeImpl *attr) override; 61 void insertedIntoDocument() override; 62 void removedFromDocument() override; 63 64 void process(); 65 66 protected: 67 QString m_href; 68 DOMString m_target; 69 }; 70 71 // ------------------------------------------------------------------------- 72 73 class HTMLLinkElementImpl : public khtml::CachedObjectClient, public HTMLElementImpl 74 { 75 public: HTMLLinkElementImpl(DocumentImpl * doc)76 HTMLLinkElementImpl(DocumentImpl *doc) 77 : HTMLElementImpl(doc), m_cachedSheet(nullptr), m_sheet(nullptr), m_isDisabled(false), 78 m_loading(false), m_alternate(false), m_isCSSSheet(false) {} 79 80 ~HTMLLinkElementImpl(); 81 82 Id id() const override; 83 sheet()84 const StyleSheetImpl *sheet() const 85 { 86 return m_sheet; 87 } sheet()88 StyleSheetImpl *sheet() 89 { 90 return m_sheet; 91 } 92 93 // overload from HTMLElementImpl 94 void parseAttribute(AttributeImpl *attr) override; 95 96 void process(); 97 98 void insertedIntoDocument() override; 99 void removedFromDocument() override; 100 101 // from CachedObjectClient 102 void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet, const DOM::DOMString &charset, const DOM::DOMString &mimetype) override; 103 void error(int err, const QString &text) override; 104 bool isLoading() const; 105 bool checkAddPendingSheet() override; 106 bool checkRemovePendingSheet() override; 107 isAlternate()108 bool isAlternate() const 109 { 110 return m_alternate; 111 } isCSSStyleSheet()112 bool isCSSStyleSheet() const 113 { 114 return m_isCSSSheet; 115 } isDisabled()116 bool isDisabled() const 117 { 118 return m_isDisabled; 119 } setDisabled(bool disabled)120 void setDisabled(bool disabled) 121 { 122 m_isDisabled = disabled; 123 } 124 125 protected: 126 void finished(); 127 128 khtml::CachedCSSStyleSheet *m_cachedSheet; 129 CSSStyleSheetImpl *m_sheet; 130 DOMString m_url; 131 QString m_media; 132 bool m_isDisabled : 1; 133 bool m_loading : 1; 134 bool m_alternate : 1; 135 bool m_isCSSSheet : 1; 136 }; 137 138 // ------------------------------------------------------------------------- 139 140 class HTMLMetaElementImpl : public HTMLElementImpl 141 { 142 public: HTMLMetaElementImpl(DocumentImpl * doc)143 HTMLMetaElementImpl(DocumentImpl *doc) 144 : HTMLElementImpl(doc) {} 145 146 Id id() const override; 147 void parseAttribute(AttributeImpl *attr) override; 148 void insertedIntoDocument() override; 149 150 void process(); 151 152 protected: 153 DOMString m_equiv; 154 DOMString m_content; 155 }; 156 157 // ------------------------------------------------------------------------- 158 159 class HTMLScriptElementImpl : public HTMLElementImpl, public khtml::CachedObjectClient 160 { 161 public: 162 HTMLScriptElementImpl(DocumentImpl *doc); 163 ~HTMLScriptElementImpl(); 164 165 void parseAttribute(AttributeImpl *attr) override; 166 void insertedIntoDocument() override; 167 void removedFromDocument() override; 168 void notifyFinished(khtml::CachedObject *finishedObj) override; 169 void childrenChanged() override; 170 171 Id id() const override; 172 virtual bool isURLAttribute(AttributeImpl *attr) const; 173 setCreatedByParser(bool createdByParser)174 void setCreatedByParser(bool createdByParser) 175 { 176 m_createdByParser = createdByParser; 177 } 178 179 bool isValidScript() const; 180 void evaluateScript(const QString &, const DOMString &); 181 182 DOMString text() const; 183 void setText(const DOMString &str); 184 185 DOMString htmlFor() const; 186 void setHtmlFor(const DOMString &); 187 188 DOMString event() const; 189 void setEvent(const DOMString &); 190 191 DOMString charset() const; 192 void setCharset(const DOMString &); 193 194 bool defer() const; 195 void setDefer(bool); 196 197 DOMString src() const; 198 void setSrc(const DOMString &); 199 200 DOMString type() const; 201 void setType(const DOMString &); 202 203 private: 204 void loadFromUrl(const DOMString &url); 205 khtml::CachedScript *m_cachedScript; 206 bool m_createdByParser; 207 bool m_evaluated; 208 bool m_hasNonEmptyForAttribute; 209 }; 210 211 // ------------------------------------------------------------------------- 212 213 class HTMLStyleElementImpl : public HTMLElementImpl 214 { 215 public: HTMLStyleElementImpl(DocumentImpl * doc)216 HTMLStyleElementImpl(DocumentImpl *doc) 217 : HTMLElementImpl(doc), m_sheet(nullptr), m_loading(false) {} 218 ~HTMLStyleElementImpl(); 219 220 Id id() const override; 221 sheet()222 CSSStyleSheetImpl *sheet() 223 { 224 return m_sheet; 225 } 226 227 // overload from HTMLElementImpl 228 void parseAttribute(AttributeImpl *attr) override; 229 void insertedIntoDocument() override; 230 void removedFromDocument() override; 231 void childrenChanged() override; 232 233 bool isLoading() const; 234 bool checkAddPendingSheet() override; 235 bool checkRemovePendingSheet() override; 236 237 protected: 238 void parseText(); 239 240 CSSStyleSheetImpl *m_sheet; 241 DOMString m_type; 242 QString m_media; 243 bool m_loading; 244 }; 245 246 // ------------------------------------------------------------------------- 247 248 class HTMLTitleElementImpl : public HTMLElementImpl 249 { 250 public: HTMLTitleElementImpl(DocumentImpl * doc)251 HTMLTitleElementImpl(DocumentImpl *doc) 252 : HTMLElementImpl(doc) {} 253 254 DOMString text(); 255 void setText(const DOMString &str); 256 257 Id id() const override; 258 259 void childrenChanged() override; 260 261 protected: 262 DOMString m_title; 263 }; 264 265 } //namespace 266 267 #endif 268