module Network.Salvia.Advanced.CleverCSS ( hFilterCSS , hCleverCSS , hParametrizedCleverCSS ) where import Network.Protocol.Uri (Parameters) import Network.Salvia.Handlers.ExtensionDispatcher (hExtension) import Network.Salvia.Handlers.Fallback (hOr) import Network.Salvia.Handlers.File (hFile, hFileFilter) import Network.Salvia.Handlers.PathRouter (hParameters) import Network.Salvia.Handlers.Rewrite (hRewriteExt) import Network.Salvia.Httpd (Handler) import Text.CSS.CleverCSS (cleverCSSConvert) hFilterCSS :: Handler () -> Handler () -> Handler () hFilterCSS cssfilter handler = do hExtension (Just "css") (hFile `hOr` cssfilter) handler hCleverCSS :: Handler () hCleverCSS = hParameters >>= hParametrizedCleverCSS hParametrizedCleverCSS :: Parameters -> Handler () hParametrizedCleverCSS p = do hRewriteExt (fmap ('c':)) (hFileFilter convert) where convert = either id id . flip (cleverCSSConvert "") (map (fmap $ maybe "" id) p)