feat(a11y): allow trusted markdown (FAQ) to set any custom attributes in img
This commit is contained in:
parent
bb89c03679
commit
efa5122ce0
3 changed files with 26 additions and 3 deletions
|
@ -34,8 +34,26 @@ module Redcarpet
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def image(link, title, alt)
|
def image(link, title, alt_text)
|
||||||
view_context.image_tag(link, title:, alt:, loading: :lazy)
|
# Extrait les attributs personnalisés s'ils existent sous la forme { aria-hidden=true } dans les []
|
||||||
|
custom_attributes = {}
|
||||||
|
if alt_text =~ /\s*\{(.+)\}$/
|
||||||
|
attr_string = Regexp.last_match(1)
|
||||||
|
alt_text = alt_text.sub(/\s*\{.+\}$/, '').strip
|
||||||
|
attr_string.split(' ').each do |attr|
|
||||||
|
key, value = attr.split('=')
|
||||||
|
custom_attributes[key.strip] = value.strip.delete('"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Combine les attributs standard et personnalisés
|
||||||
|
image_options = {
|
||||||
|
alt: alt_text,
|
||||||
|
title:,
|
||||||
|
loading: :lazy
|
||||||
|
}.merge(custom_attributes)
|
||||||
|
|
||||||
|
view_context.image_tag(link, image_options)
|
||||||
end
|
end
|
||||||
|
|
||||||
# rubocop:disable Rails/OutputSafety
|
# rubocop:disable Rails/OutputSafety
|
||||||
|
|
|
@ -21,7 +21,7 @@ Pour appliquer un filtre à une liste de dossiers :
|
||||||
4. Sélectionnez ensuite la valeur à filtrer.
|
4. Sélectionnez ensuite la valeur à filtrer.
|
||||||
5. Cliquez enfin sur **« Ajouter le filtre »**.
|
5. Cliquez enfin sur **« Ajouter le filtre »**.
|
||||||
|
|
||||||
![Capture d’écran de l’interface de saisie d’un filtre](faq/instructeur-filtres-dropdown.png)
|
![Capture d’écran de l’interface de saisie d’un filtre {aria-hidden="true"}](faq/instructeur-filtres-dropdown.png)
|
||||||
|
|
||||||
![Capture d’écran de toutes les colonnes filtres](faq/instructeur-filtres-list.png)
|
![Capture d’écran de toutes les colonnes filtres](faq/instructeur-filtres-list.png)
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,11 @@ RSpec.describe Redcarpet::TrustedRenderer do
|
||||||
markdown = "![A cute cat](http://example.com/cat.jpg)"
|
markdown = "![A cute cat](http://example.com/cat.jpg)"
|
||||||
expect(renderer.render(markdown)).to include('<img alt="A cute cat" loading="lazy" src="http://example.com/cat.jpg" />')
|
expect(renderer.render(markdown)).to include('<img alt="A cute cat" loading="lazy" src="http://example.com/cat.jpg" />')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'renders additional attribute' do
|
||||||
|
markdown = "![A cute cat { aria-hidden=\"true\" }](http://example.com/cat.jpg)"
|
||||||
|
expect(renderer.render(markdown)).to include('<img alt="A cute cat" loading="lazy" aria-hidden="true" src="http://example.com/cat.jpg" />')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when autolinking' do
|
context 'when autolinking' do
|
||||||
|
|
Loading…
Reference in a new issue