Safe Haskell | None |
---|---|
Language | Haskell98 |
The BlazeMarkup core, consisting of functions that offer the power to
generate custom markup elements. It also offers user-centric functions,
which are exposed through Blaze
.
While this module is exported, usage of it is not recommended, unless you know what you are doing. This module might undergo changes at any time.
- data ChoiceString
- data StaticString = StaticString {
- getString :: String -> String
- getUtf8ByteString :: ByteString
- getText :: Text
- data MarkupM a
- = forall b . Parent StaticString StaticString StaticString (MarkupM b)
- | forall b . CustomParent ChoiceString (MarkupM b)
- | Leaf StaticString StaticString StaticString
- | CustomLeaf ChoiceString Bool
- | Content ChoiceString
- | Comment ChoiceString
- | forall b c . Append (MarkupM b) (MarkupM c)
- | AddAttribute StaticString StaticString ChoiceString (MarkupM a)
- | AddCustomAttribute ChoiceString ChoiceString (MarkupM a)
- | Empty
- type Markup = MarkupM ()
- data Tag
- data Attribute
- data AttributeValue
- customParent :: Tag -> Markup -> Markup
- customLeaf :: Tag -> Bool -> Markup
- attribute :: Tag -> Tag -> AttributeValue -> Attribute
- dataAttribute :: Tag -> AttributeValue -> Attribute
- customAttribute :: Tag -> AttributeValue -> Attribute
- text :: Text -> Markup
- preEscapedText :: Text -> Markup
- lazyText :: Text -> Markup
- preEscapedLazyText :: Text -> Markup
- string :: String -> Markup
- preEscapedString :: String -> Markup
- unsafeByteString :: ByteString -> Markup
- unsafeLazyByteString :: ByteString -> Markup
- textComment :: Text -> Markup
- lazyTextComment :: Text -> Markup
- stringComment :: String -> Markup
- unsafeByteStringComment :: ByteString -> Markup
- unsafeLazyByteStringComment :: ByteString -> Markup
- textTag :: Text -> Tag
- stringTag :: String -> Tag
- textValue :: Text -> AttributeValue
- preEscapedTextValue :: Text -> AttributeValue
- lazyTextValue :: Text -> AttributeValue
- preEscapedLazyTextValue :: Text -> AttributeValue
- stringValue :: String -> AttributeValue
- preEscapedStringValue :: String -> AttributeValue
- unsafeByteStringValue :: ByteString -> AttributeValue
- unsafeLazyByteStringValue :: ByteString -> AttributeValue
- class Attributable h where
- (!?) :: Attributable h => h -> (Bool, Attribute) -> h
- contents :: MarkupM a -> MarkupM b
- external :: MarkupM a -> MarkupM a
- null :: MarkupM a -> Bool
Important types.
data ChoiceString Source
A string denoting input from different string representations.
Static !StaticString | Static data |
String String | A Haskell String |
Text Text | A Text value |
ByteString ByteString | An encoded bytestring |
PreEscaped ChoiceString | A pre-escaped string |
External ChoiceString | External data in style/script tags, should be checked for validity |
AppendChoiceString ChoiceString ChoiceString | Concatenation |
EmptyChoiceString | Empty string |
data StaticString Source
A static string that supports efficient output to all possible backends.
StaticString | |
|
The core Markup datatype.
forall b . Parent StaticString StaticString StaticString (MarkupM b) | Tag, open tag, end tag, content |
forall b . CustomParent ChoiceString (MarkupM b) | Custom parent |
Leaf StaticString StaticString StaticString | Tag, open tag, end tag |
CustomLeaf ChoiceString Bool | Custom leaf |
Content ChoiceString | HTML content |
Comment ChoiceString | HTML comment. Note: you should wrap the |
forall b c . Append (MarkupM b) (MarkupM c) | Concatenation of two HTML pieces |
AddAttribute StaticString StaticString ChoiceString (MarkupM a) | Add an attribute to the inner HTML. Raw key, key, value, HTML to receive the attribute. |
AddCustomAttribute ChoiceString ChoiceString (MarkupM a) | Add a custom attribute to the inner HTML. |
Empty | Empty HTML. |
Type for an HTML tag. This can be seen as an internal string type used by BlazeMarkup.
data AttributeValue Source
The type for the value part of an attribute.
Creating custom tags and attributes.
Create a custom parent element
Create a custom leaf element
:: Tag | Raw key |
-> Tag | Shared key string for the HTML attribute. |
-> AttributeValue | Value for the HTML attribute. |
-> Attribute | Resulting HTML attribute. |
Create an HTML attribute that can be applied to an HTML element later using
the !
operator.
:: Tag | Name of the attribute. |
-> AttributeValue | Value for the attribute. |
-> Attribute | Resulting HTML attribute. |
From HTML 5 onwards, the user is able to specify custom data attributes.
An example:
<p data-foo="bar">Hello.</p>
We support this in BlazeMarkup using this funcion. The above fragment could be described using BlazeMarkup with:
p ! dataAttribute "foo" "bar" $ "Hello."
:: Tag | Name of the attribute |
-> AttributeValue | Value for the attribute |
-> Attribute | Resulting HTML attribtue |
Create a custom attribute. This is not specified in the HTML spec, but some JavaScript libraries rely on it.
An example:
<select dojoType="select">foo</select>
Can be produced using:
select ! customAttribute "dojoType" "select" $ "foo"
Converting values to Markup.
Render text. Functions like these can be used to supply content in HTML.
Render text without escaping.
A variant of preEscapedText
for lazy Text
Create an HTML snippet from a String
.
Create an HTML snippet from a String
without escaping
:: ByteString | Value to insert. |
-> Markup | Resulting HTML fragment. |
Insert a ByteString
. This is an unsafe operation:
- The
ByteString
could have the wrong encoding. - The
ByteString
might contain illegal HTML characters (no escaping is done).
:: ByteString | Value to insert |
-> Markup | Resulting HTML fragment |
Insert a lazy ByteString
. See unsafeByteString
for reasons why this
is an unsafe operation.
Comments
textComment :: Text -> Markup Source
Create a comment from a Text
value.
The text should not contain "--"
.
This is not checked by the library.
lazyTextComment :: Text -> Markup Source
Create a comment from a Text
value.
The text should not contain "--"
.
This is not checked by the library.
stringComment :: String -> Markup Source
Create a comment from a String
value.
The text should not contain "--"
.
This is not checked by the library.
unsafeByteStringComment :: ByteString -> Markup Source
Create a comment from a ByteString
value.
The text should not contain "--"
.
This is not checked by the library.
unsafeLazyByteStringComment :: ByteString -> Markup Source
Create a comment from a ByteString
value.
The text should not contain "--"
.
This is not checked by the library.
Converting values to tags.
Converting values to attribute values.
:: Text | The actual value. |
-> AttributeValue | Resulting attribute value. |
Render an attribute value from Text
.
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
Render an attribute value from Text
without escaping.
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
preEscapedLazyTextValue Source
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
A variant of preEscapedTextValue
for lazy Text
stringValue :: String -> AttributeValue Source
Create an attribute value from a String
.
preEscapedStringValue :: String -> AttributeValue Source
Create an attribute value from a String
without escaping.
:: ByteString | ByteString value |
-> AttributeValue | Resulting attribute value |
Create an attribute value from a ByteString
. See unsafeByteString
for reasons why this might not be a good idea.
unsafeLazyByteStringValue Source
:: ByteString | ByteString value |
-> AttributeValue | Resulting attribute value |
Create an attribute value from a lazy ByteString
. See
unsafeByteString
for reasons why this might not be a good idea.
Setting attributes
class Attributable h where Source
Used for applying attributes. You should not define your own instances of this class.
(!) :: h -> Attribute -> h Source
Apply an attribute to an element.
Example:
img ! src "foo.png"
Result:
<img src="foo.png" />
This can be used on nested elements as well.
Example:
p ! style "float: right" $ "Hello!"
Result:
<p style="float: right">Hello!</p>
Attributable (MarkupM a) Source | |
Attributable (MarkupM a -> MarkupM b) Source |
(!?) :: Attributable h => h -> (Bool, Attribute) -> h Source
Shorthand for setting an attribute depending on a conditional.
Example:
p !? (isBig, A.class "big") $ "Hello"
Gives the same result as:
(if isBig then p ! A.class "big" else p) "Hello"
Modifying Markup elements
contents :: MarkupM a -> MarkupM b Source
Take only the text content of an HTML tree.
contents $ do p ! $ "Hello " p ! $ "Word!"
Result:
Hello World!