Pure HTML accessibility checks for MoonBit projects.
Dependencies
import {
"youyong5/a11ytrace" @a11ytrace,
}
match @a11ytrace.audit_html("<img src=\"logo.svg\">") {
Findings(findings) => println(findings[0].element_path)
FindingsWithParseErrors(findings, errors) => {
println(findings[0].element_path)
println(errors[0].message)
}
ParseErrors(errors) => println(errors[0].message)
}let selected = ["img-alt-missing", "heading-level-skipped"]
match @a11ytrace.audit_html_with_rules(html, selected) {
Audited(Findings(findings)) => ()
Audited(FindingsWithParseErrors(findings, errors)) => ()
Audited(ParseErrors(errors)) => ()
ConfigurationError(UnknownRuleId(rule_id)) =>
// Correct the rule ID before running an audit.
()
}match @a11ytrace.rule_metadata("aria-hidden-focus-review") {
Some(rule) => println(rule.boundary)
None => ()
}
let page_rules = @a11ytrace.document_rule_ids()let card = "<button></button><img src=\"report.png\">"
match @a11ytrace.audit_html_fragment_with_rules(
card,
["button-name-missing", "img-alt-missing"],
) {
Audited(result) => {
let json = @a11ytrace.render_audit_json(result)
// Consume the component findings in document order.
}
ConfigurationError(UnknownRuleId(rule_id)) => ()
}///|
let page = "<!doctype html><html lang=\"en\"><head><title>Orders</title></head><body></body></html>"
///|
let result = @a11ytrace.audit_html(page)moon run --target native examples/consumerimport {
"moonbitlang/core/json" @json,
"youyong5/a11ytrace" @a11ytrace,
}
match @a11ytrace.audit_html_with_rules(html, ["img-alt-missing"]) {
Audited(result) => {
let document = @a11ytrace.render_audit_json(result)
let parsed = @json.parse(document)
// Read the documented status/findings/parse_diagnostics fields from parsed.
}
ConfigurationError(UnknownRuleId(rule_id)) => ()
}///|
let detailed = @a11ytrace.audit_html_fragment_detailed(
"<div aria-hidden=\"true\"><button aria-label=\"Close\"></button></div>",
)
///|
let json = @a11ytrace.render_detailed_audit_json(detailed)
// detailed.findings: confirmed static signals
// detailed.review_items: browser/CSS review neededmoon run --target native cmd/a11ytrace -- examples/cli-example.html
moon run --target native cmd/a11ytrace -- examples/cli-example.html --format json
moon run --target native cmd/a11ytrace -- examples/review-only.html --format detailed-json
moon run --target native cmd/a11ytrace -- examples/cli-example.html --rules img-alt-missing,link-name-missing
moon run --target native cmd/a11ytrace -- --helpmatch @a11ytrace.audit_html("<img src=\"chart.svg\"><input placeholder=\"Email\">") {
Findings(findings) => {
// findings[0].rule_id == "img-alt-missing"
// findings[1].rule_id == "form-control-name-missing"
}
FindingsWithParseErrors(findings, errors) => ()
ParseErrors(errors) => ()
}match @a11ytrace.audit_html("<img src=\"chart.svg\"><input><a href=\"/details\"></a><button></button><h2>Section</h2><h4></h4>") {
Findings(findings) => {
// image, form, link, button, heading-level, and heading-name findings
}
FindingsWithParseErrors(findings, errors) => ()
ParseErrors(errors) => ()
}pub(all) enum AuditResult {
Findings(Array[Finding])
FindingsWithParseErrors(Array[Finding], Array[ParseDiagnostic])
ParseErrors(Array[ParseDiagnostic])
}pub(all) enum ConfiguredAuditResult {
Audited(AuditResult)
ConfigurationError(RuleConfigurationError)
}pub(all) struct DetailedAuditResult {
status : DetailedAuditStatus
findings : Array[Finding]
parse_diagnostics : Array[ParseDiagnostic]
review_items : Array[ReviewItem]
}pub(all) enum DetailedAuditStatus {
Findings
FindingsWithParseErrors
ParseErrors
}pub(all) enum DetailedConfiguredAuditResult {
Audited(DetailedAuditResult)
ConfigurationError(RuleConfigurationError)
}pub(all) struct Finding {
rule_id : String
message : String
suggestion : String
element_path : String
line : Int?
column : Int?
}pub(all) struct ParseDiagnostic {
code : String
message : String
line : Int?
column : Int?
}pub(all) struct ReviewItem {
rule_id : String
reason : String
element_path : String
line : Int?
column : Int?
}pub(all) enum RuleCategory {
ContentName
DocumentStructure
Interaction
Relationships
Aria
Timing
}pub(all) enum RuleConfigurationError {
UnknownRuleId(String)
}pub(all) struct RuleMetadata {
id : String
summary : String
category : RuleCategory
scope : RuleScope
result_kind : RuleResultKind
reference_url : String
boundary : String
}pub(all) enum RuleResultKind {
ConfirmedFinding
StaticHint
ManualReview
}pub(all) enum RuleScope {
Document
Fragment
DocumentOrFragment
}fn audit_html_detailed_with_rules(html : String, enabled_rule_ids : Array[String]) -> DetailedConfiguredAuditResultfn audit_html_fragment_detailed_with_rules(fragment : String, enabled_rule_ids : Array[String]) -> DetailedConfiguredAuditResultfn audit_html_fragment_with_rules(fragment : String, enabled_rule_ids : Array[String]) -> ConfiguredAuditResultInstall
Download zipPure HTML accessibility checks for MoonBit projects.
Dependencies