diff --git a/Libraries/LibHTML/DOM/HTMLStyleElement.cpp b/Libraries/LibHTML/DOM/HTMLStyleElement.cpp new file mode 100644 index 0000000000..d527b58dcf --- /dev/null +++ b/Libraries/LibHTML/DOM/HTMLStyleElement.cpp @@ -0,0 +1,28 @@ +#include +#include +#include + +HTMLStyleElement::HTMLStyleElement(Document& document, const String& tag_name) + : HTMLElement(document, tag_name) +{ +} + +HTMLStyleElement::~HTMLStyleElement() +{ +} + +void HTMLStyleElement::inserted_into(Node& new_parent) +{ + m_stylesheet = parse_css(text_content()); + if (m_stylesheet) + document().add_sheet(*m_stylesheet); + HTMLElement::inserted_into(new_parent); +} + +void HTMLStyleElement::removed_from(Node& old_parent) +{ + if (m_stylesheet) { + // FIXME: Remove the sheet from the document + } + return HTMLElement::removed_from(old_parent); +} diff --git a/Libraries/LibHTML/DOM/HTMLStyleElement.h b/Libraries/LibHTML/DOM/HTMLStyleElement.h new file mode 100644 index 0000000000..4f46cf50fc --- /dev/null +++ b/Libraries/LibHTML/DOM/HTMLStyleElement.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +class StyleSheet; + +class HTMLStyleElement : public HTMLElement { +public: + HTMLStyleElement(Document&, const String& tag_name); + virtual ~HTMLStyleElement() override; + + virtual void inserted_into(Node&) override; + virtual void removed_from(Node&) override; + +private: + RefPtr m_stylesheet; +}; diff --git a/Libraries/LibHTML/Makefile.shared b/Libraries/LibHTML/Makefile.shared index 76329a0299..43a6f33500 100644 --- a/Libraries/LibHTML/Makefile.shared +++ b/Libraries/LibHTML/Makefile.shared @@ -7,6 +7,7 @@ LIBHTML_OBJS = \ DOM/HTMLHeadingElement.o \ DOM/HTMLHeadElement.o \ DOM/HTMLHtmlElement.o \ + DOM/HTMLStyleElement.o \ DOM/HTMLTitleElement.o \ DOM/Document.o \ DOM/Text.o \ diff --git a/Libraries/LibHTML/Parser/HTMLParser.cpp b/Libraries/LibHTML/Parser/HTMLParser.cpp index b8d5d2ed6f..079d45173b 100644 --- a/Libraries/LibHTML/Parser/HTMLParser.cpp +++ b/Libraries/LibHTML/Parser/HTMLParser.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -21,6 +22,8 @@ static NonnullRefPtr create_element(Document& document, const String& t return adopt(*new HTMLHtmlElement(document, tag_name)); if (lowercase_tag_name == "head") return adopt(*new HTMLHeadElement(document, tag_name)); + if (lowercase_tag_name == "style") + return adopt(*new HTMLStyleElement(document, tag_name)); if (lowercase_tag_name == "title") return adopt(*new HTMLTitleElement(document, tag_name)); if (lowercase_tag_name == "h1"