1 {-# LANGUAGE OverloadedStrings #-}
    2 module Web.All
    3   ( generateAllJS
    4   , generateAllCSS
    5   ) where
    6 
    7 import Control.Monad (when, forM_)
    8 import Control.Monad.IO.Class (liftIO)
    9 import Foreign.Ptr (Ptr)
   10 import Foreign.Marshal.Alloc (allocaBytes)
   11 import System.IO (withBinaryFile, IOMode(ReadMode, WriteMode), hPutChar, hGetBufSome, hPutBuf, Handle)
   12 
   13 import Web
   14 import Files
   15 import Web.Types
   16 import Web.Generate
   17 import Web.Libs
   18 
   19 generateMerged :: [WebFilePath] -> WebGenerator
   20 generateMerged inputFiles = \fileToGenInfo@(fileToGen, _) -> do
   21   fp <- liftIO $ unRawFilePath $ webFileAbs fileToGen
   22   webRegenerate
   23     (allocaBytes totalAlloc $ \allocatedPtr ->
   24       withBinaryFile fp WriteMode $ \generatingFileWriteHandle ->
   25         forM_ inputFiles $ \inputFile -> do
   26           fps <- unRawFilePath $ webFileAbs inputFile
   27           withBinaryFile fps ReadMode $ bufferedCopy allocatedPtr generatingFileWriteHandle
   28           hPutChar generatingFileWriteHandle '\n')
   29     []
   30     inputFiles
   31     fileToGenInfo
   32   where
   33   bufferedCopy :: Ptr a -> Handle -> Handle -> IO ()
   34   bufferedCopy buffer output input = do
   35     n <- hGetBufSome input buffer totalAlloc
   36     when (n > 0) $ do
   37       hPutBuf output buffer n
   38       bufferedCopy buffer output input
   39   totalAlloc = 32768
   40 
   41 generateAllJS :: WebGenerator
   42 generateAllJS = \f -> do
   43   let debugOn = True
   44   deps <- liftIO $ webDeps debugOn
   45   appMinJs <- liftIO $ makeWebFilePath "app.min.js"
   46   generateMerged (deps ++ [appMinJs]) f
   47 
   48 generateAllCSS :: WebGenerator
   49 generateAllCSS = \f -> do
   50   css <- liftIO $ cssWebDeps False
   51   generateMerged css f