at (11,11) content-size 488.1875x198 table-row children: not-inline
+ BlockContainer at (71,71) content-size 26.640625x17.46875 table-cell [BFC] children: inline
+ line 0 width: 26.640625, height: 17.46875, bottom: 17.46875, baseline: 13.53125
+ frag 0 from TextNode start: 0, length: 3, rect: [71,71 26.640625x17.46875]
+ "top"
+ TextNode <#text>
+ BlockContainer | at (219.640625,101.265625) content-size 45.4375x17.46875 table-cell [BFC] children: inline
+ line 0 width: 45.4375, height: 17.46875, bottom: 17.46875, baseline: 13.53125
+ frag 0 from TextNode start: 0, length: 6, rect: [219.640625,101.265625 45.4375x17.46875]
+ "middle"
+ TextNode <#text>
+ BlockContainer | at (387.078125,131.53125) content-size 56.109375x17.46875 table-cell [BFC] children: inline
+ line 0 width: 56.109375, height: 17.46875, bottom: 17.46875, baseline: 13.53125
+ frag 0 from TextNode start: 0, length: 6, rect: [387.078125,131.53125 56.109375x17.46875]
+ "bottom"
+ TextNode <#text>
+ BlockContainer <(anonymous)> (not painted) children: inline
+ TextNode <#text>
+
+ViewportPaintable (Viewport<#document>) [0,0 800x600]
+ PaintableWithLines (BlockContainer) [0,0 800x220]
+ PaintableWithLines (BlockContainer) [8,8 784x204]
+ PaintableWithLines (TableWrapper(anonymous)) [8,8 498.1875x204]
+ PaintableBox (Box) [8,8 498.1875x204]
+ PaintableBox (Box) [9,9 488.1875x198] overflow: [9,9 494.1875x200]
+ PaintableBox (Box) [11,11 488.1875x198] overflow: [11,11 492.1875x198]
+ PaintableWithLines (BlockContainer) [11,11 146.640625x198]
+ TextPaintable (TextNode<#text>)
+ PaintableWithLines (BlockContainer | ) [159.640625,11 165.4375x198]
+ TextPaintable (TextNode<#text>)
+ PaintableWithLines (BlockContainer | ) [327.078125,11 176.109375x198]
+ TextPaintable (TextNode<#text>)
diff --git a/Tests/LibWeb/Layout/input/table/table-cellpadding.html b/Tests/LibWeb/Layout/input/table/table-cellpadding.html
new file mode 100644
index 0000000000..d160256267
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/table/table-cellpadding.html
@@ -0,0 +1,6 @@
+top | middle | bottom |
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTableCellElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLTableCellElement.cpp
index 8959afac95..cf98cda984 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTableCellElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTableCellElement.cpp
@@ -85,7 +85,16 @@ void HTMLTableCellElement::apply_presentational_hints(CSS::StyleProperties& styl
}
});
auto const& table_element = table_containing_cell(*this);
+
+ if (auto padding = table_element.padding()) {
+ style.set_property(CSS::PropertyID::PaddingTop, CSS::LengthStyleValue::create(CSS::Length::make_px(padding)));
+ style.set_property(CSS::PropertyID::PaddingBottom, CSS::LengthStyleValue::create(CSS::Length::make_px(padding)));
+ style.set_property(CSS::PropertyID::PaddingLeft, CSS::LengthStyleValue::create(CSS::Length::make_px(padding)));
+ style.set_property(CSS::PropertyID::PaddingRight, CSS::LengthStyleValue::create(CSS::Length::make_px(padding)));
+ }
+
auto border = table_element.border();
+
if (!border)
return;
auto apply_border_style = [&](CSS::PropertyID style_property, CSS::PropertyID width_property, CSS::PropertyID color_property) {
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp
index 70a4a5899a..9f535e607a 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.cpp
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
@@ -100,6 +101,19 @@ void HTMLTableElement::apply_presentational_hints(CSS::StyleProperties& style) c
});
}
+void HTMLTableElement::attribute_changed(FlyString const& name, Optional const& value)
+{
+ Base::attribute_changed(name, value);
+ if (name == HTML::AttributeNames::cellpadding) {
+ if (value.has_value())
+ m_padding = max(0, parse_integer(value.value()).value_or(0));
+ else
+ m_padding = 1;
+
+ return;
+ }
+}
+
// https://html.spec.whatwg.org/multipage/tables.html#dom-table-caption
JS::GCPtr HTMLTableElement::caption()
{
@@ -424,4 +438,9 @@ unsigned int HTMLTableElement::border() const
return parse_border(deprecated_attribute(HTML::AttributeNames::border));
}
+unsigned int HTMLTableElement::padding() const
+{
+ return m_padding;
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h
index 36888a78fa..8f6c3bba0b 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTableElement.h
@@ -47,6 +47,7 @@ public:
virtual Optional default_role() const override { return ARIA::Role::table; }
unsigned border() const;
+ unsigned padding() const;
private:
HTMLTableElement(DOM::Document&, DOM::QualifiedName);
@@ -57,9 +58,11 @@ private:
virtual void visit_edges(Cell::Visitor&) override;
virtual void apply_presentational_hints(CSS::StyleProperties&) const override;
+ virtual void attribute_changed(FlyString const& name, Optional const& value) override;
JS::GCPtr mutable m_rows;
JS::GCPtr mutable m_t_bodies;
+ unsigned m_padding { 1 };
};
}
| |