aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <[email protected]>2024-10-23 16:53:24 +0200
committerJohn MacFarlane <[email protected]>2024-10-23 09:04:54 -0700
commit4c66bf27903ca50fccfb0b025a9d5cde217a6cec (patch)
treef3d7df749f49e588a4c79b82d14c813db30dd43b /src
parentdaef2fd53e6b96562ff1dc0ab3baa1737ff9d82b (diff)
HTML writer: unwrap empty incremental divs
Divs are unwrapped if the only purpose of the div seems to be to control whether lists are presented incrementally on slides. Closes: #10328
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Writers/HTML.hs41
1 files changed, 25 insertions, 16 deletions
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index 85c0083c0..016aae886 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -862,10 +862,15 @@ blockToHtmlInner opts (Div attr@(ident, classes, kvs') bs) = do
[("role", "listitem") | isCslBibEntry && html5]
let speakerNotes = "notes" `elem` classes
-- we don't want incremental output inside speaker notes, see #1394
- let opts' = if | speakerNotes -> opts{ writerIncremental = False }
- | "incremental" `elem` classes -> opts{ writerIncremental = True }
- | "nonincremental" `elem` classes -> opts{ writerIncremental = False }
- | otherwise -> opts
+ let (opts', isIncrDiv) =
+ if | speakerNotes ->
+ (opts{ writerIncremental = False }, False)
+ | "incremental" `elem` classes ->
+ (opts{ writerIncremental = True }, True)
+ | "nonincremental" `elem` classes ->
+ (opts{ writerIncremental = False }, True)
+ | otherwise ->
+ (opts, False)
-- we remove "incremental" and "nonincremental" if we're in a
-- slide presentation format.
classes' = case slideVariant of
@@ -886,18 +891,22 @@ blockToHtmlInner opts (Div attr@(ident, classes, kvs') bs) = do
let (divtag, classes'') = if html5 && "section" `elem` classes'
then (H5.section, filter (/= "section") classes')
else (H.div, classes')
- if speakerNotes
- then case slideVariant of
- RevealJsSlides -> addAttrs opts' attr $
- H5.aside contents'
- DZSlides -> do
- t <- addAttrs opts' attr $
- H5.div contents'
- return $ t ! A5.role "note"
- NoSlides -> addAttrs opts' attr $
- H.div contents'
- _ -> return mempty
- else addAttrs opts (ident, classes'', kvs) $
+ if | isIncrDiv && (ident, classes'', kvs) == nullAttr ->
+ -- Unwrap divs that only have (non)increment information
+ pure contents
+ | speakerNotes ->
+ case slideVariant of
+ RevealJsSlides -> addAttrs opts' attr $
+ H5.aside contents'
+ DZSlides -> do
+ t <- addAttrs opts' attr $
+ H5.div contents'
+ return $ t ! A5.role "note"
+ NoSlides -> addAttrs opts' attr $
+ H.div contents'
+ _ -> return mempty
+ | otherwise ->
+ addAttrs opts (ident, classes'', kvs) $
divtag contents'
blockToHtmlInner opts (RawBlock f str) = do
ishtml <- isRawHtml f