yesod-core-1.2.0.4: Creation of type-safe, RESTful web applications.

Safe Haskell | None

Yesod.Core.Widget

Contents

- Datatype
- Special Hamlet quasiquoter/TH for Widgets
- Convert to Widget
- Creating
  - Head of page
  - CSS
  - Javascript
- Subsites
- Internal

Description

Widgets combine HTML with JS and CSS dependencies with a unique identifier generator, allowing you to create truly modular HTML components.

Synopsis

- data WidgetT site m a
- data PageContent url = PageContent {
  - pageTitle :: Html
  - pageHead :: HtmlUrl url
  - pageBody :: HtmlUrl url
  }
- whamlet :: QuasiQuoter
- whamletFile :: FilePath -> Q Exp
- ihamletToRepHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message) => HtmlUrlI18n message (Route (HandlerSite m)) -> m Html
- class ToWidget site a where
  - toWidget :: (MonadWidget m, HandlerSite m ~ site) => a -> m ()
- class ToWidgetHead site a where
  - toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => a -> m ()
- class ToWidgetBody site a where
  - toWidgetBody :: (MonadWidget m, HandlerSite m ~ site) => a -> m ()
- class ToWidgetMedia site a where
  - toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> a -> m ()
- setTitle :: MonadWidget m => Html -> m ()
- setTitleI :: (MonadWidget m, RenderMessage (HandlerSite m) msg) => msg -> m ()
- addStylesheet :: MonadWidget m => Route (HandlerSite m) -> m ()
- addStylesheetAttrs :: MonadWidget m => Route (HandlerSite m) -> [(Text, Text)] -> m ()
- addStylesheetRemote :: MonadWidget m => Text -> m ()
- addStylesheetRemoteAttrs :: MonadWidget m => Text -> [(Text, Text)] -> m ()
- addStylesheetEither :: MonadWidget m => Either (Route (HandlerSite m)) Text -> m ()
- newtype CssBuilder = CssBuilder {
  - unCssBuilder :: Builder
  }
- addScript :: MonadWidget m => Route (HandlerSite m) -> m ()
- addScriptAttrs :: MonadWidget m => Route (HandlerSite m) -> [(Text, Text)] -> m ()
- addScriptRemote :: MonadWidget m => Text -> m ()
- addScriptRemoteAttrs :: MonadWidget m => Text -> [(Text, Text)] -> m ()
- addScriptEither :: MonadWidget m => Either (Route (HandlerSite m)) Text -> m ()
- widgetToParentWidget :: MonadIO m => WidgetT child IO a -> HandlerT child (HandlerT parent m) (WidgetT parent m a)
- handlerToWidget :: Monad m => HandlerT site m a -> WidgetT site m a
- whamletFileWithSettings :: HamletSettings -> FilePath -> Q Exp

# Datatype

data WidgetT site m a

A generic widget, allowing specification of both the subsite and master site datatypes. While this is simply a `WriterT`, we define a newtype for better error messages.

Instances

MonadBaseControl b m => MonadBaseControl b (WidgetT site m) |
MonadBase b m => MonadBase b (WidgetT site m) |
(~ * site' site, ~ (* -> *) IO m, ~ * a ()) => ToWidget site' (WidgetT site m a) |
MonadTrans (WidgetT site) |
Monad m => Monad (WidgetT site m) |
Monad m => Functor (WidgetT site m) |
Monad m => Applicative (WidgetT site m) |
MonadThrow m => MonadThrow (WidgetT site m) |
(Applicative m, MonadIO m, MonadUnsafeIO m, MonadThrow m) => MonadResource (WidgetT site m) |
MonadIO m => MonadLogger (WidgetT site m) |
MonadIO m => MonadIO (WidgetT site m) |
MonadResourceBase m => MonadWidget (WidgetT site m) |
MonadResourceBase m => MonadHandler (WidgetT site m) |
(~ * a (), Monad m) => Monoid (WidgetT site m a) |

data PageContent url

Content for a web page. By providing this datatype, we can easily create generic site templates, which would have the type signature:

     PageContent url -> HtmlUrl url

Constructors

PageContent |
Fields pageTitle :: Html pageHead :: HtmlUrl url pageBody :: HtmlUrl url

# Special Hamlet quasiquoter/TH for Widgets

whamlet :: QuasiQuoter

whamletFile :: FilePath -> Q Exp

ihamletToRepHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message) => HtmlUrlI18n message (Route (HandlerSite m)) -> m Html

Wraps the `Content` generated by `hamletToContent` in a `RepHtml`.

# Convert to Widget

class ToWidget site a where

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => a -> m ()

Instances

ToWidget site Html |
~ * render (RY site) => ToWidget site (render -> Javascript) |
~ * render (RY site) => ToWidget site (render -> CssBuilder) |
~ * render (RY site) => ToWidget site (render -> Css) |
~ * render (RY site) => ToWidget site (render -> Html) |
(~ * site' site, ~ (* -> *) IO m, ~ * a ()) => ToWidget site' (WidgetT site m a) |

class ToWidgetHead site a where

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => a -> m ()

Instances

ToWidgetHead site Html |
~ * render (RY site) => ToWidgetHead site (render -> Javascript) |
~ * render (RY site) => ToWidgetHead site (render -> CssBuilder) |
~ * render (RY site) => ToWidgetHead site (render -> Css) |
~ * render (RY site) => ToWidgetHead site (render -> Html) |

class ToWidgetBody site a where

Methods

toWidgetBody :: (MonadWidget m, HandlerSite m ~ site) => a -> m ()

Instances

ToWidgetBody site Html |
~ * render (RY site) => ToWidgetBody site (render -> Javascript) |
~ * render (RY site) => ToWidgetBody site (render -> Html) |

class ToWidgetMedia site a where

Allows adding some CSS to the page with a specific media type.

Since 1.2

Methods

toWidgetMedia

Arguments

:: (MonadWidget m, HandlerSite m ~ site) |
=> Text | media value
-> a |
-> m () |

Add the given content to the page, but only for the given media type.

Since 1.2

Instances

~ * render (RY site) => ToWidgetMedia site (render -> CssBuilder) |
~ * render (RY site) => ToWidgetMedia site (render -> Css) |

# Creating

## Head of page

setTitle :: MonadWidget m => Html -> m ()

Set the page title. Calling `setTitle` multiple times overrides previously set values.

setTitleI :: (MonadWidget m, RenderMessage (HandlerSite m) msg) => msg -> m ()

Set the page title. Calling `setTitle` multiple times overrides previously set values.

## CSS

addStylesheet :: MonadWidget m => Route (HandlerSite m) -> m ()

Link to the specified local stylesheet.

addStylesheetAttrs :: MonadWidget m => Route (HandlerSite m) -> [(Text, Text)] -> m ()

Link to the specified local stylesheet.

addStylesheetRemote :: MonadWidget m => Text -> m ()

Link to the specified remote stylesheet.

addStylesheetRemoteAttrs :: MonadWidget m => Text -> [(Text, Text)] -> m ()

Link to the specified remote stylesheet.

addStylesheetEither :: MonadWidget m => Either (Route (HandlerSite m)) Text -> m ()

newtype CssBuilder

Newtype wrapper allowing injection of arbitrary content into CSS.

Usage:

     toWidget $ CssBuilder "p { color: red }"

Since: 1.1.3

Constructors

CssBuilder |
Fields unCssBuilder :: Builder

Instances

~ * render (RY site) => ToWidgetHead site (render -> CssBuilder) |
~ * render (RY site) => ToWidgetMedia site (render -> CssBuilder) |
~ * render (RY site) => ToWidget site (render -> CssBuilder) |

## Javascript

addScript :: MonadWidget m => Route (HandlerSite m) -> m ()

Link to the specified local script.

addScriptAttrs :: MonadWidget m => Route (HandlerSite m) -> [(Text, Text)] -> m ()

Link to the specified local script.

addScriptRemote :: MonadWidget m => Text -> m ()

Link to the specified remote script.

addScriptRemoteAttrs :: MonadWidget m => Text -> [(Text, Text)] -> m ()

Link to the specified remote script.

addScriptEither :: MonadWidget m => Either (Route (HandlerSite m)) Text -> m ()

# Subsites

widgetToParentWidget :: MonadIO m => WidgetT child IO a -> HandlerT child (HandlerT parent m) (WidgetT parent m a)

handlerToWidget :: Monad m => HandlerT site m a -> WidgetT site m a

# Internal

whamletFileWithSettings :: HamletSettings -> FilePath -> Q Exp