Explorar el Código

LibWeb: Let <br> elements have style

At the very least, we need to respect `<br style="display: none">`
Andreas Kling hace 3 años
padre
commit
5a7d3e3cc1

+ 6 - 2
Userland/Libraries/LibWeb/HTML/HTMLBRElement.cpp

@@ -1,9 +1,10 @@
 /*
- * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibWeb/DOM/Document.h>
 #include <LibWeb/HTML/HTMLBRElement.h>
 #include <LibWeb/Layout/BreakNode.h>
 
@@ -20,7 +21,10 @@ HTMLBRElement::~HTMLBRElement()
 
 RefPtr<Layout::Node> HTMLBRElement::create_layout_node()
 {
-    return adopt_ref(*new Layout::BreakNode(document(), *this));
+    auto style = document().style_resolver().resolve_style(*this);
+    if (style->display() == CSS::Display::None)
+        return nullptr;
+    return adopt_ref(*new Layout::BreakNode(document(), *this, move(style)));
 }
 
 }

+ 2 - 2
Userland/Libraries/LibWeb/Layout/BreakNode.cpp

@@ -10,8 +10,8 @@
 
 namespace Web::Layout {
 
-BreakNode::BreakNode(DOM::Document& document, HTML::HTMLBRElement& element)
-    : Layout::NodeWithStyleAndBoxModelMetrics(document, &element, CSS::StyleProperties::create())
+BreakNode::BreakNode(DOM::Document& document, HTML::HTMLBRElement& element, NonnullRefPtr<CSS::StyleProperties> style)
+    : Layout::NodeWithStyleAndBoxModelMetrics(document, &element, move(style))
 {
     set_inline(true);
 }

+ 1 - 1
Userland/Libraries/LibWeb/Layout/BreakNode.h

@@ -13,7 +13,7 @@ namespace Web::Layout {
 
 class BreakNode final : public NodeWithStyleAndBoxModelMetrics {
 public:
-    BreakNode(DOM::Document&, HTML::HTMLBRElement&);
+    BreakNode(DOM::Document&, HTML::HTMLBRElement&, NonnullRefPtr<CSS::StyleProperties>);
     virtual ~BreakNode() override;
 
     const HTML::HTMLBRElement& dom_node() const { return verify_cast<HTML::HTMLBRElement>(*Node::dom_node()); }