mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-12-16 08:18:59 +00:00
axtree: fix json export
This commit is contained in:
@@ -89,7 +89,11 @@ pub const Writer = struct {
|
|||||||
|
|
||||||
const AXValue = struct {
|
const AXValue = struct {
|
||||||
type: enum(u8) { boolean, tristate, booleanOrUndefined, idref, idrefList, integer, node, nodeList, number, string, computedString, token, tokenList, domRelation, role, internalRole, valueUndefined },
|
type: enum(u8) { boolean, tristate, booleanOrUndefined, idref, idrefList, integer, node, nodeList, number, string, computedString, token, tokenList, domRelation, role, internalRole, valueUndefined },
|
||||||
value: ?[]const u8 = null,
|
value: ?union(enum) {
|
||||||
|
string: []const u8,
|
||||||
|
uint: usize,
|
||||||
|
boolean: bool,
|
||||||
|
} = null,
|
||||||
// TODO relatedNodes
|
// TODO relatedNodes
|
||||||
source: ?AXSource = null,
|
source: ?AXSource = null,
|
||||||
};
|
};
|
||||||
@@ -133,7 +137,11 @@ pub const Writer = struct {
|
|||||||
|
|
||||||
if (value.value) |v| {
|
if (value.value) |v| {
|
||||||
try w.objectField("value");
|
try w.objectField("value");
|
||||||
try w.write(v);
|
switch (v) {
|
||||||
|
.uint => try w.write(v.uint),
|
||||||
|
.string => try w.write(v.string),
|
||||||
|
.boolean => try w.write(v.boolean),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.source) |source| {
|
if (value.source) |source| {
|
||||||
@@ -152,8 +160,8 @@ pub const Writer = struct {
|
|||||||
switch (parser.nodeType(node)) {
|
switch (parser.nodeType(node)) {
|
||||||
.document => {
|
.document => {
|
||||||
const uri = try parser.documentGetDocumentURI(@ptrCast(node));
|
const uri = try parser.documentGetDocumentURI(@ptrCast(node));
|
||||||
try self.writeAXProperty(.{ .name = .url, .value = .{ .type = .string, .value = uri } }, w);
|
try self.writeAXProperty(.{ .name = .url, .value = .{ .type = .string, .value = .{ .string = uri } } }, w);
|
||||||
try self.writeAXProperty(.{ .name = .focusable, .value = .{ .type = .booleanOrUndefined, .value = "true" } }, w);
|
try self.writeAXProperty(.{ .name = .focusable, .value = .{ .type = .booleanOrUndefined, .value = .{ .boolean = true } } }, w);
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
.element => {},
|
.element => {},
|
||||||
@@ -167,22 +175,22 @@ pub const Writer = struct {
|
|||||||
|
|
||||||
const tag = try parser.elementTag(elt);
|
const tag = try parser.elementTag(elt);
|
||||||
return switch (tag) {
|
return switch (tag) {
|
||||||
.h1 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = "1" } }, w),
|
.h1 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = .{ .uint = 1 } } }, w),
|
||||||
.h2 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = "2" } }, w),
|
.h2 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = .{ .uint = 2 } } }, w),
|
||||||
.h3 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = "3" } }, w),
|
.h3 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = .{ .uint = 3 } } }, w),
|
||||||
.h4 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = "4" } }, w),
|
.h4 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = .{ .uint = 4 } } }, w),
|
||||||
.h5 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = "5" } }, w),
|
.h5 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = .{ .uint = 5 } } }, w),
|
||||||
.h6 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = "6" } }, w),
|
.h6 => try self.writeAXProperty(.{ .name = .level, .value = .{ .type = .integer, .value = .{ .uint = 6 } } }, w),
|
||||||
.img => {
|
.img => {
|
||||||
if (try parser.elementGetAttribute(elt, "href")) |uri| {
|
if (try parser.elementGetAttribute(elt, "href")) |uri| {
|
||||||
try self.writeAXProperty(.{ .name = .url, .value = .{ .type = .string, .value = uri } }, w);
|
try self.writeAXProperty(.{ .name = .url, .value = .{ .type = .string, .value = .{ .string = uri } } }, w);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.a => {
|
.a => {
|
||||||
if (try parser.elementGetAttribute(elt, "href")) |uri| {
|
if (try parser.elementGetAttribute(elt, "href")) |uri| {
|
||||||
try self.writeAXProperty(.{ .name = .url, .value = .{ .type = .string, .value = uri } }, w);
|
try self.writeAXProperty(.{ .name = .url, .value = .{ .type = .string, .value = .{ .string = uri } } }, w);
|
||||||
}
|
}
|
||||||
try self.writeAXProperty(.{ .name = .focusable, .value = .{ .type = .booleanOrUndefined, .value = "true" } }, w);
|
try self.writeAXProperty(.{ .name = .focusable, .value = .{ .type = .booleanOrUndefined, .value = .{ .boolean = true } } }, w);
|
||||||
},
|
},
|
||||||
else => {},
|
else => {},
|
||||||
};
|
};
|
||||||
@@ -216,13 +224,13 @@ pub const Writer = struct {
|
|||||||
try w.objectField("name");
|
try w.objectField("name");
|
||||||
try w.write("uninteresting");
|
try w.write("uninteresting");
|
||||||
try w.objectField("value");
|
try w.objectField("value");
|
||||||
try self.writeAXValue(.{ .type = .boolean, .value = "true" }, w);
|
try self.writeAXValue(.{ .type = .boolean, .value = .{ .boolean = true } }, w);
|
||||||
try w.endObject();
|
try w.endObject();
|
||||||
try w.endArray();
|
try w.endArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
try w.objectField("role");
|
try w.objectField("role");
|
||||||
try self.writeAXValue(.{ .type = .role, .value = try axn.getRole() }, w);
|
try self.writeAXValue(.{ .type = .role, .value = .{ .string = try axn.getRole() } }, w);
|
||||||
|
|
||||||
if (!ignore) {
|
if (!ignore) {
|
||||||
try w.objectField("name");
|
try w.objectField("name");
|
||||||
@@ -329,11 +337,11 @@ pub const AXRole = enum(u8) {
|
|||||||
term,
|
term,
|
||||||
textbox,
|
textbox,
|
||||||
time,
|
time,
|
||||||
WebArea,
|
WebRootArea,
|
||||||
|
|
||||||
fn fromNode(node: *parser.Node) !AXRole {
|
fn fromNode(node: *parser.Node) !AXRole {
|
||||||
switch (parser.nodeType(node)) {
|
switch (parser.nodeType(node)) {
|
||||||
.document => return .WebArea, // Chrome specific.
|
.document => return .WebRootArea, // Chrome specific.
|
||||||
.element => {},
|
.element => {},
|
||||||
else => {
|
else => {
|
||||||
log.debug(.cdp, "invalid tag", .{ .node_type = parser.nodeType(node) });
|
log.debug(.cdp, "invalid tag", .{ .node_type = parser.nodeType(node) });
|
||||||
|
|||||||
Reference in New Issue
Block a user