From dc737a397d613fb3acb3f86cd2732d56f5dd9d34 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Fri, 6 May 2011 10:48:30 +0300 Subject: [PATCH] whamlet embedding --- Test/Widget.hs | 5 ++++- Yesod/Widget.hs | 15 ++++++++++++++- yesod-core.cabal | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Test/Widget.hs b/Test/Widget.hs index dd65f220..704a1a43 100644 --- a/Test/Widget.hs +++ b/Test/Widget.hs @@ -44,7 +44,10 @@ getWhamletR = defaultLayout [$whamlet|

Test

@{WhamletR}

_{Goodbye} +^{embed} |] + where + embed = [$whamlet|

Embed|] widgetTest :: Test widgetTest = testGroup "Test.Widget" @@ -69,4 +72,4 @@ case_whamlet = runner $ do { pathInfo = ["whamlet"] , requestHeaders = [("Accept-Language", "es")] } - assertBody "\n

Test

http://test/whamlet

Adios

" res + assertBody "\n

Test

http://test/whamlet

Adios

Embed

" res diff --git a/Yesod/Widget.hs b/Yesod/Widget.hs index 6b52eb4d..2bc35f8f 100644 --- a/Yesod/Widget.hs +++ b/Yesod/Widget.hs @@ -15,6 +15,7 @@ module Yesod.Widget , getMessageRender , whamlet , whamletFile + , ihamletToRepHtml -- * Creating -- ** Head of page , setTitle @@ -56,6 +57,7 @@ import Text.Lucius (Lucius) import Text.Julius import Yesod.Handler (Route, GHandler, GGHandler, YesodSubRoute(..), toMasterHandlerMaybe, getYesod) +import Yesod.Content (RepHtml (..), toContent) import Control.Applicative (Applicative) import Control.Monad.IO.Class (MonadIO) import Control.Monad.Trans.Class (MonadTrans (lift)) @@ -217,6 +219,8 @@ data PageContent url = PageContent , pageBody :: Hamlet url } +-- see if it's possible to get rid of sub here. Problem was yesod-auth, but maybe we can do something like: +-- instance YesodAuth m => YesodMessage m ... class YesodMessage sub master where type Message sub master renderMessage :: sub @@ -253,4 +257,13 @@ rules = do (Just $ helper [|lift getUrlRenderParams|]) (Just $ helper [|lift getMessageRender|]) f env - return $ NP.HamletRules ah ur + return $ NP.HamletRules ah ur $ \_ b -> return b + +-- | Wraps the 'Content' generated by 'hamletToContent' in a 'RepHtml'. +ihamletToRepHtml :: (Monad mo, YesodMessage sub master) + => NP.IHamlet (Message sub master) (Route master) + -> GGHandler sub master mo RepHtml +ihamletToRepHtml ih = do + urender <- getUrlRenderParams + mrender <- getMessageRender + return $ RepHtml $ toContent $ ih mrender urender diff --git a/yesod-core.cabal b/yesod-core.cabal index f4b1b1bb..3c88a41a 100644 --- a/yesod-core.cabal +++ b/yesod-core.cabal @@ -1,5 +1,5 @@ name: yesod-core -version: 0.8.1 +version: 0.8.2 license: BSD3 license-file: LICENSE author: Michael Snoyman