mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-28 15:28:55 +00:00
LibWeb: Implement StyleSheet.ownerNode :^)
This commit is contained in:
parent
183b2e71ba
commit
d07fcba69b
Notes:
sideshowbarker
2024-07-18 21:37:06 +09:00
Author: https://github.com/awesomekling
Commit: d07fcba69b
5 changed files with 32 additions and 7 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue