module LLVM.HtmlWrapper ( writeHtmlIndex, writeHtmlWrapper ) where
import Control.Monad ( forM_ )
import qualified Data.ByteString.Lazy as LBS
import Data.Monoid
import System.FilePath
import Text.Blaze.Html5
import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
import Text.Blaze.Html.Renderer.Utf8 ( renderHtml )
writeHtmlWrapper :: FilePath -> FilePath -> FilePath -> String -> Double -> Double -> IO ()
writeHtmlWrapper dirname hfilename gfilename fname w h = do
let wrapper = htmlWrapper fname gfilename w h
LBS.writeFile (dirname </> hfilename) (renderHtml wrapper)
htmlWrapper :: String -> FilePath -> Double -> Double -> Html
htmlWrapper fname gfilename w h = H.docTypeHtml $ do
H.head $ do
H.title (toHtml fname)
H.script ! A.src "OpenLayers.js" ! A.type_ "text/javascript" $ return ()
H.script ! A.src "jquery-1.7.1.js" ! A.type_ "text/javascript" $ return ()
H.script ! A.src "showGraph.js" ! A.type_ "text/javascript" $ return ()
H.link ! A.href "graph.css" ! A.rel "stylesheet" ! A.type_ "text/css"
H.body $ do
H.div ! A.id "map" $ return ()
H.script ! A.type_ "text/javascript" $ H.preEscapedToMarkup (loadScript gfilename w h)
loadScript :: String -> Double -> Double -> String
loadScript n w h = mconcat [ "$(window).bind('load', function () {"
, " showGraph('map', '", n , "', ", show w, ", ", show h, ");\n"
, "});"
]
writeHtmlIndex :: FilePath -> [String] -> IO ()
writeHtmlIndex dir funcNames =
LBS.writeFile (dir </> "index.html") (renderHtml (htmlIndex funcNames))
htmlIndex :: [String] -> Html
htmlIndex funcNames = H.docTypeHtml $ do
H.head $ do
H.title "Module Summary"
H.body $ do
H.ul $ forM_ funcNames mkLink
where
mkLink n = H.li $ do
let ref = "graphs" </> n <.> "html"
H.a ! A.href (toValue ref) $ toHtml n