LibWeb: Add layout objects for fieldset and legend

Add the boilerplate code for the layout objects that represent the
`<fieldset>` and `<legend>` elements. Using these, we can make progress
towards laying out these two elements per the spec at
https://html.spec.whatwg.org/multipage/rendering.html#the-fieldset-and-legend-elements.
This commit is contained in:
Kostya Farber 2024-11-05 08:07:13 +00:00 committed by Alexander Kalenik
commit a820308a02
Notes: github-actions[bot] 2024-11-19 13:32:03 +00:00
12 changed files with 173 additions and 0 deletions

View file

@ -14,6 +14,7 @@
#include <LibWeb/HTML/HTMLOutputElement.h>
#include <LibWeb/HTML/HTMLSelectElement.h>
#include <LibWeb/HTML/HTMLTextAreaElement.h>
#include <LibWeb/Layout/FieldSetBox.h>
namespace Web::HTML {
@ -77,4 +78,14 @@ GC::Ptr<DOM::HTMLCollection> const& HTMLFieldSetElement::elements()
return m_elements;
}
Layout::FieldSetBox* HTMLFieldSetElement::layout_node()
{
return static_cast<Layout::FieldSetBox*>(Node::layout_node());
}
JS::GCPtr<Layout::Node> HTMLFieldSetElement::create_layout_node(CSS::StyleProperties style)
{
return heap().allocate<Layout::FieldSetBox>(document(), *this, style);
}
}

View file

@ -42,6 +42,10 @@ public:
virtual Optional<ARIA::Role> default_role() const override { return ARIA::Role::group; }
virtual JS::GCPtr<Layout::Node> create_layout_node(CSS::StyleProperties) override;
Layout::FieldSetBox* layout_node();
Layout::FieldSetBox const* layout_node() const;
private:
HTMLFieldSetElement(DOM::Document&, DOM::QualifiedName);

View file

@ -8,6 +8,7 @@
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/HTML/HTMLFieldSetElement.h>
#include <LibWeb/HTML/HTMLLegendElement.h>
#include <LibWeb/Layout/LegendBox.h>
namespace Web::HTML {
@ -39,4 +40,19 @@ HTMLFormElement* HTMLLegendElement::form()
return nullptr;
}
JS::GCPtr<Layout::Node> HTMLLegendElement::create_layout_node(CSS::StyleProperties style)
{
return heap().allocate<Layout::LegendBox>(document(), *this, move(style));
}
Layout::LegendBox* HTMLLegendElement::layout_node()
{
return static_cast<Layout::LegendBox*>(Node::layout_node());
}
Layout::LegendBox const* HTMLLegendElement::layout_node() const
{
return static_cast<Layout::LegendBox const*>(Node::layout_node());
}
}

View file

@ -7,6 +7,7 @@
#pragma once
#include <LibWeb/HTML/HTMLElement.h>
#include <LibWeb/Layout/LegendBox.h>
namespace Web::HTML {
@ -19,6 +20,10 @@ public:
HTMLFormElement* form();
virtual JS::GCPtr<Layout::Node> create_layout_node(CSS::StyleProperties) override;
Layout::LegendBox* layout_node();
Layout::LegendBox const* layout_node() const;
private:
HTMLLegendElement(DOM::Document&, DOM::QualifiedName);