packages feed

hakyll-sass 0.1.0 → 0.2.0

raw patch · 2 files changed

+46/−16 lines, 2 filesdep +filepathPVP ok

version bump matches the API change (PVP)

Dependencies added: filepath

API changes (from Hackage documentation)

+ Hakyll.Web.Sass: renderSass :: Item String -> Compiler (Item String)
+ Hakyll.Web.Sass: renderSassWith :: SassOptions -> Item String -> Compiler (Item String)
+ Hakyll.Web.Sass: sassCompilerWith :: SassOptions -> Compiler (Item String)
+ Hakyll.Web.Sass: sassDefConfig :: SassOptions
+ Hakyll.Web.Sass: selectFileType :: SassOptions -> String -> Maybe SassOptions

Files

hakyll-sass.cabal view
@@ -1,9 +1,8 @@ name: hakyll-sass-version: 0.1.0+version: 0.2.0 synopsis: Hakyll SASS compiler over hsass license: MIT license-file: LICENSE-homepage: https://github.com/meoblast001/hakyll-sass author: Braden Walters maintainer: vc@braden-walters.info category: Web@@ -21,5 +20,6 @@     , hakyll >= 4.7.0     , data-default-class >= 0.0.1     , hsass >= 0.2.0+    , filepath >= 1.3.0   hs-source-dirs: src   default-language: Haskell2010
src/Hakyll/Web/Sass.hs view
@@ -6,32 +6,62 @@ -- Stability: experimental -- Portability: ghc -module Hakyll.Web.Sass (sassCompiler) where+module Hakyll.Web.Sass+( sassCompiler+, sassCompilerWith+, renderSass+, renderSassWith+, selectFileType+, sassDefConfig+, module Text.Sass.Options+) where +import Control.Monad (join) import Data.Default.Class import Data.Functor import Hakyll.Core.Compiler+import Hakyll.Core.Identifier import Hakyll.Core.Item-import System.IO.Unsafe+import System.FilePath (takeExtension) import Text.Sass.Compilation import Text.Sass.Options --- | Compiles a SASS file into CSS.+-- | Compiles a SASS file into CSS. Use the file extension to determine SCSS+-- from SASS formatting. sassCompiler :: Compiler (Item String)-sassCompiler = do-  bodyStr <- itemBody <$> getResourceBody-  extension <- getUnderlyingExtension-  let mayOptions = selectFileType def extension-  case mayOptions of-    Just options -> do-      resultOrErr <- unsafeCompiler (compileString bodyStr options)-      case resultOrErr of-        Left sassError -> fail (unsafePerformIO $ errorMessage sassError)-        Right result -> makeItem result-    Nothing -> fail "File type must be .scss or .sass."+sassCompiler = getResourceBody >>= renderSass +-- | Compiles a SASS file into CSS with options. The file extension will not+-- be used to determine SCSS from SASS formatting.+sassCompilerWith :: SassOptions -> Compiler (Item String)+sassCompilerWith options = getResourceBody >>= renderSassWith options++-- | Compiles a SASS file item into CSS. Use the file extension to determine+-- SCSS from SASS formatting.+renderSass :: Item String -> Compiler (Item String)+renderSass item =+  let extension = (takeExtension . toFilePath . itemIdentifier) item+  in case selectFileType sassDefConfig extension of+       Just options -> renderSassWith options item+       Nothing -> fail "File type must be .scss or .sass."++-- | Compiles a SASS file item into CSS with options. The file extension will+-- not be used to determine SCSS from SASS formatting.+renderSassWith :: SassOptions -> Item String -> Compiler (Item String)+renderSassWith options item =+  let bodyStr = itemBody item+  in join $ unsafeCompiler $ do+    resultOrErr <- compileString bodyStr options+    case resultOrErr of+      Left sassError -> errorMessage sassError >>= fail+      Right result -> return (makeItem result)+ -- | Use the file extension to determine whether to use indented syntax. selectFileType :: SassOptions -> String -> Maybe SassOptions selectFileType options ".scss" = Just $ options { sassIsIndentedSyntax = False } selectFileType options ".sass" = Just $ options { sassIsIndentedSyntax = True } selectFileType _ _ = Nothing++-- | Default sass configuration.+sassDefConfig :: SassOptions+sassDefConfig = def