{-# LANGUAGE FlexibleContexts #-} module Network.Salvia.Handler.CleverCSS ( hFilterCSS , hCleverCSS , hParametrizedCleverCSS ) where import Control.Applicative import Control.Monad.State import Data.Record.Label hiding (get) import Network.Protocol.Uri import Network.Protocol.Http import Network.Salvia import Text.CSS.CleverCSS hFilterCSS :: (MonadIO m, HttpM' m, SendM m, Alternative m) => m () -> m () -> m () hFilterCSS css = hExtension (Just "css") (hFile <|> css) hCleverCSS :: (MonadIO m, BodyM Request m, HttpM' m, SendM m) => m () hCleverCSS = hRequestParameters "utf-8" >>= hParametrizedCleverCSS hParametrizedCleverCSS :: (MonadIO m, HttpM' m, SendM m) => Parameters -> m () hParametrizedCleverCSS p = do hRewriteExt (fmap ('c':)) (hFileFilter convert) response (contentType =: Just ("text/css", Just "utf-8")) where convert = either id id . flip (cleverCSSConvert "") (map (fmap $ maybe "" id) p)