Defect #40650 » 0002-Fix-alt-and-title-attributes-for-attached-images-in-Wiki.patch
| app/helpers/application_helper.rb | ||
|---|---|---|
| 944 | 944 |
attachments += obj.attachments if obj.respond_to?(:attachments) |
| 945 | 945 |
end |
| 946 | 946 |
if attachments.present? |
| 947 |
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png|webp))"(\s+alt="([^"]*)")?/i) do |m| |
|
| 948 |
filename, ext, alt, alttext = $1, $2, $3, $4 |
|
| 947 |
title_and_alt_re = /\s+(title|alt)="([^"]*)"/i |
|
| 948 | ||
| 949 |
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png|webp))"([^>]*)/i) do |m| |
|
| 950 |
filename, ext, other_attrs = $1, $2, $3 |
|
| 951 | ||
| 949 | 952 |
# search for the picture in attachments |
| 950 | 953 |
if found = Attachment.latest_attach(attachments, CGI.unescape(filename)) |
| 951 | 954 |
image_url = download_named_attachment_url(found, found.filename, :only_path => only_path) |
| 952 | 955 |
desc = found.description.to_s.delete('"')
|
| 953 |
if !desc.blank? && alttext.blank? |
|
| 954 |
alt = " title=\"#{desc}\" alt=\"#{desc}\""
|
|
| 955 |
end |
|
| 956 |
"src=\"#{image_url}\"#{alt} loading=\"lazy\""
|
|
| 956 | ||
| 957 |
# remove title and alt attributes after extracting them |
|
| 958 |
title_and_alt = other_attrs.scan(title_and_alt_re).to_h |
|
| 959 |
other_attrs.gsub!(title_and_alt_re, '') |
|
| 960 | ||
| 961 |
title_and_alt_attrs = if !desc.blank? && title_and_alt['alt'].blank? |
|
| 962 |
" title=\"#{desc}\" alt=\"#{desc}\""
|
|
| 963 |
else |
|
| 964 |
# restore original title and alt attributes |
|
| 965 |
" #{title_and_alt.map { |k, v| %[#{k}="#{v}"] }.join(' ')}"
|
|
| 966 |
end |
|
| 967 |
"src=\"#{image_url}\"#{title_and_alt_attrs} loading=\"lazy\"#{other_attrs}"
|
|
| 957 | 968 |
else |
| 958 | 969 |
m |
| 959 | 970 |
end |
| test/helpers/application_helper_test.rb | ||
|---|---|---|
| 202 | 202 |
attachments = Attachment.all |
| 203 | 203 |
with_settings text_formatting: 'textile' do |
| 204 | 204 |
# When alt text is set |
| 205 |
assert_match %r[<img src=".+?" title="This is a logo" alt="This is a logo" loading=".+?" title="alt text" alt="alt text" />],
|
|
| 205 |
assert_match %r[<img src=".+?" title="alt text" alt="alt text" loading=".+?" />],
|
|
| 206 | 206 |
textilizable('!logo.gif(alt text)!', attachments: attachments)
|
| 207 | 207 | |
| 208 | 208 |
# When alt text and style are set |
| 209 |
assert_match %r[<img src=".+?" title="This is a logo" alt="This is a logo" loading=".+?" style="width:100px;" title="alt text" alt="alt text" />],
|
|
| 209 |
assert_match %r[<img src=".+?" title="alt text" alt="alt text" loading=".+?" style="width:100px;" />],
|
|
| 210 | 210 |
textilizable('!{width:100px}logo.gif(alt text)!', attachments: attachments)
|
| 211 | 211 | |
| 212 | 212 |
# When alt text is not set |
- « Previous
- 1
- 2
- 3
- 4
- Next »