Packages
nldoc_validation
3.0.0
4.0.42
4.0.41
4.0.40
4.0.39
4.0.38
4.0.37
4.0.36
4.0.35
4.0.34
4.0.33
4.0.32
4.0.31
4.0.30
4.0.29
4.0.28
4.0.27
4.0.26
4.0.25
4.0.24
4.0.23
4.0.22
4.0.21
4.0.20
4.0.19
4.0.18
4.0.17
4.0.16
4.0.15
4.0.14
4.0.12
4.0.11
4.0.10
4.0.9
4.0.8
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.3.17
2.3.16
2.3.15
2.3.14
2.3.13
2.3.12
2.3.11
2.3.10
2.3.9
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.0
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
1.0.0
WCAG validator for the NLdoc specification.
Current section
Files
Jump to
Current section
Files
lib/nldoc/validation/rules/page_starts_with_heading_one.ex
defmodule NLdoc.Validation.Rules.PageStartsWithHeadingOne do
@moduledoc """
This rule validates that a document starts with a Heading with level 1.
It produces a validation finding on the first heading with level 1 found in the document,
if it is not the first element in the document.
Note: this rule will *not* produce a validation finding if the document does not contain a heading with level 1.
"""
alias NLdoc.Spec.{Document, Heading}
alias NLdoc.Validation.Severity
use NLdoc.Validation.Rule,
severity: Severity.warning(),
rule: "page-starts-with-heading-one",
ruleset: "https://validation.spec.nldoc.nl/",
# @TODO set `ruleset_version` to a real version
ruleset_version: "unknown",
validates: [Document]
def validate(%Document{children: children}, state = %State{}) do
heading_one = children |> NLdoc.Spec.find_recursive(&heading_one?/1)
first_element = children |> Enum.at(0)
case heading_one do
nil -> state
^first_element -> state
_ -> state |> State.prepend(:findings, make_finding(heading_one.id))
end
end
defp heading_one?(%Heading{level: 1}), do: true
defp heading_one?(_), do: false
end