Better ToWidget* instances

This commit is contained in:
Michael Snoyman 2011-08-22 17:03:50 +03:00
parent 1361bdf90e
commit 507ad4a772
2 changed files with 30 additions and 13 deletions

View File

@ -11,6 +11,8 @@ import Yesod.Content
import Yesod.Dispatch
import Yesod.Widget
import Text.Julius
import Text.Lucius
import Text.Hamlet
import Network.Wai
import Network.Wai.Test
@ -27,12 +29,13 @@ mkYesod "Y" [$parseRoutes|
/ RootR GET
/foo/*Strings MultiR GET
/whamlet WhamletR GET
/towidget TowidgetR GET
|]
instance Yesod Y where
approot _ = "http://test"
getRootR = defaultLayout $ addJuliusBody [$julius|<not escaped>|]
getRootR = defaultLayout $ toWidgetBody [$julius|<not escaped>|]
getMultiR _ = return ()
data Msg = Hello | Goodbye
@ -44,6 +47,18 @@ instance RenderMessage Y Msg where
renderMessage a (_:xs) y = renderMessage a xs y
renderMessage a [] y = renderMessage a ["en"] y
getTowidgetR = defaultLayout $ do
toWidget [julius|foo|]
toWidgetHead [julius|foo|]
toWidgetBody [julius|foo|]
toWidget [lucius|foo{bar:baz}|]
toWidgetHead [lucius|foo{bar:baz}|]
toWidget [hamlet|<foo>|]
toWidgetHead [hamlet|<foo>|]
toWidgetBody [hamlet|<foo>|]
getWhamletR = defaultLayout [$whamlet|
<h1>Test
<h2>@{WhamletR}

View File

@ -115,43 +115,45 @@ class ToWidget sub master a where
-- addHamlet/Cassius/Lucius/Julius stuff. For the most part, toWidget* will be
-- sufficient. For somethings, like addLuciusMedia, create addCssUrlMedia.
instance url ~ Route master => ToWidget sub master (HtmlUrl url) where
type RY master = Route master -> [(Text, Text)] -> Text
instance render ~ RY master => ToWidget sub master (render -> Html) where
toWidget = addHamlet
instance url ~ Route master => ToWidget sub master (CssUrl url) where
instance render ~ RY master => ToWidget sub master (render -> Css) where
toWidget = addCassius
instance url ~ Route master => ToWidget sub master (JavascriptUrl url) where
instance render ~ RY master => ToWidget sub master (render -> Javascript) where
toWidget = addJulius
instance ToWidget sub master (GWidget sub master ()) where
toWidget = id
instance ToWidget sub master Html where
toWidget = addHtml
instance url ~ Route master => ToWidget sub master (Coffee url) where
instance render ~ RY master => ToWidget sub master (render -> Coffeescript) where
toWidget = addCoffee
class ToWidgetBody sub master a where
toWidgetBody :: a -> GWidget sub master ()
instance url ~ Route master => ToWidgetBody sub master (HtmlUrl url) where
instance render ~ RY master => ToWidgetBody sub master (render -> Html) where
toWidgetBody = addHamlet
instance url ~ Route master => ToWidgetBody sub master (JavascriptUrl url) where
toWidgetBody = addJulius
instance render ~ RY master => ToWidgetBody sub master (render -> Javascript) where
toWidgetBody = addJuliusBody
instance ToWidgetBody sub master Html where
toWidgetBody = addHtml
instance url ~ Route master => ToWidgetBody sub master (Coffee url) where
instance render ~ RY master => ToWidgetBody sub master (render -> Coffeescript) where
toWidgetBody = addCoffeeBody
class ToWidgetHead sub master a where
toWidgetHead :: a -> GWidget sub master ()
instance url ~ Route master => ToWidgetHead sub master (HtmlUrl url) where
instance render ~ RY master => ToWidgetHead sub master (render -> Html) where
toWidgetHead = addHamletHead
instance url ~ Route master => ToWidgetHead sub master (CssUrl url) where
instance render ~ RY master => ToWidgetHead sub master (render -> Css) where
toWidgetHead = addCassius
instance url ~ Route master => ToWidgetHead sub master (JavascriptUrl url) where
instance render ~ RY master => ToWidgetHead sub master (render -> Javascript) where
toWidgetHead = addJulius
instance ToWidgetHead sub master Html where
toWidgetHead = addHtmlHead
instance url ~ Route master => ToWidgetHead sub master (Coffee url) where
instance render ~ RY master => ToWidgetHead sub master (render -> Coffeescript) where
toWidgetHead = addCoffee
-- | Set the page title. Calling 'setTitle' multiple times overrides previously