packages feed

salvia-extras-0.1: src/Network/Salvia/Handler/CleverCSS.hs

module Network.Salvia.Handler.CleverCSS (
    hFilterCSS
  , hCleverCSS
  , hParametrizedCleverCSS
  ) where

import Network.Protocol.Uri (Parameters)
import Network.Salvia.Handler.ExtensionDispatcher (hExtension)
import Network.Salvia.Handler.Fallback (hOr)
import Network.Salvia.Handler.File (hFile, hFileFilter)
import Network.Salvia.Handler.PathRouter (hParameters)
import Network.Salvia.Handler.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)