This commit adds just the subsite itself. The subsite works by running a list of generaters at compile time. The entries produced by the generators are converted into wai-app-static.WaiAppStatic.Storage.Embedded entries. Also, addStaticContent is supported via an IORef. When a widget produces static content (css, javascript), it is stuck into the IORef inside the embedded static subsite. The embedded static subsite will then serve it from the IORef, properly using a 304 response if the client already has the content.
62 lines
2.0 KiB
Haskell
62 lines
2.0 KiB
Haskell
{-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-}
|
|
module EmbedTestGenerator (testGen) where
|
|
|
|
import Network.Mime (MimeType)
|
|
import Yesod.EmbeddedStatic.Types
|
|
import Yesod.EmbeddedStatic.Generators (pathToName)
|
|
|
|
import qualified Data.Text as T
|
|
import qualified Data.Text.Lazy as TL
|
|
import qualified Data.Text.Lazy.Encoding as TL
|
|
import qualified Data.ByteString.Lazy as BL
|
|
|
|
e1, e2, e3, e4 :: Entry
|
|
|
|
-- Basic entry
|
|
e1 = Entry
|
|
{ ebHaskellName = Just $ pathToName "e1"
|
|
, ebLocation = "e1"
|
|
, ebMimeType = "text/plain"
|
|
, ebProductionContent = return $ TL.encodeUtf8 "e1 production"
|
|
, ebDevelReload = [| return $ TL.encodeUtf8 $ TL.pack "e1 devel" |]
|
|
, ebDevelExtraFiles = Nothing
|
|
}
|
|
|
|
-- Test simulated directory in location
|
|
e2 = Entry
|
|
{ ebHaskellName = Just $ pathToName "e2"
|
|
, ebLocation = "dir/e2"
|
|
, ebMimeType = "abcdef"
|
|
, ebProductionContent = return $ TL.encodeUtf8 "e2 production"
|
|
, ebDevelReload = [| return $ TL.encodeUtf8 $ TL.pack "e2 devel" |]
|
|
, ebDevelExtraFiles = Nothing
|
|
}
|
|
|
|
-- Test empty haskell name
|
|
e3 = Entry
|
|
{ ebHaskellName = Nothing
|
|
, ebLocation = "xxxx/e3"
|
|
, ebMimeType = "yyy"
|
|
, ebProductionContent = return $ TL.encodeUtf8 "e3 production"
|
|
, ebDevelReload = [| return $ TL.encodeUtf8 $ TL.pack "e3 devel" |]
|
|
, ebDevelExtraFiles = Nothing
|
|
}
|
|
|
|
devExtra :: [T.Text] -> IO (Maybe (MimeType, BL.ByteString))
|
|
devExtra ["dev1"] = return $ Just ("mime", "dev1 content")
|
|
devExtra ["dir", "dev2"] = return $ Just ("mime2", "dev2 content")
|
|
devExtra _ = return Nothing
|
|
|
|
-- Entry with devel extra files
|
|
e4 = Entry
|
|
{ ebHaskellName = Just $ pathToName "e4"
|
|
, ebLocation = "e4"
|
|
, ebMimeType = "text/plain"
|
|
, ebProductionContent = return $ TL.encodeUtf8 "e4 production"
|
|
, ebDevelReload = [| return $ TL.encodeUtf8 $ TL.pack "e4 devel" |]
|
|
, ebDevelExtraFiles = Just [| devExtra |]
|
|
}
|
|
|
|
testGen :: Generator
|
|
testGen = return [e1, e2, e3, e4]
|