mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +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: https://github.com/SerenityOS/serenity/commit/4affe052b8e Pull-request: https://github.com/SerenityOS/serenity/pull/7900 Issue: https://github.com/SerenityOS/serenity/issues/5267 Reviewed-by: https://github.com/MaxWipfli
|
@ -934,4 +934,14 @@ void Document::set_cookie(String cookie_string, Cookie::Source source)
|
|||
page->client().page_did_set_cookie(m_url, cookie.value(), source);
|
||||
}
|
||||
|
||||
String Document::dump_dom_tree_as_json() const
|
||||
{
|
||||
StringBuilder builder;
|
||||
JsonObjectSerializer json(builder);
|
||||
serialize_tree_as_json(json);
|
||||
|
||||
json.finish();
|
||||
return builder.to_string();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -267,6 +267,8 @@ public:
|
|||
|
||||
virtual EventTarget* get_parent(const Event&) override;
|
||||
|
||||
String dump_dom_tree_as_json() const;
|
||||
|
||||
private:
|
||||
explicit Document(const URL&);
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Badge.h>
|
||||
#include <AK/JsonObjectSerializer.h>
|
||||
#include <AK/RefPtr.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/TypeCasts.h>
|
||||
|
@ -162,6 +163,9 @@ public:
|
|||
|
||||
bool is_host_including_inclusive_ancestor_of(const Node&) const;
|
||||
|
||||
// Used for dumping the DOM Tree
|
||||
void serialize_tree_as_json(JsonObjectSerializer<StringBuilder>&) const;
|
||||
|
||||
protected:
|
||||
Node(Document&, NodeType);
|
||||
|
||||
|
|
Loading…
Reference in a new issue