diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2020-07-01 14:44:42 +0200 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2020-07-01 14:54:52 +0200 |
commit | b894de64264fe0386b5cb3e1680955a8e879c78e (patch) | |
tree | 49082151eed1efbe2b72756283335d6fc0a04310 /src | |
parent | ccf9889c2c5839166be4296944c45447474f2a33 (diff) | |
download | pandoc-b894de64264fe0386b5cb3e1680955a8e879c78e.tar.gz |
HTML writer: improve alt-text/caption handling for HTML5
Screen readers read an image's `alt` attribute and the figure caption,
both of which come from the same source in pandoc. The figure caption is
hidden from screen readers with the `aria-hidden` attribute. This
improves accessibility.
For HTML4, where `aria-hidden` is not allowed, pandoc still uses an
empty `alt` attribute to avoid duplicate contents.
Closes: #6491
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Writers/HTML.hs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs index 11daaf06b..4bfd95674 100644 --- a/src/Text/Pandoc/Writers/HTML.hs +++ b/src/Text/Pandoc/Writers/HTML.hs @@ -1,6 +1,7 @@ {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TypeApplications #-} {-# LANGUAGE ViewPatterns #-} {- | Module : Text.Pandoc.Writers.HTML @@ -587,11 +588,18 @@ figure :: PandocMonad m => WriterOptions -> Attr -> [Inline] -> (Text, Text) -> StateT WriterState m Html figure opts attr txt (s,tit) = do - img <- inlineToHtml opts (Image attr [Str ""] (s,tit)) html5 <- gets stHtml5 + -- Screen-readers will normally read the @alt@ text and the figure; we + -- want to avoid them reading the same text twice. With HTML5 we can + -- use aria-hidden for the caption; with HTML4, we use an empty + -- alt-text instead. + let alt = if html5 then txt else [Str ""] let tocapt = if html5 - then H5.figcaption + then H5.figcaption ! + H5.customAttribute (textTag "aria-hidden") + (toValue @Text "true") else H.p ! A.class_ "caption" + img <- inlineToHtml opts (Image attr alt (s,tit)) capt <- if null txt then return mempty else tocapt `fmap` inlineListToHtml opts txt |