yesod-core-1.6.25.0: Creation of type-safe, RESTful web applications.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Yesod.Core.Widget

Description

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

Synopsis

Datatype

type WidgetT site (m :: Type -> Type) = WidgetFor site Source #

Deprecated: Use WidgetFor directly

data WidgetFor site a Source #

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

Instances details
(site' ~ site, a ~ ()) => ToWidget site' (WidgetFor site a) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site') => WidgetFor site a -> m () Source #

MonadIO (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

liftIO :: IO a -> WidgetFor site a #

Applicative (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

pure :: a -> WidgetFor site a #

(<*>) :: WidgetFor site (a -> b) -> WidgetFor site a -> WidgetFor site b #

liftA2 :: (a -> b -> c) -> WidgetFor site a -> WidgetFor site b -> WidgetFor site c #

(*>) :: WidgetFor site a -> WidgetFor site b -> WidgetFor site b #

(<*) :: WidgetFor site a -> WidgetFor site b -> WidgetFor site a #

Functor (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

fmap :: (a -> b) -> WidgetFor site a -> WidgetFor site b #

(<$) :: a -> WidgetFor site b -> WidgetFor site a #

Monad (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

(>>=) :: WidgetFor site a -> (a -> WidgetFor site b) -> WidgetFor site b #

(>>) :: WidgetFor site a -> WidgetFor site b -> WidgetFor site b #

return :: a -> WidgetFor site a #

MonadThrow (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

throwM :: Exception e => e -> WidgetFor site a #

MonadLogger (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> WidgetFor site () #

MonadLoggerIO (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

askLoggerIO :: WidgetFor site (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) #

PrimMonad (WidgetFor site) Source #

Since: 1.6.7

Instance details

Defined in Yesod.Core.Types

Associated Types

type PrimState (WidgetFor site) #

Methods

primitive :: (State# (PrimState (WidgetFor site)) -> (# State# (PrimState (WidgetFor site)), a #)) -> WidgetFor site a #

MonadResource (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

liftResourceT :: ResourceT IO a -> WidgetFor site a #

MonadUnliftIO (WidgetFor site) Source #

Since: 1.4.38

Instance details

Defined in Yesod.Core.Types

Methods

withRunInIO :: ((forall a. WidgetFor site a -> IO a) -> IO b) -> WidgetFor site b #

MonadHandler (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Class.Handler

Associated Types

type HandlerSite (WidgetFor site) Source #

type SubHandlerSite (WidgetFor site) Source #

MonadWidget (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Class.Handler

Methods

liftWidget :: WidgetFor (HandlerSite (WidgetFor site)) a -> WidgetFor site a Source #

MonadReader (WidgetData site) (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

ask :: WidgetFor site (WidgetData site) #

local :: (WidgetData site -> WidgetData site) -> WidgetFor site a -> WidgetFor site a #

reader :: (WidgetData site -> a) -> WidgetFor site a #

a ~ () => IsString (WidgetFor site a) Source #

A String can be trivially promoted to a widget.

For example, in a yesod-scaffold site you could use:

getHomeR = do defaultLayout "Widget text"
Instance details

Defined in Yesod.Core.Types

Methods

fromString :: String -> WidgetFor site a #

a ~ () => Monoid (WidgetFor site a) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

mempty :: WidgetFor site a #

mappend :: WidgetFor site a -> WidgetFor site a -> WidgetFor site a #

mconcat :: [WidgetFor site a] -> WidgetFor site a #

a ~ () => Semigroup (WidgetFor site a) Source # 
Instance details

Defined in Yesod.Core.Types

Methods

(<>) :: WidgetFor site a -> WidgetFor site a -> WidgetFor site a #

sconcat :: NonEmpty (WidgetFor site a) -> WidgetFor site a #

stimes :: Integral b => b -> WidgetFor site a -> WidgetFor site a #

type PrimState (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Types

type HandlerSite (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Class.Handler

type HandlerSite (WidgetFor site) = site
type SubHandlerSite (WidgetFor site) Source # 
Instance details

Defined in Yesod.Core.Class.Handler

type SubHandlerSite (WidgetFor site) = site

data PageContent url Source #

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

Special Hamlet quasiquoter/TH for Widgets

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

Deprecated: Please use ihamletToHtml instead

Wraps the Content generated by hamletToContent in a RepHtml.

ihamletToHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message) => HtmlUrlI18n message (Route (HandlerSite m)) -> m Html Source #

Wraps the Content generated by hamletToContent in a RepHtml.

Since 1.2.1

Convert to Widget

class ToWidget site a where Source #

Methods

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

Instances

Instances details
ToWidget site Html Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => Html -> m () Source #

ToWidget site Css Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => Css -> m () Source #

ToWidget site Javascript Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => Javascript -> m () Source #

ToWidget site Text Source #

Since: 1.4.28

Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => Text -> m () Source #

ToWidget site Builder Source #

Since: 1.4.28

Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => Builder -> m () Source #

ToWidget site Text Source #

Since: 1.4.28

Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => Text -> m () Source #

ToWidget site CssBuilder Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => CssBuilder -> m () Source #

render ~ RY site => ToWidget site (render -> Html) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => (render -> Html) -> m () Source #

render ~ RY site => ToWidget site (render -> Css) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => (render -> Css) -> m () Source #

render ~ RY site => ToWidget site (render -> Javascript) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => (render -> Javascript) -> m () Source #

render ~ RY site => ToWidget site (render -> CssBuilder) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => (render -> CssBuilder) -> m () Source #

(site' ~ site, a ~ ()) => ToWidget site' (WidgetFor site a) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site') => WidgetFor site a -> m () Source #

class ToWidgetHead site a where Source #

Methods

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

Instances

Instances details
ToWidgetHead site Html Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => Html -> m () Source #

ToWidgetHead site Css Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => Css -> m () Source #

ToWidgetHead site Javascript Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => Javascript -> m () Source #

ToWidgetHead site CssBuilder Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => CssBuilder -> m () Source #

render ~ RY site => ToWidgetHead site (render -> Html) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => (render -> Html) -> m () Source #

render ~ RY site => ToWidgetHead site (render -> Css) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => (render -> Css) -> m () Source #

render ~ RY site => ToWidgetHead site (render -> Javascript) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => (render -> Javascript) -> m () Source #

render ~ RY site => ToWidgetHead site (render -> CssBuilder) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => (render -> CssBuilder) -> m () Source #

class ToWidgetBody site a where Source #

Methods

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

Instances

Instances details
ToWidgetBody site Html Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetBody :: (MonadWidget m, HandlerSite m ~ site) => Html -> m () Source #

ToWidgetBody site Javascript Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetBody :: (MonadWidget m, HandlerSite m ~ site) => Javascript -> m () Source #

render ~ RY site => ToWidgetBody site (render -> Html) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetBody :: (MonadWidget m, HandlerSite m ~ site) => (render -> Html) -> m () Source #

render ~ RY site => ToWidgetBody site (render -> Javascript) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetBody :: (MonadWidget m, HandlerSite m ~ site) => (render -> Javascript) -> m () Source #

class ToWidgetMedia site a where Source #

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

Since 1.2

Methods

toWidgetMedia Source #

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

Instances details
ToWidgetMedia site Css Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> Css -> m () Source #

ToWidgetMedia site CssBuilder Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> CssBuilder -> m () Source #

render ~ RY site => ToWidgetMedia site (render -> Css) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> (render -> Css) -> m () Source #

render ~ RY site => ToWidgetMedia site (render -> CssBuilder) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> (render -> CssBuilder) -> m () Source #

Creating

Head of page

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

Set the page title.

Calling setTitle or setTitleI multiple times overrides previously set values.

SEO Notes:

  • Title tags are the second most important on-page factor for SEO, after content
  • Every page should have a unique title tag
  • Start your title tag with your main targeted keyword
  • Don't stuff your keywords
  • Google typically shows 55-64 characters, so aim to keep your title length under 60 characters

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

Set the localised page title.

n.b. See comments for setTitle

setDescription :: MonadWidget m => Text -> m () Source #

Warning: setDescription is not idempotent; we recommend setDescriptionIdemp insteadMultiple calls to setDescription will insert multiple meta tags in the page head.If you want an idempotent function, use setDescriptionIdemp - but if you do, you may need to change your layout to include pageDescription.

Add description meta tag to the head of the page

Google does not use the description tag as a ranking signal, but the contents of this tag will likely affect your click-through rate since it shows up in search results.

The average length of the description shown in Google's search results is about 160 characters on desktop, and about 130 characters on mobile, at time of writing.

Source: https://www.advancedwebranking.com/blog/meta-tags-important-in-seo/

Since: 1.6.18

setDescriptionI :: (MonadWidget m, RenderMessage (HandlerSite m) msg) => msg -> m () Source #

Warning: setDescriptionI is not idempotent; we recommend setDescriptionIdempI insteadMultiple calls to setDescriptionI will insert multiple meta tags in the page head.If you want an idempotent function, use setDescriptionIdempI - but if you do, you may need to change your layout to include pageDescription.

Add translated description meta tag to the head of the page

n.b. See comments for setDescription.

Since: 1.6.18

setDescriptionIdemp :: MonadWidget m => Text -> m () Source #

Add description meta tag to the head of the page

Google does not use the description tag as a ranking signal, but the contents of this tag will likely affect your click-through rate since it shows up in search results.

The average length of the description shown in Google's search results is about 160 characters on desktop, and about 130 characters on mobile, at time of writing.

Unlike setDescription, this version is *idempotent* - calling it multiple times will result in only a single description meta tag in the head.

Source: https://www.advancedwebranking.com/blog/meta-tags-important-in-seo/

Since: 1.6.23

setDescriptionIdempI :: (MonadWidget m, RenderMessage (HandlerSite m) msg) => msg -> m () Source #

Add translated description meta tag to the head of the page

n.b. See comments for setDescriptionIdemp.

Unlike setDescriptionI, this version is *idempotent* - calling it multiple times will result in only a single description meta tag in the head.

Since: 1.6.23

setOGType :: MonadWidget m => Text -> m () Source #

Add OpenGraph type meta tag to the head of the page

See all available OG types here: https://ogp.me/#types

Since: 1.6.18

setOGImage :: MonadWidget m => Text -> m () Source #

Add OpenGraph image meta tag to the head of the page

Best practices:

  • Use custom images for shareable pages, e.g., homepage, articles, etc.
  • Use your logo or any other branded image for the rest of your pages.
  • Use images with a 1.91:1 ratio and minimum recommended dimensions of 1200x630 for optimal clarity across all devices.

Source: https://ahrefs.com/blog/open-graph-meta-tags/

Since: 1.6.18

CSS

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

Link to the specified local stylesheet.

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

Link to the specified local stylesheet.

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

Link to the specified remote stylesheet.

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

Link to the specified remote stylesheet.

newtype CssBuilder Source #

Newtype wrapper allowing injection of arbitrary content into CSS.

Usage:

toWidget $ CssBuilder "p { color: red }"

Since: 1.1.3

Constructors

CssBuilder 

Instances

Instances details
ToWidget site CssBuilder Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => CssBuilder -> m () Source #

ToWidgetHead site CssBuilder Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => CssBuilder -> m () Source #

ToWidgetMedia site CssBuilder Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> CssBuilder -> m () Source #

render ~ RY site => ToWidget site (render -> CssBuilder) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidget :: (MonadWidget m, HandlerSite m ~ site) => (render -> CssBuilder) -> m () Source #

render ~ RY site => ToWidgetHead site (render -> CssBuilder) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetHead :: (MonadWidget m, HandlerSite m ~ site) => (render -> CssBuilder) -> m () Source #

render ~ RY site => ToWidgetMedia site (render -> CssBuilder) Source # 
Instance details

Defined in Yesod.Core.Widget

Methods

toWidgetMedia :: (MonadWidget m, HandlerSite m ~ site) => Text -> (render -> CssBuilder) -> m () Source #

Javascript

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

Link to the specified local script.

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

Link to the specified local script.

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

Link to the specified remote script.

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

Link to the specified remote script.

Subsites

Internal

asWidgetT :: WidgetT site m () -> WidgetT site m () Source #