-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.js
93 lines (76 loc) · 2.32 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import { Outcome } from "@siteimprove/alfa-act";
import { Node } from "@siteimprove/alfa-aria";
import { Element, Text } from "@siteimprove/alfa-dom";
import { Rules } from "@siteimprove/alfa-rules";
import { Page } from "@siteimprove/alfa-web";
import { Style } from "@siteimprove/alfa-style";
let _page;
export function page() {
if (!_page) {
_page = Page.from(
JSON.parse(document.getElementById("page").value),
).getUnsafe();
}
return _page;
}
export function audit(rule) {
return Rules.get(rule).getUnsafe().evaluate(page());
}
export async function summarize(rule) {
const result = await audit(rule);
const cantTell = result.filter(Outcome.isCantTell);
const passed = result.filter(Outcome.isPassed);
const failed = result.filter(Outcome.isFailed);
console.log(
`cantTell: ${cantTell.length}, passed: ${passed.length}, failed: ${failed.length}`,
);
}
export function getElements() {
return page().document.descendants().filter(Element.isElement);
}
export function getElementById(id) {
return page()
.document.descendants()
.filter(Element.isElement)
.find((element) => element.id.includes(id));
}
export function getElementsByClassName(className) {
return page()
.document.descendants()
.filter(Element.isElement)
.filter((element) => element.classes.includes(className));
}
export function getElementsByTagName(tagName) {
return page()
.document.descendants()
.filter(Element.isElement)
.filter(Element.hasName(tagName));
}
export function getElementsByText(str) {
return page()
.document.descendants()
.filter(Text.isText)
.filter((text) => text.data.includes(str))
.map((text) => text.parent().getUnsafe())
.filter(Element.isElement);
}
export function getComputedStyle(element, property) {
return Style.from(element, page().device).computed(property);
}
export function getAriaNode(element) {
return Node.from(element, page().device);
}
export function createDomElement(element) {
const domElement = document.createElement(element.name);
for (let attr of element.attributes) {
domElement.setAttribute(attr.name, attr.value);
}
for (let child of element.children()) {
if (Text.isText(child)) {
domElement.append(child.data);
} else {
domElement.append(createDomElement(child));
}
}
return domElement;
}