{-# LANGUAGE OverloadedStrings #-} module JS ( generate ) where import Blog (Blog(..), Path(..)) import qualified Blog (get) import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Reader (ReaderT) import Data.ByteString.Lazy (ByteString, concat, readFile, writeFile) import qualified Files (find) import JSON (exportBlog) import Paths_hablo (getDataDir) import Pretty ((.$)) import System.Directory (createDirectoryIfMissing) import System.FilePath (()) import Prelude hiding (concat, readFile, writeFile) compile :: [ByteString] -> ByteString compile sources = concat (header:sources ++ [footer]) where header = "(function() {\n" footer = "})();" generate :: ReaderT Blog IO () generate = do destinationDir <- ( "js") <$> (Blog.get $path.$root) blogJSON <- exportBlog liftIO $ do jsFiles <- ( "js") <$> getDataDir >>= Files.find jsCode <- mapM readFile jsFiles createDirectoryIfMissing False destinationDir writeFile (destinationDir "hablo.js") $ compile ("var blog = ":blogJSON:";":jsCode )