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 +2/−2
- src/Hakyll/Web/Sass.hs +44/−14
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