-- already data: uri
getDataURI media sourceURL mimetype src = do
  let ext = map toLower $ takeExtension src
  fetchResult <- fetchItem' media sourceURL src
  (raw, respMime) <- case fetchResult of
                          Left msg -> err 67 $ "Could not fetch " ++ src ++
                                               "\n" ++ show msg
                          Right x  -> return x
  let raw' = if ext == ".gz"
                then B.concat $ L.toChunks $ Gzip.decompress $ L.fromChunks
                      $ [raw]
                else raw
  let mime = case (mimetype, respMime) of
                  ("",Nothing) -> error
                         $ "Could not determine mime type for `" ++ src ++ "'"
                  (x, Nothing) -> x
                  (_, Just x ) -> x
  let cssSourceURL = case parseURI src of
                          Just u
                            | uriScheme u `elem` ["http:","https:"] ->
                                Just $ show u{ uriPath = "",
                                               uriQuery = "",
                                               uriFragment = "" }
                          _ -> Nothing
  result <- if mime == "text/css"
               then cssURLs media cssSourceURL (takeDirectory src) raw'
               else return raw'
  return $ makeDataURI mime result

-- | Convert HTML into self-contained HTML, incorporating images,
-- scripts, and CSS using data: URIs.
getDataURI media sourceURL mimetype src = do
  let ext = map toLower $ takeExtension src
  fetchResult <- fetchItem' media sourceURL src
  (raw, respMime) <- case fetchResult of
                          Left msg -> err 67 $ "Could not fetch " ++ src ++
                                               "\n" ++ show msg
                          Right x  -> return x
  let raw' = if ext == ".gz"
                then B.concat $ L.toChunks $ Gzip.decompress $ L.fromChunks
                      $ [raw]
                else raw
  let mime = case (mimetype, respMime) of
                  ("",Nothing) -> error
                         $ "Could not determine mime type for `" ++ src ++ "'"
                  (x, Nothing) -> x
                  (_, Just x ) -> x
  let cssSourceURL = case parseURI src of
                          Just u
                            | uriScheme u `elem` ["http:","https:"] ->
                                Just $ show u{ uriPath = "",
                                               uriQuery = "",
                                               uriFragment = "" }
                          _ -> Nothing
  result <- if mime == "text/css"
               then cssURLs media cssSourceURL (takeDirectory src) raw'
               else return raw'
  return $ makeDataURI mime result

-- | Convert HTML into self-contained HTML, incorporating images,
-- scripts, and CSS using data: URIs.
getDataURI media sourceURL mimetype src = do
  let ext = map toLower $ takeExtension src
  fetchResult <- fetchItem' media sourceURL src
  (raw, respMime) <- case fetchResult of
                          Left msg -> err 67 $ "Could not fetch " ++ src ++
                                               "\n" ++ show msg
                          Right x  -> return x
  let raw' = if ext == ".gz"
                then B.concat $ L.toChunks $ Gzip.decompress $ L.fromChunks
                      $ [raw]
                else raw
  let mime = case (mimetype, respMime) of
                  ("",Nothing) -> error
                         $ "Could not determine mime type for `" ++ src ++ "'"
                  (x, Nothing) -> x
                  (_, Just x ) -> x
  let cssSourceURL = case parseURI src of
                          Just u
                            | uriScheme u `elem` ["http:","https:"] ->
                                Just $ show u{ uriPath = "",
                                               uriQuery = "",
                                               uriFragment = "" }
                          _ -> Nothing
  result <- if mime == "text/css"
               then cssURLs media cssSourceURL (takeDirectory src) raw'
               else return raw'
  return $ makeDataURI mime result

-- | Convert HTML into self-contained HTML, incorporating images,
-- scripts, and CSS using data: URIs.