packages feed

css-class-bindings-0.0.2: src/CssClassBindings/IncludeCss.hs

module CssClassBindings.IncludeCss (includeCss) where

import CssClassBindings.Escape ( escapeIden )
import CssClassBindings.Qq (cssToDecs)
import Data.Text.IO.Utf8 qualified as U
import Language.Haskell.TH.Syntax
    ( mkName, Q, Dec, runIO, getPackageRoot )
import Prelude
import System.Directory (makeAbsolute)
import System.FilePath (takeBaseName, (</>))

liftIO1 :: (a -> IO b) -> a -> Q b
liftIO1 f x = runIO (f x)

-- | like css quasi quoter but
-- css input is exported via constant equal to base file name
-- instead of cssAsLiteralText.
includeCss :: FilePath -> Q [Dec]
includeCss p = do
  ap <- getPackageRoot >>= liftIO1 makeAbsolute . (</> p)
  cssToDecs (mkName (escapeIden $ takeBaseName p)) <$> runIO (U.readFile ap)