From 5568530a5d4c1a445fe4ca8fe89baf3377c299e8 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Thu, 1 Jul 2010 17:19:42 +0300 Subject: [PATCH] Added extractBody --- Yesod/Widget.hs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Yesod/Widget.hs b/Yesod/Widget.hs index 354df21a..767a2b5d 100644 --- a/Yesod/Widget.hs +++ b/Yesod/Widget.hs @@ -20,6 +20,7 @@ module Yesod.Widget , addBody -- * Manipulating , wrapWidget + , extractBody ) where import Data.List (nub) @@ -30,7 +31,6 @@ import Yesod.Hamlet (Hamlet, hamlet, PageContent (..), Html, string) import Yesod.Handler (Routes, GHandler) import Yesod.Yesod (Yesod, defaultLayout) import Yesod.Content (RepHtml (..)) -import Data.Maybe (fromMaybe) import Control.Applicative (Applicative) import Control.Monad.IO.Class (MonadIO) import Control.Monad.Trans.Class (lift) @@ -63,7 +63,7 @@ newtype Head url = Head (Hamlet url) newtype Body url = Body (Hamlet url) deriving Monoid -newtype Widget sub master a = Widget { unWidget :: +newtype Widget sub master a = Widget ( WriterT (Body (Routes master)) ( WriterT (Last Title) ( WriterT (UniqueList (Script (Routes master))) ( @@ -72,8 +72,7 @@ newtype Widget sub master a = Widget { unWidget :: WriterT (Head (Routes master)) ( StateT Int ( GHandler sub master - ))))))) a -} + ))))))) a) deriving (Functor, Applicative, Monad, MonadIO, MonadCatchIO) setTitle :: Html () -> Widget sub master () @@ -148,3 +147,9 @@ wrapWidget wrap (Widget w) = Widget $ mapWriterT (fmap go) w where go (a, Body h) = (a, Body $ wrap h) + +extractBody :: Widget s m () -> Widget s m (Hamlet (Routes m)) +extractBody (Widget w) = + Widget $ mapWriterT (fmap go) w + where + go ((), Body h) = (h, Body mempty)