LibWeb: Implement StyleSheet.ownerNode :^)

This commit is contained in:
Andreas Kling 2021-03-08 13:40:53 +01:00
parent 183b2e71ba
commit d07fcba69b
Notes: sideshowbarker 2024-07-18 21:37:06 +09:00
5 changed files with 32 additions and 7 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, the SerenityOS developers.
* All rights reserved.
*
@ -26,7 +26,16 @@
*/
#include <LibWeb/CSS/StyleSheet.h>
#include <LibWeb/DOM/Element.h>
namespace Web::CSS {
void StyleSheet::set_owner_node(DOM::Element* element)
{
if (element)
m_owner_node = element->make_weak_ptr<DOM::Element>();
else
m_owner_node = nullptr;
}
}

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, the SerenityOS developers.
* All rights reserved.
*
@ -41,8 +41,14 @@ public:
virtual ~StyleSheet() = default;
DOM::Element* owner_node() { return m_owner_node; }
void set_owner_node(DOM::Element*);
protected:
StyleSheet() = default;
private:
WeakPtr<DOM::Element> m_owner_node;
};
}

View file

@ -1,9 +1,12 @@
interface StyleSheet {
readonly attribute Element? ownerNode;
// readonly attribute CSSOMString type;
// readonly attribute USVString? href;
// readonly attribute (Element or ProcessingInstruction)? ownerNode;
// readonly attribute CSSStyleSheet? parentStyleSheet;
// readonly attribute DOMString? title;
// [SameObject, PutForwards=mediaText] readonly attribute MediaList media;
// attribute boolean disabled;
};

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, the SerenityOS developers.
* All rights reserved.
*
@ -53,7 +53,10 @@ void HTMLLinkElement::inserted_into(Node& node)
if (m_relationship & Relationship::Stylesheet && !(m_relationship & Relationship::Alternate)) {
m_css_loader.load_from_url(document().complete_url(href()));
document().style_sheets().add_sheet(m_css_loader.style_sheet().release_nonnull());
if (auto sheet = m_css_loader.style_sheet()) {
sheet->set_owner_node(this);
document().style_sheets().add_sheet(sheet.release_nonnull());
}
}
}

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, the SerenityOS developers.
* All rights reserved.
*
@ -53,7 +53,11 @@ void HTMLStyleElement::children_changed()
builder.append(downcast<DOM::Text>(child).text_content());
});
m_css_loader.load_from_text(builder.to_string());
document().style_sheets().add_sheet(m_css_loader.style_sheet().release_nonnull());
if (auto sheet = m_css_loader.style_sheet()) {
sheet->set_owner_node(this);
document().style_sheets().add_sheet(sheet.release_nonnull());
}
HTMLElement::children_changed();
}