Safe Haskell | None |
---|---|
Language | Haskell98 |
Text.Blaze.Internal
Contents
Description
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 #
A string denoting input from different string representations.
Constructors
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 # | |
Defined in Text.Blaze.Internal Methods fromString :: String -> ChoiceString # | |
Semigroup ChoiceString # | |
Defined in Text.Blaze.Internal Methods (<>) :: ChoiceString -> ChoiceString -> ChoiceString # sconcat :: NonEmpty ChoiceString -> ChoiceString # stimes :: Integral b => b -> ChoiceString -> ChoiceString # | |
Monoid ChoiceString # | |
Defined in Text.Blaze.Internal Methods mempty :: ChoiceString # mappend :: ChoiceString -> ChoiceString -> ChoiceString # mconcat :: [ChoiceString] -> ChoiceString # |
data StaticString #
A static string that supports efficient output to all possible backends.
Constructors
StaticString | |
Fields
|
Instances
IsString StaticString # | |
Defined in Text.Blaze.Internal Methods fromString :: String -> StaticString # |
The core Markup datatype.
Constructors
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 # | |
Functor MarkupM # | |
Applicative MarkupM # | |
ToMarkup Markup # | |
Defined in Text.Blaze | |
a ~ () => IsString (MarkupM a) # | |
Defined in Text.Blaze.Internal Methods fromString :: String -> MarkupM a # | |
Monoid a => Semigroup (MarkupM a) # | |
Monoid a => Monoid (MarkupM a) # | |
Attributable (MarkupM a) # | |
ToMarkup [Markup] # | |
Defined in Text.Blaze | |
Attributable (MarkupM a -> MarkupM b) # | |
Type for an HTML tag. This can be seen as an internal string type used by BlazeMarkup.
Instances
IsString Tag # | |
Defined in Text.Blaze.Internal Methods fromString :: String -> Tag # |
data AttributeValue #
The type for the value part of an attribute.
Instances
IsString AttributeValue # | |
Defined in Text.Blaze.Internal Methods fromString :: String -> AttributeValue # | |
Semigroup AttributeValue # | |
Defined in Text.Blaze.Internal Methods (<>) :: AttributeValue -> AttributeValue -> AttributeValue # sconcat :: NonEmpty AttributeValue -> AttributeValue # stimes :: Integral b => b -> AttributeValue -> AttributeValue # | |
Monoid AttributeValue # | |
Defined in Text.Blaze.Internal Methods mappend :: AttributeValue -> AttributeValue -> AttributeValue # mconcat :: [AttributeValue] -> AttributeValue # | |
ToValue AttributeValue # | |
Defined in Text.Blaze Methods toValue :: AttributeValue -> AttributeValue # |
Creating custom tags and attributes.
Create a custom parent element
Create a custom leaf element
Arguments
:: 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.
Arguments
:: 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."
Arguments
:: 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
A variant of preEscapedText
for lazy Text
Create an HTML snippet from a ChoiceString
.
Create an HTML snippet from a ChoiceString
without escaping
Arguments
:: 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).
Arguments
:: 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 #
Create a comment from a ChoiceString
value.
The text should not contain "--"
.
This is not checked by the library.
lazyTextComment :: Text -> Markup #
Create a comment from a Text
value.
The text should not contain "--"
.
This is not checked by the library.
stringComment :: String -> Markup #
Create a comment from a ChoiceString
value.
The text should not contain "--"
.
This is not checked by the library.
unsafeByteStringComment :: ByteString -> Markup #
Create a comment from a ChoiceString
value.
The text should not contain "--"
.
This is not checked by the library.
unsafeLazyByteStringComment :: ByteString -> Markup #
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.
Arguments
:: Text | The actual value. |
-> AttributeValue | Resulting attribute value. |
Render an attribute value from ChoiceString
.
Arguments
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
Render an attribute value from ChoiceString
without escaping.
Arguments
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
Arguments
:: Text | The actual value |
-> AttributeValue | Resulting attribute value |
A variant of preEscapedTextValue
for lazy Text
Arguments
:: Builder | The actual value |
-> AttributeValue | Resulting attribute value |
Arguments
:: Builder | The actual value |
-> AttributeValue | Resulting attribute value |
A variant of preEscapedTextValue
for text Builder
stringValue :: String -> AttributeValue #
Create an attribute value from a ChoiceString
.
preEscapedStringValue :: String -> AttributeValue #
Create an attribute value from a ChoiceString
without escaping.
Arguments
:: 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.
Arguments
:: 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 #
Used for applying attributes. You should not define your own instances of this class.
Minimal complete definition
(!) :: Attributable h => h -> Attribute -> h #
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 #
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 #
Take only the text content of an HTML tree.
contents $ do p ! $ "Hello " p ! $ "Word!"
Result:
Hello World!