Safe Haskell | None |
---|---|
Language | Haskell2010 |
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 Text.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.
Synopsis
- data ChoiceString
- data StaticString = StaticString {
- getString :: String -> String
- getUtf8ByteString :: ByteString
- getText :: Text
- data MarkupM a
- = Parent StaticString StaticString StaticString (MarkupM a)
- | CustomParent ChoiceString (MarkupM a)
- | Leaf StaticString StaticString StaticString a
- | CustomLeaf ChoiceString Bool a
- | Content ChoiceString a
- | Comment ChoiceString a
- | Append (MarkupM b) (MarkupM a)
- | AddAttribute StaticString StaticString ChoiceString (MarkupM a)
- | AddCustomAttribute ChoiceString ChoiceString (MarkupM a)
- | Empty a
- 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
- textBuilder :: Builder -> Markup
- preEscapedTextBuilder :: Builder -> 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
- textBuilderValue :: Builder -> AttributeValue
- preEscapedTextBuilderValue :: Builder -> AttributeValue
- stringValue :: String -> AttributeValue
- preEscapedStringValue :: String -> AttributeValue
- unsafeByteStringValue :: ByteString -> AttributeValue
- unsafeLazyByteStringValue :: ByteString -> AttributeValue
- class Attributable h
- (!) :: Attributable h => h -> Attribute -> h
- (!?) :: Attributable h => h -> (Bool, Attribute) -> h
- contents :: MarkupM a -> MarkupM a
- 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 |
Instances
IsString ChoiceString Source # | |
Defined in Text.Blaze.Internal fromString :: String -> ChoiceString # | |
Semigroup ChoiceString Source # | |
Defined in Text.Blaze.Internal (<>) :: ChoiceString -> ChoiceString -> ChoiceString # sconcat :: NonEmpty ChoiceString -> ChoiceString # stimes :: Integral b => b -> ChoiceString -> ChoiceString # | |
Monoid ChoiceString Source # | |
Defined in Text.Blaze.Internal mempty :: ChoiceString # mappend :: ChoiceString -> ChoiceString -> ChoiceString # mconcat :: [ChoiceString] -> ChoiceString # |
data StaticString Source #
A static string that supports efficient output to all possible backends.
StaticString | |
|
Instances
IsString StaticString Source # | |
Defined in Text.Blaze.Internal fromString :: String -> StaticString # |
The core Markup datatype.
Parent StaticString StaticString StaticString (MarkupM a) | Tag, open tag, end tag, content |
CustomParent ChoiceString (MarkupM a) | Custom parent |
Leaf StaticString StaticString StaticString a | Tag, open tag, end tag |
CustomLeaf ChoiceString Bool a | Custom leaf |
Content ChoiceString a | HTML content |
Comment ChoiceString a | HTML comment. Note: you should wrap the |
Append (MarkupM b) (MarkupM a) | 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 a | Empty HTML. |
Instances
Monad MarkupM Source # | |
Functor MarkupM Source # | |
Applicative MarkupM Source # | |
ToMarkup Markup Source # | |
a ~ () => IsString (MarkupM a) Source # | |
Defined in Text.Blaze.Internal fromString :: String -> MarkupM a # | |
Monoid a => Semigroup (MarkupM a) Source # | |
Monoid a => Monoid (MarkupM a) Source # | |
Attributable (MarkupM a) Source # | |
ToMarkup [Markup] Source # | |
Attributable (MarkupM a -> MarkupM b) Source # | |
Type for an HTML tag. This can be seen as an internal string type used by BlazeMarkup.
Instances
IsString Tag Source # | |
Defined in Text.Blaze.Internal fromString :: String -> Tag # |
data AttributeValue Source #
The type for the value part of an attribute.
Instances
IsString AttributeValue Source # | |
Defined in Text.Blaze.Internal fromString :: String -> AttributeValue # | |
Semigroup AttributeValue Source # | |
Defined in Text.Blaze.Internal (<>) :: AttributeValue -> AttributeValue -> AttributeValue # sconcat :: NonEmpty AttributeValue -> AttributeValue # stimes :: Integral b => b -> AttributeValue -> AttributeValue # | |
Monoid AttributeValue Source # | |
Defined in Text.Blaze.Internal mappend :: AttributeValue -> AttributeValue -> AttributeValue # mconcat :: [AttributeValue] -> AttributeValue # | |
ToValue AttributeValue Source # | |
Defined in Text.Blaze |
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 function. 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
preEscapedTextBuilder Source #
A variant of preEscapedText
for lazy Text
Create an HTML snippet from a ChoiceString
.
Create an HTML snippet from a ChoiceString
without escaping
:: ByteString | Value to insert. |
-> Markup | Resulting HTML fragment. |
Insert a ChoiceString
. This is an unsafe operation:
- The
ChoiceString
could have the wrong encoding. - The
ChoiceString
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 ChoiceString
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 ChoiceString
value.
The text should not contain "--"
.
This is not checked by the library.
unsafeByteStringComment :: ByteString -> Markup Source #
Create a comment from a ChoiceString
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.
Create a Tag
from some ChoiceString
.
Create a Tag
from a ChoiceString
.
Converting values to attribute values.
:: Text | The actual value. |
-> AttributeValue | Resulting attribute value. |
Render an attribute value from ChoiceString
.
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
Render an attribute value from ChoiceString
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
:: Builder | The actual value |
-> AttributeValue | Resulting attribute value |
preEscapedTextBuilderValue Source #
:: Builder | The actual value |
-> AttributeValue | Resulting attribute value |
A variant of preEscapedTextValue
for text Builder
stringValue :: String -> AttributeValue Source #
Create an attribute value from a ChoiceString
.
preEscapedStringValue :: String -> AttributeValue Source #
Create an attribute value from a ChoiceString
without escaping.
unsafeByteStringValue Source #
:: ByteString | ByteString value |
-> AttributeValue | Resulting attribute value |
Create an attribute value from a ChoiceString
. 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 Source #
Used for applying attributes. You should not define your own instances of this class.
(!) :: Attributable h => 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 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 a Source #
Take only the text content of an HTML tree.
contents $ do p ! $ "Hello " p ! $ "Word!"
Result:
Hello World!