{-# LANGUAGE OverloadedStrings #-} module Web.Routes.Nested.FileExtListener.Cassius where import Web.Routes.Nested.FileExtListener.Types as FE import Web.Routes.Nested.FileExtListener.ByteString import Data.Map import Text.Cassius import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Encoding as LT import Network.HTTP.Types (RequestHeaders, Status, status200) import Network.Wai import Control.Monad.Writer -- | Uses @cassius@ as the key in the map, and @"cassius/plain"@ as the content type. cassius :: Monad m => Css -> FileExtListenerT Response m () cassius = cassiusStatusHeaders status200 [("Content-Type", "cassius/css")] cassiusStatus :: Monad m => Status -> Css -> FileExtListenerT Response m () cassiusStatus s = cassiusStatusHeaders s [("Content-Type", "cassius/css")] cassiusHeaders :: Monad m => RequestHeaders -> Css -> FileExtListenerT Response m () cassiusHeaders = cassiusStatusHeaders status200 cassiusStatusHeaders :: Monad m => Status -> RequestHeaders -> Css -> FileExtListenerT Response m () cassiusStatusHeaders s hs i = let r = cassiusOnlyStatusHeaders s hs i in FileExtListenerT $ tell $ FileExts $ singleton Css r cassiusOnly :: Css -> Response cassiusOnly = cassiusOnlyStatusHeaders status200 [("Content-Type", "cassius/css")] cassiusOnlyStatus :: Status -> Css -> Response cassiusOnlyStatus s = cassiusOnlyStatusHeaders s [("Content-Type", "cassius/css")] cassiusOnlyHeaders :: RequestHeaders -> Css -> Response cassiusOnlyHeaders = cassiusOnlyStatusHeaders status200 cassiusOnlyStatusHeaders :: Status -> RequestHeaders -> Css -> Response cassiusOnlyStatusHeaders s hs i = bytestringOnlyStatus s hs $ LT.encodeUtf8 $ renderCss i