@@ -67,12 +67,12 @@ makeDataURI (mime, raw) =
67 then mime ++ ";charset=utf-8"
67 then mime ++ ";charset=utf-8"
68 else mime -- mime type already has charset
68 else mime -- mime type already has charset
70−convertTag :: PandocMonad m => Maybe String -> Tag String -> m (Tag String)
70+convertTag :: PandocMonad m => Maybe String -> Tag String -> m [Tag String]
71convertTag sourceURL t@(TagOpen tagname as)
71convertTag sourceURL t@(TagOpen tagname as)
72 | tagname `elem`
72 | tagname `elem`
73 ["img", "embed", "video", "input", "audio", "source", "track"] = do
73 ["img", "embed", "video", "input", "audio", "source", "track"] = do
74 as' <- mapM processAttribute as
74 as' <- mapM processAttribute as
75− return $ TagOpen tagname as'
75+ return [TagOpen tagname as']
76 where processAttribute (x,y) =
76 where processAttribute (x,y) =
77 if x == "src" || x == "data-src" || x == "href" || x == "poster"
77 if x == "src" || x == "data-src" || x == "href" || x == "poster"
@@ -81,17 +81,43 @@ convertTag sourceURL t@(TagOpen tagname as)
81 else return (x,y)
81 else return (x,y)
82convertTag sourceURL t@(TagOpen "script" as) =
82convertTag sourceURL t@(TagOpen "script" as) =
83 case fromAttrib "src" t of
83 case fromAttrib "src" t of
84− [] -> return t
84+ [] -> return [t]
86− enc <- getDataURI sourceURL (fromAttrib "type" t) src
86+ let typeAttr = fromAttrib "type" t
87+ res <- getData sourceURL typeAttr src
89+ Left dataUri -> return [TagOpen "script"
90+ (("src",dataUri) : [(x,y) | (x,y) <- as, x /= "src"])]
92+ | (mime == "text/javascript" ||
93+ mime == "application/javascript" ||
94+ mime == "application/x-javascript") &&
95+ not ("</" `B.isInfixOf` bs) ->
97+ TagOpen "script" [("type", typeAttr)|not (null typeAttr)]
98+ , TagText (toString bs)
99+ , TagClose "script" ]
100+ | otherwise -> return [TagOpen "script"
101+ (("src",makeDataURI (mime, bs)) :
87− return $ TagOpen "script" (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"])
102+ [(x,y) | (x,y) <- as, x /= "src"])]
88convertTag sourceURL t@(TagOpen "link" as) =
103convertTag sourceURL t@(TagOpen "link" as) =
89 case fromAttrib "href" t of
104 case fromAttrib "href" t of
90− [] -> return t
105+ [] -> return [t]
91 src -> do
106 src -> do
92− enc <- getDataURI sourceURL (fromAttrib "type" t) src
107+ res <- getData sourceURL (fromAttrib "type" t) src
109+ Left dataUri -> return [TagOpen "link"
93− return $ TagOpen "link" (("href",enc) : [(x,y) | (x,y) <- as, x /= "href"])
110+ (("href",dataUri) : [(x,y) | (x,y) <- as, x /= "href"])]
112+ | mime == "text/css" && not ("</" `B.isInfixOf` bs) ->
114+ TagOpen "style" [("type", "text/css")]
115+ , TagText (toString bs)
116+ , TagClose "style" ]
117+ | otherwise -> return [TagOpen "link"
118+ (("href",makeDataURI (mime, bs)) :
119+ [(x,y) | (x,y) <- as, x /= "href"])]
94−convertTag _ t = return t
120+convertTag _ t = return [t]
96cssURLs :: PandocMonad m
122cssURLs :: PandocMonad m
97 => Maybe String -> FilePath -> ByteString -> m ByteString
123 => Maybe String -> FilePath -> ByteString -> m ByteString
@@ -184,5 +210,5 @@ getData sourceURL mimetype src = do
184makeSelfContained :: PandocMonad m => WriterOptions -> String -> m String
210makeSelfContained :: PandocMonad m => WriterOptions -> String -> m String
185makeSelfContained opts inp = do
211makeSelfContained opts inp = do
186 let tags = parseTags inp
212 let tags = parseTags inp
187− out' <- mapM (convertTag (writerSourceURL opts)) tags
213+ out' <- concat <$> mapM (convertTag (writerSourceURL opts)) tags
188 return $ renderTags' out'
214 return $ renderTags' out'