mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-27 06:48:49 +00:00
Currently, this metadata is only provided on the insertion steps, though I believe it would be useful to extend to the other cases as well. This metadata can aid in making optimizations for these steps by providing extra context into the type of change which was made on the child.
94 lines
2.7 KiB
C++
94 lines
2.7 KiB
C++
/*
|
|
* Copyright (c) 2018-2021, Andreas Kling <andreas@ladybird.org>
|
|
* Copyright (c) 2021, the SerenityOS developers.
|
|
* Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibWeb/Bindings/HTMLStyleElementPrototype.h>
|
|
#include <LibWeb/HTML/HTMLStyleElement.h>
|
|
|
|
namespace Web::HTML {
|
|
|
|
GC_DEFINE_ALLOCATOR(HTMLStyleElement);
|
|
|
|
HTMLStyleElement::HTMLStyleElement(DOM::Document& document, DOM::QualifiedName qualified_name)
|
|
: HTMLElement(document, move(qualified_name))
|
|
{
|
|
}
|
|
|
|
HTMLStyleElement::~HTMLStyleElement() = default;
|
|
|
|
void HTMLStyleElement::initialize(JS::Realm& realm)
|
|
{
|
|
Base::initialize(realm);
|
|
WEB_SET_PROTOTYPE_FOR_INTERFACE(HTMLStyleElement);
|
|
}
|
|
|
|
void HTMLStyleElement::visit_edges(Cell::Visitor& visitor)
|
|
{
|
|
Base::visit_edges(visitor);
|
|
m_style_element_utils.visit_edges(visitor);
|
|
}
|
|
|
|
void HTMLStyleElement::children_changed(ChildrenChangedMetadata const* metadata)
|
|
{
|
|
Base::children_changed(metadata);
|
|
m_style_element_utils.update_a_style_block(*this);
|
|
}
|
|
|
|
void HTMLStyleElement::inserted()
|
|
{
|
|
m_style_element_utils.update_a_style_block(*this);
|
|
Base::inserted();
|
|
}
|
|
|
|
void HTMLStyleElement::removed_from(Node* old_parent, Node& old_root)
|
|
{
|
|
m_style_element_utils.update_a_style_block(*this);
|
|
Base::removed_from(old_parent, old_root);
|
|
}
|
|
|
|
// https://html.spec.whatwg.org/multipage/semantics.html#dom-style-disabled
|
|
bool HTMLStyleElement::disabled()
|
|
{
|
|
// 1. If this does not have an associated CSS style sheet, return false.
|
|
if (!sheet())
|
|
return false;
|
|
|
|
// 2. If this's associated CSS style sheet's disabled flag is set, return true.
|
|
if (sheet()->disabled())
|
|
return true;
|
|
|
|
// 3. Return false.
|
|
return false;
|
|
}
|
|
|
|
// https://html.spec.whatwg.org/multipage/semantics.html#dom-style-disabled
|
|
void HTMLStyleElement::set_disabled(bool disabled)
|
|
{
|
|
// 1. If this does not have an associated CSS style sheet, return.
|
|
if (!sheet())
|
|
return;
|
|
|
|
// 2. If the given value is true, set this's associated CSS style sheet's disabled flag.
|
|
// Otherwise, unset this's associated CSS style sheet's disabled flag.
|
|
sheet()->set_disabled(disabled);
|
|
}
|
|
|
|
// https://www.w3.org/TR/cssom/#dom-linkstyle-sheet
|
|
CSS::CSSStyleSheet* HTMLStyleElement::sheet()
|
|
{
|
|
// The sheet attribute must return the associated CSS style sheet for the node or null if there is no associated CSS style sheet.
|
|
return m_style_element_utils.sheet();
|
|
}
|
|
|
|
// https://www.w3.org/TR/cssom/#dom-linkstyle-sheet
|
|
CSS::CSSStyleSheet const* HTMLStyleElement::sheet() const
|
|
{
|
|
// The sheet attribute must return the associated CSS style sheet for the node or null if there is no associated CSS style sheet.
|
|
return m_style_element_utils.sheet();
|
|
}
|
|
|
|
}
|