/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include namespace Web::HTML { GC_DEFINE_ALLOCATOR(CustomStateSet); GC::Ref CustomStateSet::create(JS::Realm& realm, GC::Ref element) { return realm.create(realm, element); } CustomStateSet::CustomStateSet(JS::Realm& realm, GC::Ref element) : Bindings::PlatformObject(realm) , m_set_entries(JS::Set::create(realm)) , m_element(element) { } void CustomStateSet::initialize(JS::Realm& realm) { WEB_SET_PROTOTYPE_FOR_INTERFACE(CustomStateSet); Base::initialize(realm); } void CustomStateSet::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_set_entries); visitor.visit(m_element); } bool CustomStateSet::has_state(FlyString const& state) const { return m_set_entries->set_has(JS::PrimitiveString::create(realm().vm(), state)); } void CustomStateSet::on_set_modified_from_js(Badge) { m_element->invalidate_style(DOM::StyleInvalidationReason::CustomStateSetChange); } }