Browse Source

LibWeb: Add Layout::Node::debug_description()

This returns a String with this format:

- LayoutNodeClassName<TAG_NAME>#id.class1.class2.class3

I've rewritten this function 10+ times at this point, so I'm just gonna
add it to the repository for future debugging needs. :^)
Andreas Kling 3 years ago
parent
commit
c8051f8b5b

+ 19 - 0
Userland/Libraries/LibWeb/Layout/Node.cpp

@@ -527,6 +527,25 @@ String Node::class_name() const
     return demangle(typeid(*this).name());
     return demangle(typeid(*this).name());
 }
 }
 
 
+String Node::debug_description() const
+{
+    StringBuilder builder;
+    builder.append(class_name().substring_view(13));
+    if (dom_node()) {
+        builder.appendff("<{}>", dom_node()->node_name());
+        if (dom_node()->is_element()) {
+            auto& element = static_cast<DOM::Element const&>(*dom_node());
+            if (auto id = element.get_attribute(HTML::AttributeNames::id); !id.is_null())
+                builder.appendff("#{}", id);
+            for (auto const& class_name : element.class_names())
+                builder.appendff(".{}", class_name);
+        }
+    } else {
+        builder.append("(anonymous)");
+    }
+    return builder.to_string();
+}
+
 bool Node::is_inline_block() const
 bool Node::is_inline_block() const
 {
 {
     return is_inline() && is<BlockContainer>(*this);
     return is_inline() && is<BlockContainer>(*this);

+ 1 - 0
Userland/Libraries/LibWeb/Layout/Node.h

@@ -74,6 +74,7 @@ public:
     bool is_root_element() const;
     bool is_root_element() const;
 
 
     String class_name() const;
     String class_name() const;
+    String debug_description() const;
 
 
     bool has_style() const { return m_has_style; }
     bool has_style() const { return m_has_style; }