ToWidget* classes

This commit is contained in:
Michael Snoyman 2011-08-09 13:02:14 +03:00
parent b65baed9c4
commit ccb9bba8cd

View File

@ -3,6 +3,7 @@
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeSynonymInstances #-}
-- | Widgets combine HTML with JS and CSS dependencies with a unique identifier -- | Widgets combine HTML with JS and CSS dependencies with a unique identifier
-- generator, allowing you to create truly modular HTML components. -- generator, allowing you to create truly modular HTML components.
module Yesod.Widget module Yesod.Widget
@ -14,6 +15,10 @@ module Yesod.Widget
, whamlet , whamlet
, whamletFile , whamletFile
, ihamletToRepHtml , ihamletToRepHtml
-- * Convert to Widget
, ToWidget (..)
, ToWidgetHead (..)
, ToWidgetBody (..)
-- * Creating -- * Creating
-- ** Head of page -- ** Head of page
, setTitle , setTitle
@ -104,6 +109,48 @@ addSubWidget sub (GWidget w) = do
GWidget $ tell w' GWidget $ tell w'
return a return a
class ToWidget sub master a where
toWidget :: a -> GWidget sub master ()
instance url ~ Route master => ToWidget sub master (Hamlet url) where
toWidget = addHamlet
instance url ~ Route master => ToWidget sub master (Cassius url) where
toWidget = addCassius
instance url ~ Route master => ToWidget sub master (Julius url) 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
toWidget = addCoffee
class ToWidgetBody sub master a where
toWidgetBody :: a -> GWidget sub master ()
instance url ~ Route master => ToWidgetBody sub master (Hamlet url) where
toWidgetBody = addHamlet
instance url ~ Route master => ToWidgetBody sub master (Julius url) where
toWidgetBody = addJulius
instance ToWidgetBody sub master Html where
toWidgetBody = addHtml
instance url ~ Route master => ToWidgetBody sub master (Coffee url) where
toWidgetBody = addCoffeeBody
class ToWidgetHead sub master a where
toWidgetHead :: a -> GWidget sub master ()
instance url ~ Route master => ToWidgetHead sub master (Hamlet url) where
toWidgetHead = addHamletHead
instance url ~ Route master => ToWidgetHead sub master (Cassius url) where
toWidgetHead = addCassius
instance url ~ Route master => ToWidgetHead sub master (Julius url) where
toWidgetHead = addJulius
instance ToWidgetHead sub master Html where
toWidgetHead = addHtmlHead
instance url ~ Route master => ToWidgetHead sub master (Coffee url) where
toWidgetHead = addCoffee
-- | Set the page title. Calling 'setTitle' multiple times overrides previously -- | Set the page title. Calling 'setTitle' multiple times overrides previously
-- set values. -- set values.
setTitle :: Monad m => Html -> GGWidget master m () setTitle :: Monad m => Html -> GGWidget master m ()