aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2020-07-01 14:44:42 +0200
committerAlbert Krewinkel <albert@zeitkraut.de>2020-07-01 14:54:52 +0200
commitb894de64264fe0386b5cb3e1680955a8e879c78e (patch)
tree49082151eed1efbe2b72756283335d6fc0a04310 /src
parentccf9889c2c5839166be4296944c45447474f2a33 (diff)
downloadpandoc-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.hs12
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