mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-08 09:09:43 +00:00
LibWeb: Add JSON serialization method to DOM::Node
This method builds a JSON object representing the full state of the DOM tree. The JSON that is built will be used for building the DOM Inspector widget for the OutOfProcessWebView.
This commit is contained in:
parent
f4eab69785
commit
4affe052b8
Notes:
sideshowbarker
2024-07-18 11:15:39 +09:00
Author: https://github.com/ant1441
Commit: 4affe052b8
Pull-request: https://github.com/SerenityOS/serenity/pull/7900
Issue: https://github.com/SerenityOS/serenity/issues/5267
Reviewed-by: https://github.com/MaxWipfli
4 changed files with 48 additions and 0 deletions
|
@ -606,4 +606,36 @@ RefPtr<Document> Node::owner_document() const
|
|||
return m_document;
|
||||
}
|
||||
|
||||
void Node::serialize_tree_as_json(JsonObjectSerializer<StringBuilder>& object) const
|
||||
{
|
||||
object.add("name", node_name().view());
|
||||
object.add("internal_id", (size_t)this);
|
||||
if (is_document())
|
||||
object.add("type", "document");
|
||||
else if (is_element()) {
|
||||
object.add("type", "element");
|
||||
|
||||
auto element = downcast<DOM::Element>(this);
|
||||
if (element->has_attributes()) {
|
||||
auto attributes = object.add_object("attributes");
|
||||
element->for_each_attribute([&attributes](auto& name, auto& value) {
|
||||
attributes.add(name, value);
|
||||
});
|
||||
}
|
||||
} else if (is_text()) {
|
||||
object.add("type", "text");
|
||||
|
||||
auto text_node = downcast<DOM::Text>(this);
|
||||
object.add("text", text_node->data());
|
||||
}
|
||||
|
||||
if (has_child_nodes()) {
|
||||
auto children = object.add_array("children");
|
||||
for_each_child([&children](DOM::Node& child) {
|
||||
JsonObjectSerializer<StringBuilder> child_object = children.add_object();
|
||||
child.serialize_tree_as_json(child_object);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue