Use lazy loading for reveal.js slide shows.

* In HTML writer, with reveal.js we use data-src instead of src
  for images.
* In SelfContained, we also load resources from data-src.

Closes #2283.
This commit is contained in:
John MacFarlane 2017-02-20 22:21:20 +01:00
parent 8b9448aa17
commit 612f1238aa
2 changed files with 19 additions and 8 deletions

View file

@ -73,7 +73,7 @@ convertTag media sourceURL t@(TagOpen tagname as)
as' <- mapM processAttribute as
return $ TagOpen tagname as'
where processAttribute (x,y) =
if x == "src" || x == "href" || x == "poster"
if x == "src" || x == "data-src" || x == "href" || x == "poster"
then do
enc <- getDataURI media sourceURL (fromAttrib "type" t) y
return (x, enc)

View file

@ -953,17 +953,28 @@ inlineToHtml opts inline = do
else link'' ! A.title (toValue tit)
(Image attr txt (s,tit)) | treatAsImage s -> do
let alternate' = stringify txt
let attributes = [A.src $ toValue s] ++
[A.title $ toValue tit | not (null tit)] ++
[A.alt $ toValue alternate' | not (null txt)] ++
imgAttrsToHtml opts attr
slideVariant <- gets stSlideVariant
let isReveal = slideVariant == RevealJsSlides
let attributes =
-- reveal.js uses data-src for lazy loading
(if isReveal
then customAttribute "data-src" $ toValue s
else A.src $ toValue s) :
[A.title $ toValue tit | not (null tit)] ++
[A.alt $ toValue alternate' | not (null txt)] ++
imgAttrsToHtml opts attr
let tag = if html5 then H5.img else H.img
return $ foldl (!) tag attributes
-- note: null title included, as in Markdown.pl
(Image attr _ (s,tit)) -> do
let attributes = [A.src $ toValue s] ++
[A.title $ toValue tit | not (null tit)] ++
imgAttrsToHtml opts attr
slideVariant <- gets stSlideVariant
let isReveal = slideVariant == RevealJsSlides
let attributes =
(if isReveal
then customAttribute "data-src" $ toValue s
else A.src $ toValue s) :
[A.title $ toValue tit | not (null tit)] ++
imgAttrsToHtml opts attr
return $ foldl (!) H5.embed attributes
-- note: null title included, as in Markdown.pl
(Note contents) -> do