shakespeare-2.0.20: A toolkit for making compile-time interpolated templates

Safe Haskell | None
Language | Haskell98

Text.Hamlet

Contents

- Plain HTML
- Hamlet
- I18N Hamlet
- Type classes
- Internal, for making more
- Used by generated code
- low-level

Synopsis

- type Html = Markup
- shamlet :: QuasiQuoter
- shamletFile :: FilePath -> Q Exp
- xshamlet :: QuasiQuoter
- xshamletFile :: FilePath -> Q Exp
- type HtmlUrl url = Render url -> Html
- type Render url = url -> [(Text, Text)] -> Text
- hamlet :: QuasiQuoter
- hamletFile :: FilePath -> Q Exp
- hamletFileReload :: FilePath -> Q Exp
- xhamlet :: QuasiQuoter
- xhamletFile :: FilePath -> Q Exp
- type HtmlUrlI18n msg url = Translate msg -> Render url -> Html
- type Translate msg = msg -> Html
- ihamlet :: QuasiQuoter
- ihamletFile :: FilePath -> Q Exp
- ihamletFileReload :: FilePath -> Q Exp
- class ToAttributes a where
  - toAttributes :: a -> [(Text, Text)]
- data HamletSettings = HamletSettings {
  - hamletDoctype :: String
  - hamletNewlines :: NewlineStyle
  - hamletCloseStyle :: String -> CloseStyle
  - hamletDoctypeNames :: [(String, String)]
  }
- data NewlineStyle
  - = NoNewlines
  - | NewlinesText
  - | AlwaysNewlines
  - | DefaultNewlineStyle
- hamletWithSettings :: Q HamletRules -> HamletSettings -> QuasiQuoter
- hamletFileWithSettings :: Q HamletRules -> HamletSettings -> FilePath -> Q Exp
- defaultHamletSettings :: HamletSettings
- xhtmlHamletSettings :: HamletSettings
- data Env = Env {
  - urlRender :: Maybe ((Exp -> Q Exp) -> Q Exp)
  - msgRender :: Maybe ((Exp -> Q Exp) -> Q Exp)
  }
- data HamletRules = HamletRules {
  - hrFromHtml :: Exp
  - hrWithEnv :: (Env -> Q Exp) -> Q Exp
  - hrEmbed :: Env -> Exp -> Q Exp
  }
- hamletRules :: Q HamletRules
- ihamletRules :: Q HamletRules
- htmlRules :: Q HamletRules
- data CloseStyle
  - = NoClose
  - | CloseInside
  - | CloseSeparate
- condH :: Monad m => [(Bool, m ())] -> Maybe (m ()) -> m ()
- maybeH :: Monad m => Maybe v -> (v -> m ()) -> Maybe (m ()) -> m ()
- asHtmlUrl :: HtmlUrl url -> HtmlUrl url
- attrsToHtml :: [(Text, Text)] -> Html
- hamletFromString :: Q HamletRules -> HamletSettings -> String -> Q Exp

# Plain HTML

type Html = Markup Source #

shamlet :: QuasiQuoter Source #

"Simple Hamlet" quasi-quoter. May only be used to generate expressions.

Generated expressions have type `Html`.

    >>> putStrLn (renderHtml [shamlet|<div>Hello, world!|])
    <div>Hello, world!</div>

shamletFile :: FilePath -> Q Exp Source #

xshamlet :: QuasiQuoter Source #

Like `shamlet`, but produces XHTML.

xshamletFile :: FilePath -> Q Exp Source #

Like `shamletFile`, but produces XHTML.

# Hamlet

type HtmlUrl url = Render url -> Html Source #

A function generating an `Html` given a URL-rendering function.

type Render url = url -> [(Text, Text)] -> Text Source #

hamlet :: QuasiQuoter Source #

Hamlet quasi-quoter. May only be used to generate expressions.

Generated expression have type ``HtmlUrl` url`, for some `url`.

    data MyRoute = Home

    render :: Render MyRoute
    render Home _ = "/home"

    >>> putStrLn (renderHtml ([hamlet|<a href=@{Home}>Home|] render))
    <a href="/home">Home</a>

hamletFile :: FilePath -> Q Exp Source #

hamletFileReload :: FilePath -> Q Exp Source #

Like `hamletFile`, but the external file is parsed at runtime. Allows for more rapid development, but should not be used in production.

xhamlet :: QuasiQuoter Source #

Like `hamlet`, but produces XHTML.

xhamletFile :: FilePath -> Q Exp Source #

Like `hamletFile`, but produces XHTML.

# I18N Hamlet

type HtmlUrlI18n msg url = Translate msg -> Render url -> Html Source #

A function generating an `Html` given a message translator and a URL rendering function.

type Translate msg = msg -> Html Source #

ihamlet :: QuasiQuoter Source #

Hamlet quasi-quoter with internationalization. May only be used to generate expressions.

Generated expressions have type ``HtmlUrlI18n` msg url`, for some `msg` and `url`.

    data MyMsg = Hi | Bye

    data MyRoute = Home

    renderEnglish :: Translate MyMsg
    renderEnglish Hi  = "hi"
    renderEnglish Bye = "bye"

    renderUrl :: Render MyRoute
    renderUrl Home _ = "/home"

    >>> putStrLn (renderHtml ([ihamlet|@{Home} _{Hi} _{Bye}|] renderEnglish renderUrl))
    <div>/home hi bye <div>

ihamletFile :: FilePath -> Q Exp Source #

ihamletFileReload :: FilePath -> Q Exp Source #

Like `ihamletFile`, but the external file is parsed at runtime. Allows for more rapid development, but should not be used in production.

# Type classes

class ToAttributes a where Source #

Convert some value to a list of attribute pairs.

Methods

toAttributes :: a -> [(Text, Text)] Source #

Instances

ToAttributes [(Text, Text)] Source # |
Instance details Defined in Text.Hamlet Methods toAttributes :: [(Text, Text)] -> [(Text, Text)] Source #
ToAttributes [(String, String)] Source # |
Instance details Defined in Text.Hamlet Methods toAttributes :: [(String, String)] -> [(Text, Text)] Source #
ToAttributes (Text, Text) Source # |
Instance details Defined in Text.Hamlet Methods toAttributes :: (Text, Text) -> [(Text, Text)] Source #
ToAttributes (String, String) Source # |
Instance details Defined in Text.Hamlet Methods toAttributes :: (String, String) -> [(Text, Text)] Source #

# Internal, for making more

data HamletSettings Source #

Settings for parsing of a hamlet document.

Constructors

HamletSettings |

Fields

- hamletDoctype :: String

  The value to replace a "!!!" with. Do not include the trailing newline.

- hamletNewlines :: NewlineStyle

  Should we add newlines to the output, making it more human-readable? Useful for client-side debugging but may alter browser page layout.

- hamletCloseStyle :: String -> CloseStyle

  How a tag should be closed. Use this to switch between HTML, XHTML or even XML output.

- hamletDoctypeNames :: [(String, String)]

  Mapping from short names in "$doctype" statements to full doctype.

Instances

Lift HamletSettings Source # |
Instance details Defined in Text.Hamlet.Parse Methods lift :: HamletSettings -> Q Exp Source #

data NewlineStyle Source #

Constructors

NoNewlines | never add newlines
NewlinesText | add newlines between consecutive text lines
AlwaysNewlines | add newlines everywhere
DefaultNewlineStyle |

Instances

Show NewlineStyle Source # |
Instance details Defined in Text.Hamlet.Parse Methods showsPrec :: Int -> NewlineStyle -> ShowS Source # show :: NewlineStyle -> String Source # showList :: [NewlineStyle] -> ShowS Source #
Lift NewlineStyle Source # |
Instance details Defined in Text.Hamlet.Parse Methods lift :: NewlineStyle -> Q Exp Source #

hamletWithSettings :: Q HamletRules -> HamletSettings -> QuasiQuoter Source #

hamletFileWithSettings :: Q HamletRules -> HamletSettings -> FilePath -> Q Exp Source #

defaultHamletSettings :: HamletSettings Source #

Defaults settings: HTML5 doctype and HTML-style empty tags.

xhtmlHamletSettings :: HamletSettings Source #

data Env Source #

Constructors

Env |

Fields

- urlRender :: Maybe ((Exp -> Q Exp) -> Q Exp)
- msgRender :: Maybe ((Exp -> Q Exp) -> Q Exp)

data HamletRules Source #

Constructors

HamletRules |

Fields

- hrFromHtml :: Exp
- hrWithEnv :: (Env -> Q Exp) -> Q Exp
- hrEmbed :: Env -> Exp -> Q Exp

hamletRules :: Q HamletRules Source #

ihamletRules :: Q HamletRules Source #

htmlRules :: Q HamletRules Source #

data CloseStyle Source #

Constructors

NoClose |
CloseInside |
CloseSeparate |

Instances

Lift (String -> CloseStyle) Source # |
Instance details Defined in Text.Hamlet.Parse Methods lift :: (String -> CloseStyle) -> Q Exp Source #

# Used by generated code

condH :: Monad m => [(Bool, m ())] -> Maybe (m ()) -> m () Source #

Checks for truth in the left value in each pair in the first argument. If a true exists, then the corresponding right action is performed. Only the first is performed. In there are no true values, then the second argument is performed, if supplied.

maybeH :: Monad m => Maybe v -> (v -> m ()) -> Maybe (m ()) -> m () Source #

Runs the second argument with the value in the first, if available. Otherwise, runs the third argument, if available.

asHtmlUrl :: HtmlUrl url -> HtmlUrl url Source #

attrsToHtml :: [(Text, Text)] -> Html Source #

# low-level

hamletFromString :: Q HamletRules -> HamletSettings -> String -> Q Exp Source #