mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:37:43 +00:00
LibWeb: Serialize Accessible Name and Description for Accessibility Tree
These will get displayed in the DOM inspector.
This commit is contained in:
parent
da5c9189b2
commit
29d724d95c
3 changed files with 10 additions and 5 deletions
|
@ -24,7 +24,7 @@ AccessibilityTreeNode::AccessibilityTreeNode(JS::GCPtr<DOM::Node> value)
|
||||||
m_children = {};
|
m_children = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccessibilityTreeNode::serialize_tree_as_json(JsonObjectSerializer<StringBuilder>& object) const
|
void AccessibilityTreeNode::serialize_tree_as_json(JsonObjectSerializer<StringBuilder>& object, Document const& document) const
|
||||||
{
|
{
|
||||||
if (value()->is_document()) {
|
if (value()->is_document()) {
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
|
@ -37,6 +37,11 @@ void AccessibilityTreeNode::serialize_tree_as_json(JsonObjectSerializer<StringBu
|
||||||
auto role = element->role_or_default();
|
auto role = element->role_or_default();
|
||||||
bool has_role = role.has_value() && !ARIA::is_abstract_role(*role);
|
bool has_role = role.has_value() && !ARIA::is_abstract_role(*role);
|
||||||
|
|
||||||
|
auto name = MUST(element->accessible_name(document));
|
||||||
|
MUST(object.add("name"sv, name));
|
||||||
|
auto description = MUST(element->accessible_description(document));
|
||||||
|
MUST(object.add("description"sv, description));
|
||||||
|
|
||||||
if (has_role)
|
if (has_role)
|
||||||
MUST(object.add("role"sv, ARIA::role_name(*role)));
|
MUST(object.add("role"sv, ARIA::role_name(*role)));
|
||||||
else
|
else
|
||||||
|
@ -54,11 +59,11 @@ void AccessibilityTreeNode::serialize_tree_as_json(JsonObjectSerializer<StringBu
|
||||||
|
|
||||||
if (value()->has_child_nodes()) {
|
if (value()->has_child_nodes()) {
|
||||||
auto node_children = MUST(object.add_array("children"sv));
|
auto node_children = MUST(object.add_array("children"sv));
|
||||||
for (auto child : children()) {
|
for (auto* child : children()) {
|
||||||
if (child->value()->is_uninteresting_whitespace_node())
|
if (child->value()->is_uninteresting_whitespace_node())
|
||||||
continue;
|
continue;
|
||||||
JsonObjectSerializer<StringBuilder> child_object = MUST(node_children.add_object());
|
JsonObjectSerializer<StringBuilder> child_object = MUST(node_children.add_object());
|
||||||
child->serialize_tree_as_json(child_object);
|
child->serialize_tree_as_json(child_object, document);
|
||||||
MUST(child_object.finish());
|
MUST(child_object.finish());
|
||||||
}
|
}
|
||||||
MUST(node_children.finish());
|
MUST(node_children.finish());
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
Vector<AccessibilityTreeNode*> children() const { return m_children; }
|
Vector<AccessibilityTreeNode*> children() const { return m_children; }
|
||||||
void append_child(AccessibilityTreeNode* child) { m_children.append(child); }
|
void append_child(AccessibilityTreeNode* child) { m_children.append(child); }
|
||||||
|
|
||||||
void serialize_tree_as_json(JsonObjectSerializer<StringBuilder>& object) const;
|
void serialize_tree_as_json(JsonObjectSerializer<StringBuilder>& object, Document const&) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void visit_edges(Visitor&) override;
|
virtual void visit_edges(Visitor&) override;
|
||||||
|
|
|
@ -2362,7 +2362,7 @@ DeprecatedString Document::dump_accessibility_tree_as_json()
|
||||||
MUST(json.add("type"sv, "element"sv));
|
MUST(json.add("type"sv, "element"sv));
|
||||||
MUST(json.add("role"sv, "document"sv));
|
MUST(json.add("role"sv, "document"sv));
|
||||||
} else {
|
} else {
|
||||||
accessibility_tree->serialize_tree_as_json(json);
|
accessibility_tree->serialize_tree_as_json(json, *this);
|
||||||
}
|
}
|
||||||
|
|
||||||
MUST(json.finish());
|
MUST(json.finish());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue