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
|
# File 'lib/html_proofer/check/images.rb', line 8
def run
@html.css("img, source").each do |node|
@img = create_element(node)
next if @img.ignore?
add_failure(
"image has a terrible filename (#{@img.url.raw_attribute})",
element: @img,
) if terrible_filename?
if missing_src?
add_failure("image has no src or srcset attribute", element: @img)
elsif @img.multiple_srcsets? || @img.multiple_sizes?
@img.srcsets_wo_sizes.each do |srcset|
srcset_url = HTMLProofer::Attribute::Url.new(@runner, srcset, base_url: @img.base_url, source: @img.url.source, filename: @img.url.filename, extract_size: true)
if srcset_url.protocol_relative?
add_failure(
"image link #{srcset_url.url} is a protocol-relative URL, use explicit https:// instead",
element: @img,
)
elsif srcset_url.remote?
add_to_external_urls(srcset_url.url, @img.line)
elsif !srcset_url.exists?
add_failure("internal image #{srcset} does not exist", element: @img)
end
end
elsif @img.url.protocol_relative?
add_failure(
"image link #{@img.url} is a protocol-relative URL, use explicit https:// instead",
element: @img,
)
elsif @img.url.remote?
add_to_external_urls(@img.url, @img.line)
elsif !@img.url.exists? && !@img.multiple_srcsets? && !@img.multiple_sizes?
add_failure(
"internal image #{@img.url.raw_attribute} does not exist",
element: @img,
)
end
if @img.img_tag? && !ignore_element?
if missing_alt_tag? && !ignore_missing_alt?
add_failure(
"image #{@img.url.raw_attribute} does not have an alt attribute",
element: @img,
)
elsif (empty_alt_tag? || alt_all_spaces?) && !ignore_empty_alt?
add_failure(
"image #{@img.url.raw_attribute} has an alt attribute, but no content",
element: @img,
)
end
end
add_failure(
"image #{@img.url.raw_attribute} uses the http scheme",
element: @img,
) if @runner.enforce_https? && @img.url.http?
end
external_urls
end
|