From 22b177f08c6f75e324664ff6adec8e66ff99e3dd Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Fri, 19 Nov 2010 11:47:21 +0200 Subject: [PATCH] Javascript minification in scaffolded site --- scaffold/cabal.cg | 1 + scaffold/sitearg_hs.cg | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/scaffold/cabal.cg b/scaffold/cabal.cg index 715ca99b..accbcd57 100644 --- a/scaffold/cabal.cg +++ b/scaffold/cabal.cg @@ -33,6 +33,7 @@ executable simple-server , template-haskell , hamlet , web-routes + , hjsmin >= 0.0.4 && < 0.1 ghc-options: -Wall extensions: TemplateHaskell, QuasiQuotes, TypeFamilies diff --git a/scaffold/sitearg_hs.cg b/scaffold/sitearg_hs.cg index 493c27d4..f83f8335 100644 --- a/scaffold/sitearg_hs.cg +++ b/scaffold/sitearg_hs.cg @@ -27,10 +27,11 @@ import Database.Persist.GenericSql import Settings (hamletFile, cassiusFile, juliusFile, widgetFile) import Model import Data.Maybe (isJust) -import Control.Monad (join) +import Control.Monad (join, unless) import Network.Mail.Mime import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Encoding +import Text.Jasmine (minifym) -- | The site argument for your application. This can be a good place to -- keep settings and values requiring initialization before your application @@ -109,9 +110,17 @@ instance Yesod ~sitearg~ where -- users receiving stale content. addStaticContent ext' _ content = do let fn = base64md5 content ++ '.' : ext' + let content' = + if ext' == "js" + then case minifym content of + Left _ -> content + Right y -> y + else content let statictmp = Settings.staticdir ++ "/tmp/" liftIO $ createDirectoryIfMissing True statictmp - liftIO $ L.writeFile (statictmp ++ fn) content + let fn' = statictmp ++ fn + exists <- liftIO $ doesFileExist fn' + unless exists $ liftIO $ L.writeFile fn' content' return $ Just $ Right (StaticR $ StaticRoute ["tmp", fn] [], []) -- How to run database actions.