front (empty) → 0.0.0.1
raw patch · 14 files changed
+5501/−0 lines, 14 filesdep +basedep +blaze-htmldep +blaze-markupsetup-changed
Dependencies added: base, blaze-html, blaze-markup, bytestring, fay, text
Files
- ChangeLog.md +5/−0
- LICENSE +30/−0
- README.md +1/−0
- Setup.hs +2/−0
- front.cabal +43/−0
- shared/Bridge.hs +64/−0
- src/Text/Blaze/Front.hs +238/−0
- src/Text/Blaze/Front/Event.hs +175/−0
- src/Text/Blaze/Front/Html5.hs +2084/−0
- src/Text/Blaze/Front/Html5/Attributes.hs +1870/−0
- src/Text/Blaze/Front/Internal.hs +487/−0
- src/Text/Blaze/Front/Renderer.hs +237/−0
- src/Text/Blaze/Front/Svg.hs +85/−0
- src/Text/Blaze/Front/Svg/Attributes.hs +180/−0
+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Revision history for front++## 0.0.0.1 -- YYYY-mm-dd++* First version. Released on an unsuspecting world.
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2019, Andrey Prokopenko++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Andrey Prokopenko nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,1 @@+# front
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ front.cabal view
@@ -0,0 +1,43 @@+-- Initial front.cabal generated by cabal init. For further documentation,+-- see http://haskell.org/cabal/users-guide/++name: front+version: 0.0.0.1+synopsis: A reactive frontend web framework+description: A reactive frontend web framework. See haskell-front.org for more details.+homepage: haskell-front.org+license: BSD3+license-file: LICENSE+author: Andrey Prokopenko+maintainer: persiantiger@yandex.ru+-- copyright:+category: Web+build-type: Simple+extra-source-files: ChangeLog.md, README.md+cabal-version: >=1.10++source-repository head+ type: git+ location: https://github.com/swamp-agr/front.git + +library+ exposed-modules: Text.Blaze.Front+ , Text.Blaze.Front.Svg+ , Text.Blaze.Front.Internal+ , Text.Blaze.Front.Html5+ , Text.Blaze.Front.Svg.Attributes+ , Text.Blaze.Front.Html5.Attributes+ , Text.Blaze.Front.Event+ , Text.Blaze.Front.Renderer+ -- shared+ , Bridge+ -- other-modules:+ other-extensions: FlexibleInstances, TypeSynonymInstances, OverloadedStrings, GeneralizedNewtypeDeriving, Rank2Types, ExistentialQuantification, DeriveDataTypeable, MultiParamTypeClasses, DeriveFunctor, FunctionalDependencies, ScopedTypeVariables+ build-depends: base >=4.11 && <4.12+ , text >=1.2 && <1.3+ , bytestring >=0.10 && <0.11+ , blaze-markup >=0.8 && <0.10+ , blaze-html >=0.9 && <0.10+ , fay >= 0.24.0.2+ hs-source-dirs: src, shared+ default-language: Haskell2010
@@ -0,0 +1,64 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE CPP #-}+module Bridge where++import Prelude++import Data.Data++-- | One specific and incomplete specifications of event-handlers geared+-- towards their use with JS.+data EventHandler a+ = OnKeyDown !a+ | OnKeyUp !a+ | OnKeyPress !a+ | OnFocus !a+ | OnBlur !a+ | OnValueChange !a+ | OnCheckedChange !a+ | OnSelectedChange !a+ | OnSubmit !a+ | OnClick !a+ | OnDoubleClick !a+ | OnMouseDown !a+ | OnMouseUp !a+ | OnMouseMove !a+ | OnMouseEnter !a+ | OnMouseLeave !a+ | OnMouseOver !a+ | OnMouseOut !a+ | OnScroll !a+ | OnWheel !a++ -- TODO: Implement these+ -- OnCopy ([File] -> IO a)+ -- OnCut ([File] -> IO a)+ -- OnPaste ([File] -> IO a)++ -- TODO: Implement these.+ -- OnDrag ([File] -> IO a)+ -- OnDragEnd ([File] -> IO a)+ -- OnDragEnter ([File] -> IO a)+ -- OnDragExit ([File] -> IO a)+ -- OnDragLeave ([File] -> IO a)+ -- OnDragOver ([File] -> IO a)+ -- OnDragStart ([File] -> IO a)+ -- OnDrop ([File] -> IO a)++ -- TODO: add more events.++#ifdef FAY+ deriving (Typeable, Data)+#else+ deriving (Functor, Typeable, Data)+#endif++data CallbackAction a = CallbackAction (EventHandler a)+#ifdef FAY+ deriving (Typeable, Data)+#else+ deriving (Typeable, Data)+#endif
+ src/Text/Blaze/Front.hs view
@@ -0,0 +1,238 @@+{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}+-- | BlazeMarkup is a markup combinator library. It provides a way to embed+-- markup languages like HTML and SVG in Haskell in an efficient and convenient+-- way, with a light-weight syntax.+--+-- To use the library, one needs to import a set of combinators. For example,+-- you can use HTML 4 Strict from BlazeHtml package.+--+-- > {-# LANGUAGE OverloadedStrings #-}+-- > import Prelude hiding (head, id, div)+-- > import Text.Blaze.Html4.Strict hiding (map)+-- > import Text.Blaze.Html4.Strict.Attributes hiding (title)+--+-- To render the page later on, you need a so called Renderer. The recommended+-- renderer is an UTF-8 renderer which produces a lazy bytestring.+--+-- > import Text.Blaze.Renderer.Utf8 (renderMarkup)+--+-- Now, you can describe pages using the imported combinators.+--+-- > page1 :: Markup+-- > page1 = html $ do+-- > head $ do+-- > title "Introduction page."+-- > link ! rel "stylesheet" ! type_ "text/css" ! href "screen.css"+-- > body $ do+-- > div ! id "header" $ "Syntax"+-- > p "This is an example of BlazeMarkup syntax."+-- > ul $ mapM_ (li . toMarkup . show) [1, 2, 3]+--+-- The resulting HTML can now be extracted using:+--+-- > renderMarkup page1+--+module Text.Blaze.Front+ (+ -- * Important types.+ Markup+ , Tag+ , Attribute+ , AttributeValue++ -- * Creating attributes.+ , dataAttribute+ , customAttribute++ -- * Converting values to Markup.+ , ToMarkup (..)+ , unsafeByteString+ , unsafeLazyByteString++ -- * Creating tags.+ , textTag+ , stringTag++ -- * Converting values to attribute values.+ , ToValue (..)+ , unsafeByteStringValue+ , unsafeLazyByteStringValue++ -- * Setting attributes+ , (!)+ , (!?)++ -- * Modifiying Markup trees+ , contents+ ) where++import Data.Int (Int32, Int64)+import Data.Word (Word, Word32, Word64)++import Data.Text (Text)+import qualified Data.Text.Lazy as LT++import Prelude+import Text.Blaze.Front.Internal++-- | Class allowing us to use a single function for Markup values+--+class ToMarkup a where+ -- | Convert a value to Markup.+ --+ toMarkup :: a -> Markup ev++ -- | Convert a value to Markup without escaping+ --+ preEscapedToMarkup :: a -> Markup ev+ preEscapedToMarkup = toMarkup+ {-# INLINE preEscapedToMarkup #-}++-- instance ToMarkup (Markup ev) where+-- toMarkup = id+-- {-# INLINE toMarkup #-}+--+-- instance ToMarkup [Markup ev] where+-- toMarkup = mconcat+-- {-# INLINE toMarkup #-}++instance ToMarkup Text where+ toMarkup = text+ {-# INLINE toMarkup #-}+ preEscapedToMarkup = preEscapedText+ {-# INLINE preEscapedToMarkup #-}++instance ToMarkup LT.Text where+ toMarkup = lazyText+ {-# INLINE toMarkup #-}+ preEscapedToMarkup = preEscapedLazyText+ {-# INLINE preEscapedToMarkup #-}++instance ToMarkup String where+ toMarkup = string+ {-# INLINE toMarkup #-}+ preEscapedToMarkup = preEscapedString+ {-# INLINE preEscapedToMarkup #-}++instance ToMarkup Int where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Int32 where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Int64 where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Char where+ toMarkup = string . return+ {-# INLINE toMarkup #-}++instance ToMarkup Bool where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Integer where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Float where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Double where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Word where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Word32 where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++instance ToMarkup Word64 where+ toMarkup = string . show+ {-# INLINE toMarkup #-}++-- | Class allowing us to use a single function for attribute values+--+class ToValue a where+ -- | Convert a value to an attribute value+ --+ toValue :: a -> AttributeValue++ -- | Convert a value to an attribute value without escaping+ --+ preEscapedToValue :: a -> AttributeValue+ preEscapedToValue = toValue+ {-# INLINE preEscapedToValue #-}++instance ToValue AttributeValue where+ toValue = id+ {-# INLINE toValue #-}++instance ToValue Text where+ toValue = textValue+ {-# INLINE toValue #-}+ preEscapedToValue = preEscapedTextValue+ {-# INLINE preEscapedToValue #-}++instance ToValue LT.Text where+ toValue = lazyTextValue+ {-# INLINE toValue #-}+ preEscapedToValue = preEscapedLazyTextValue+ {-# INLINE preEscapedToValue #-}++instance ToValue String where+ toValue = stringValue+ {-# INLINE toValue #-}+ preEscapedToValue = preEscapedStringValue+ {-# INLINE preEscapedToValue #-}++instance ToValue Int where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Int32 where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Int64 where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Char where+ toValue = stringValue . return+ {-# INLINE toValue #-}++instance ToValue Bool where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Integer where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Float where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Double where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Word where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Word32 where+ toValue = stringValue . show+ {-# INLINE toValue #-}++instance ToValue Word64 where+ toValue = stringValue . show+ {-# INLINE toValue #-}
+ src/Text/Blaze/Front/Event.hs view
@@ -0,0 +1,175 @@+{-# LANGUAGE DeriveFunctor #-}++module Text.Blaze.Front.Event+ ( -- * Event handling+ mapActions++ -- ** Keyboard events+ , onKeyDown+ , onKeyUp + , onKeyPress++ -- ** Focus events+ , onFocus + , onBlur ++ -- ** Form events+ , onValueChange+ , onCheckedChange+ , onSelectedChange+ , onSubmit ++ -- ** Mouse events+ , onClick + , onDoubleClick + , onMouseDown + , onMouseUp + , onMouseMove + , onMouseEnter + , onMouseLeave + , onMouseOver + , onMouseOut ++ -- ** UI Events+ , onScroll ++ -- ** Wheel Events+ , onWheel ++ ) where++import Text.Blaze.Front.Internal (MarkupM(..), Attribute(..), Markup)+import Prelude++import Bridge++-- | Modify all event handlers attached to a 'Markup' tree so that the given+-- function is applied to the return values of their callbacks.+mapActions :: (act -> act') -> Markup act -> Markup act'+mapActions = MapActions++-- Keyboard events+-------------------------------------------------------------------------------++-- | The user has pressed a physical key while the target element was focused.+onKeyDown :: act -> Attribute act+onKeyDown = onEvent . OnKeyDown ++-- | The user has released a phyiscal key while the target element was focused.+onKeyUp :: act -> Attribute act+onKeyUp = onEvent . OnKeyUp++-- | The user has input some ASCII character while the target element was+onKeyPress :: act -> Attribute act+onKeyPress = onEvent . OnKeyPress++-- Focus events+-------------------------------------------------------------------------------++-- | The focus has moved to the target element.+onFocus :: act -> Attribute act+onFocus = onEvent . OnFocus++-- | The focus has left the target element.+onBlur :: act -> Attribute act+onBlur = onEvent . OnBlur++-- Form events+-------------------------------------------------------------------------------++-- | The 'value' property of the target element has changed. The new value is+-- passed as a parameter to the callback. This handler is supported for+-- <input>, <textarea>, and <select> elements.+onValueChange :: act -> Attribute act+onValueChange = onEvent . OnValueChange++-- | The 'checked' property of the target element has changed. This handler is+-- supported for <input> elements of type 'checkbox' or 'radio'.+onCheckedChange :: act -> Attribute act+onCheckedChange = onEvent . OnCheckedChange++-- | The 'selected' property of the the target element has changed. This+-- handler is supported for <option> elements.+onSelectedChange :: act -> Attribute act+onSelectedChange = onEvent . OnSelectedChange++-- | The user has submitted the target form. This handler is supported for+-- <form> elements.+onSubmit :: act -> Attribute act+onSubmit = onEvent . OnSubmit++-- Mouse events+-------------------------------------------------------------------------------++-- | A simplified version of 'onClick' which watches for the 'LeftButton' only+-- and ignores the cursor position.+onClick :: act -> Attribute act+onClick = onEvent . OnClick++-- | A simplified version of 'onDoubleClick' which watches for the 'LeftButton'+-- only and ignores the cursor position.+onDoubleClick :: act -> Attribute act+onDoubleClick = onEvent . OnDoubleClick++-- | A simplified version of 'onMouseDown' which watches for the 'LeftButton'+-- only and ignores the cursor position.+onMouseDown :: act -> Attribute act+onMouseDown = onEvent . OnMouseDown++-- | A simplified version of 'onMouseUp' which watches for the 'LeftButton'+-- only and ignores the cursor position.+onMouseUp :: act -> Attribute act+onMouseUp = onEvent . OnMouseUp++-- | The mouse cursor has moved while positioned over the target element. The+-- mouse position at the time the event was fired is passed as a parameter to+-- the callback.+onMouseMove :: act -> Attribute act+onMouseMove = onEvent . OnMouseMove++-- | The mouse cursor has entered the region occupied by the target element.+-- The mouse position at the time the event was fired is passed as a parameter+-- to the callback.+onMouseEnter :: act -> Attribute act+onMouseEnter = onEvent . OnMouseEnter++-- | The mouse cursor has left the region occupied by the target element. The+-- mouse position at the time the event was fired is passed as a parameter to+-- the callback.+onMouseLeave :: act -> Attribute act+onMouseLeave = onEvent . OnMouseLeave++-- | Like MouseEnter, but handles bubbling differently.+onMouseOver :: act -> Attribute act+onMouseOver = onEvent . OnMouseOver++-- | Like MouseLeave, but handles bubbling differently.+onMouseOut :: act -> Attribute act+onMouseOut = onEvent . OnMouseOut++-- UI events+-------------------------------------------------------------------------------++-- | The the scroll-position of the page has changed. The amount by which it+-- has changed (in lines) is passed as a parameter to the callback.+onScroll :: act -> Attribute act+onScroll = onEvent . OnScroll++-- Wheel events+-------------------------------------------------------------------------------++-- | The user has moved the scroll-wheel. The amount by which the scroll+-- position of an infinitely large page is affected is passed as a parameter to+-- the callback.+onWheel :: act -> Attribute act+onWheel = onEvent . OnWheel+++-------------------------------------------------------------------------------+-- Internal+-------------------------------------------------------------------------------++-- | Register an event handler.+onEvent :: EventHandler act -> Attribute act+onEvent eh = Attribute (OnEvent eh)+{-# INLINE onEvent #-}
+ src/Text/Blaze/Front/Html5.hs view
@@ -0,0 +1,2084 @@+-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:69+--+{-# LANGUAGE OverloadedStrings #-}+-- | This module exports HTML combinators used to create documents.+--+module Text.Blaze.Front.Html5+ ( module Text.Blaze.Front+ , Html+ , toHtml+ , preEscapedToHtml++ , docType+ , docTypeHtml+ , a+ , abbr+ , address+ , area+ , article+ , aside+ , audio+ , b+ , base+ , bdo+ , blockquote+ , body+ , br+ , button+ , canvas+ , caption+ , cite+ , code+ , col+ , colgroup+ , command+ , datalist+ , dd+ , del+ , details+ , dfn+ , div+ , dl+ , dt+ , em+ , embed+ , fieldset+ , figcaption+ , figure+ , footer+ , form+ , h1+ , h2+ , h3+ , h4+ , h5+ , h6+ , head+ , header+ , hgroup+ , hr+ , html+ , i+ , iframe+ , img+ , input+ , ins+ , kbd+ , keygen+ , label+ , legend+ , li+ , link+ , map+ , mark+ , menu+ , menuitem+ , meta+ , meter+ , nav+ , noscript+ , object+ , ol+ , optgroup+ , option+ , output+ , p+ , param+ , pre+ , progress+ , q+ , rp+ , rt+ , ruby+ , samp+ , script+ , section+ , select+ , small+ , source+ , span+ , strong+ , style+ , sub+ , summary+ , sup+ , svg+ , table+ , tbody+ , td+ , textarea+ , tfoot+ , th+ , thead+ , time+ , title+ , tr+ , track+ , ul+ , var+ , video+ , wbr+ ) where++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:77+--+import Prelude ((>>), (.))++import Text.Blaze.Front+import Text.Blaze.Front.Internal+import Text.Blaze.Front.Svg (Svg)++type Html ev = Markup ev++toHtml :: ToMarkup a => a -> Html ev+toHtml = toMarkup++preEscapedToHtml :: ToMarkup a => a -> Html ev+preEscapedToHtml = preEscapedToMarkup+++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:156+--+-- | Combinator for the document type. This should be placed at the top+-- of every HTML page.+--+-- Example:+--+-- > docType+--+-- Result:+--+-- > <!DOCTYPE HTML>+--+docType :: Html ev -- ^ The document type HTML.+docType = preEscapedText "<!DOCTYPE HTML>\n"+{-# INLINE docType #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:177+--+-- | Combinator for the @\<html>@ element. This combinator will also+-- insert the correct doctype.+--+-- Example:+--+-- > docTypeHtml $ span $ toHtml "foo"+--+-- Result:+--+-- > <!DOCTYPE HTML>+-- > <html><span>foo</span></html>+--+docTypeHtml :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+docTypeHtml inner = docType >> html inner+{-# INLINE docTypeHtml #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<a>@ element.+--+-- Example:+--+-- > a $ span $ toHtml "foo"+--+-- Result:+--+-- > <a><span>foo</span></a>+--+a :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+a = Parent "a" "<a" "</a>"+{-# INLINE a #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<abbr>@ element.+--+-- Example:+--+-- > abbr $ span $ toHtml "foo"+--+-- Result:+--+-- > <abbr><span>foo</span></abbr>+--+abbr :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+abbr = Parent "abbr" "<abbr" "</abbr>"+{-# INLINE abbr #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<address>@ element.+--+-- Example:+--+-- > address $ span $ toHtml "foo"+--+-- Result:+--+-- > <address><span>foo</span></address>+--+address :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+address = Parent "address" "<address" "</address>"+{-# INLINE address #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<area />@ element.+--+-- Example:+--+-- > area+--+-- Result:+--+-- > <area />+--+area :: Html ev -- ^ Resulting HTML.+area = Leaf "area" "<area" ">"+{-# INLINE area #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<article>@ element.+--+-- Example:+--+-- > article $ span $ toHtml "foo"+--+-- Result:+--+-- > <article><span>foo</span></article>+--+article :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+article = Parent "article" "<article" "</article>"+{-# INLINE article #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<aside>@ element.+--+-- Example:+--+-- > aside $ span $ toHtml "foo"+--+-- Result:+--+-- > <aside><span>foo</span></aside>+--+aside :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+aside = Parent "aside" "<aside" "</aside>"+{-# INLINE aside #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<audio>@ element.+--+-- Example:+--+-- > audio $ span $ toHtml "foo"+--+-- Result:+--+-- > <audio><span>foo</span></audio>+--+audio :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+audio = Parent "audio" "<audio" "</audio>"+{-# INLINE audio #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<b>@ element.+--+-- Example:+--+-- > b $ span $ toHtml "foo"+--+-- Result:+--+-- > <b><span>foo</span></b>+--+b :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+b = Parent "b" "<b" "</b>"+{-# INLINE b #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<base />@ element.+--+-- Example:+--+-- > base+--+-- Result:+--+-- > <base />+--+base :: Html ev -- ^ Resulting HTML.+base = Leaf "base" "<base" ">"+{-# INLINE base #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<bdo>@ element.+--+-- Example:+--+-- > bdo $ span $ toHtml "foo"+--+-- Result:+--+-- > <bdo><span>foo</span></bdo>+--+bdo :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+bdo = Parent "bdo" "<bdo" "</bdo>"+{-# INLINE bdo #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<blockquote>@ element.+--+-- Example:+--+-- > blockquote $ span $ toHtml "foo"+--+-- Result:+--+-- > <blockquote><span>foo</span></blockquote>+--+blockquote :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+blockquote = Parent "blockquote" "<blockquote" "</blockquote>"+{-# INLINE blockquote #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<body>@ element.+--+-- Example:+--+-- > body $ span $ toHtml "foo"+--+-- Result:+--+-- > <body><span>foo</span></body>+--+body :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+body = Parent "body" "<body" "</body>"+{-# INLINE body #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<br />@ element.+--+-- Example:+--+-- > br+--+-- Result:+--+-- > <br />+--+br :: Html ev -- ^ Resulting HTML.+br = Leaf "br" "<br" ">"+{-# INLINE br #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<button>@ element.+--+-- Example:+--+-- > button $ span $ toHtml "foo"+--+-- Result:+--+-- > <button><span>foo</span></button>+--+button :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+button = Parent "button" "<button" "</button>"+{-# INLINE button #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<canvas>@ element.+--+-- Example:+--+-- > canvas $ span $ toHtml "foo"+--+-- Result:+--+-- > <canvas><span>foo</span></canvas>+--+canvas :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+canvas = Parent "canvas" "<canvas" "</canvas>"+{-# INLINE canvas #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<caption>@ element.+--+-- Example:+--+-- > caption $ span $ toHtml "foo"+--+-- Result:+--+-- > <caption><span>foo</span></caption>+--+caption :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+caption = Parent "caption" "<caption" "</caption>"+{-# INLINE caption #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<cite>@ element.+--+-- Example:+--+-- > cite $ span $ toHtml "foo"+--+-- Result:+--+-- > <cite><span>foo</span></cite>+--+cite :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+cite = Parent "cite" "<cite" "</cite>"+{-# INLINE cite #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<code>@ element.+--+-- Example:+--+-- > code $ span $ toHtml "foo"+--+-- Result:+--+-- > <code><span>foo</span></code>+--+code :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+code = Parent "code" "<code" "</code>"+{-# INLINE code #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<col />@ element.+--+-- Example:+--+-- > col+--+-- Result:+--+-- > <col />+--+col :: Html ev -- ^ Resulting HTML.+col = Leaf "col" "<col" ">"+{-# INLINE col #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<colgroup>@ element.+--+-- Example:+--+-- > colgroup $ span $ toHtml "foo"+--+-- Result:+--+-- > <colgroup><span>foo</span></colgroup>+--+colgroup :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+colgroup = Parent "colgroup" "<colgroup" "</colgroup>"+{-# INLINE colgroup #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<command>@ element.+--+-- Example:+--+-- > command $ span $ toHtml "foo"+--+-- Result:+--+-- > <command><span>foo</span></command>+--+command :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+command = Parent "command" "<command" "</command>"+{-# INLINE command #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<datalist>@ element.+--+-- Example:+--+-- > datalist $ span $ toHtml "foo"+--+-- Result:+--+-- > <datalist><span>foo</span></datalist>+--+datalist :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+datalist = Parent "datalist" "<datalist" "</datalist>"+{-# INLINE datalist #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<dd>@ element.+--+-- Example:+--+-- > dd $ span $ toHtml "foo"+--+-- Result:+--+-- > <dd><span>foo</span></dd>+--+dd :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+dd = Parent "dd" "<dd" "</dd>"+{-# INLINE dd #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<del>@ element.+--+-- Example:+--+-- > del $ span $ toHtml "foo"+--+-- Result:+--+-- > <del><span>foo</span></del>+--+del :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+del = Parent "del" "<del" "</del>"+{-# INLINE del #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<details>@ element.+--+-- Example:+--+-- > details $ span $ toHtml "foo"+--+-- Result:+--+-- > <details><span>foo</span></details>+--+details :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+details = Parent "details" "<details" "</details>"+{-# INLINE details #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<dfn>@ element.+--+-- Example:+--+-- > dfn $ span $ toHtml "foo"+--+-- Result:+--+-- > <dfn><span>foo</span></dfn>+--+dfn :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+dfn = Parent "dfn" "<dfn" "</dfn>"+{-# INLINE dfn #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<div>@ element.+--+-- Example:+--+-- > div $ span $ toHtml "foo"+--+-- Result:+--+-- > <div><span>foo</span></div>+--+div :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+div = Parent "div" "<div" "</div>"+{-# INLINE div #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<dl>@ element.+--+-- Example:+--+-- > dl $ span $ toHtml "foo"+--+-- Result:+--+-- > <dl><span>foo</span></dl>+--+dl :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+dl = Parent "dl" "<dl" "</dl>"+{-# INLINE dl #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<dt>@ element.+--+-- Example:+--+-- > dt $ span $ toHtml "foo"+--+-- Result:+--+-- > <dt><span>foo</span></dt>+--+dt :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+dt = Parent "dt" "<dt" "</dt>"+{-# INLINE dt #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<em>@ element.+--+-- Example:+--+-- > em $ span $ toHtml "foo"+--+-- Result:+--+-- > <em><span>foo</span></em>+--+em :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+em = Parent "em" "<em" "</em>"+{-# INLINE em #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<embed />@ element.+--+-- Example:+--+-- > embed+--+-- Result:+--+-- > <embed />+--+embed :: Html ev -- ^ Resulting HTML.+embed = Leaf "embed" "<embed" ">"+{-# INLINE embed #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<fieldset>@ element.+--+-- Example:+--+-- > fieldset $ span $ toHtml "foo"+--+-- Result:+--+-- > <fieldset><span>foo</span></fieldset>+--+fieldset :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+fieldset = Parent "fieldset" "<fieldset" "</fieldset>"+{-# INLINE fieldset #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<figcaption>@ element.+--+-- Example:+--+-- > figcaption $ span $ toHtml "foo"+--+-- Result:+--+-- > <figcaption><span>foo</span></figcaption>+--+figcaption :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+figcaption = Parent "figcaption" "<figcaption" "</figcaption>"+{-# INLINE figcaption #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<figure>@ element.+--+-- Example:+--+-- > figure $ span $ toHtml "foo"+--+-- Result:+--+-- > <figure><span>foo</span></figure>+--+figure :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+figure = Parent "figure" "<figure" "</figure>"+{-# INLINE figure #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<footer>@ element.+--+-- Example:+--+-- > footer $ span $ toHtml "foo"+--+-- Result:+--+-- > <footer><span>foo</span></footer>+--+footer :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+footer = Parent "footer" "<footer" "</footer>"+{-# INLINE footer #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<form>@ element.+--+-- Example:+--+-- > form $ span $ toHtml "foo"+--+-- Result:+--+-- > <form><span>foo</span></form>+--+form :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+form = Parent "form" "<form" "</form>"+{-# INLINE form #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<h1>@ element.+--+-- Example:+--+-- > h1 $ span $ toHtml "foo"+--+-- Result:+--+-- > <h1><span>foo</span></h1>+--+h1 :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+h1 = Parent "h1" "<h1" "</h1>"+{-# INLINE h1 #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<h2>@ element.+--+-- Example:+--+-- > h2 $ span $ toHtml "foo"+--+-- Result:+--+-- > <h2><span>foo</span></h2>+--+h2 :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+h2 = Parent "h2" "<h2" "</h2>"+{-# INLINE h2 #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<h3>@ element.+--+-- Example:+--+-- > h3 $ span $ toHtml "foo"+--+-- Result:+--+-- > <h3><span>foo</span></h3>+--+h3 :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+h3 = Parent "h3" "<h3" "</h3>"+{-# INLINE h3 #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<h4>@ element.+--+-- Example:+--+-- > h4 $ span $ toHtml "foo"+--+-- Result:+--+-- > <h4><span>foo</span></h4>+--+h4 :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+h4 = Parent "h4" "<h4" "</h4>"+{-# INLINE h4 #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<h5>@ element.+--+-- Example:+--+-- > h5 $ span $ toHtml "foo"+--+-- Result:+--+-- > <h5><span>foo</span></h5>+--+h5 :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+h5 = Parent "h5" "<h5" "</h5>"+{-# INLINE h5 #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<h6>@ element.+--+-- Example:+--+-- > h6 $ span $ toHtml "foo"+--+-- Result:+--+-- > <h6><span>foo</span></h6>+--+h6 :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+h6 = Parent "h6" "<h6" "</h6>"+{-# INLINE h6 #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<head>@ element.+--+-- Example:+--+-- > head $ span $ toHtml "foo"+--+-- Result:+--+-- > <head><span>foo</span></head>+--+head :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+head = Parent "head" "<head" "</head>"+{-# INLINE head #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<header>@ element.+--+-- Example:+--+-- > header $ span $ toHtml "foo"+--+-- Result:+--+-- > <header><span>foo</span></header>+--+header :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+header = Parent "header" "<header" "</header>"+{-# INLINE header #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<hgroup>@ element.+--+-- Example:+--+-- > hgroup $ span $ toHtml "foo"+--+-- Result:+--+-- > <hgroup><span>foo</span></hgroup>+--+hgroup :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+hgroup = Parent "hgroup" "<hgroup" "</hgroup>"+{-# INLINE hgroup #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<hr />@ element.+--+-- Example:+--+-- > hr+--+-- Result:+--+-- > <hr />+--+hr :: Html ev -- ^ Resulting HTML.+hr = Leaf "hr" "<hr" ">"+{-# INLINE hr #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<html>@ element.+--+-- Example:+--+-- > html $ span $ toHtml "foo"+--+-- Result:+--+-- > <html><span>foo</span></html>+--+html :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+html = Parent "html" "<html" "</html>"+{-# INLINE html #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<i>@ element.+--+-- Example:+--+-- > i $ span $ toHtml "foo"+--+-- Result:+--+-- > <i><span>foo</span></i>+--+i :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+i = Parent "i" "<i" "</i>"+{-# INLINE i #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<iframe>@ element.+--+-- Example:+--+-- > iframe $ span $ toHtml "foo"+--+-- Result:+--+-- > <iframe><span>foo</span></iframe>+--+iframe :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+iframe = Parent "iframe" "<iframe" "</iframe>"+{-# INLINE iframe #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<img />@ element.+--+-- Example:+--+-- > img+--+-- Result:+--+-- > <img />+--+img :: Html ev -- ^ Resulting HTML.+img = Leaf "img" "<img" ">"+{-# INLINE img #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<input />@ element.+--+-- Example:+--+-- > input+--+-- Result:+--+-- > <input />+--+input :: Html ev -- ^ Resulting HTML.+input = Leaf "input" "<input" ">"+{-# INLINE input #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<ins>@ element.+--+-- Example:+--+-- > ins $ span $ toHtml "foo"+--+-- Result:+--+-- > <ins><span>foo</span></ins>+--+ins :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+ins = Parent "ins" "<ins" "</ins>"+{-# INLINE ins #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<kbd>@ element.+--+-- Example:+--+-- > kbd $ span $ toHtml "foo"+--+-- Result:+--+-- > <kbd><span>foo</span></kbd>+--+kbd :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+kbd = Parent "kbd" "<kbd" "</kbd>"+{-# INLINE kbd #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<keygen />@ element.+--+-- Example:+--+-- > keygen+--+-- Result:+--+-- > <keygen />+--+keygen :: Html ev -- ^ Resulting HTML.+keygen = Leaf "keygen" "<keygen" ">"+{-# INLINE keygen #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<label>@ element.+--+-- Example:+--+-- > label $ span $ toHtml "foo"+--+-- Result:+--+-- > <label><span>foo</span></label>+--+label :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+label = Parent "label" "<label" "</label>"+{-# INLINE label #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<legend>@ element.+--+-- Example:+--+-- > legend $ span $ toHtml "foo"+--+-- Result:+--+-- > <legend><span>foo</span></legend>+--+legend :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+legend = Parent "legend" "<legend" "</legend>"+{-# INLINE legend #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<li>@ element.+--+-- Example:+--+-- > li $ span $ toHtml "foo"+--+-- Result:+--+-- > <li><span>foo</span></li>+--+li :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+li = Parent "li" "<li" "</li>"+{-# INLINE li #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<link />@ element.+--+-- Example:+--+-- > link+--+-- Result:+--+-- > <link />+--+link :: Html ev -- ^ Resulting HTML.+link = Leaf "link" "<link" ">"+{-# INLINE link #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<map>@ element.+--+-- Example:+--+-- > map $ span $ toHtml "foo"+--+-- Result:+--+-- > <map><span>foo</span></map>+--+map :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+map = Parent "map" "<map" "</map>"+{-# INLINE map #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<mark>@ element.+--+-- Example:+--+-- > mark $ span $ toHtml "foo"+--+-- Result:+--+-- > <mark><span>foo</span></mark>+--+mark :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+mark = Parent "mark" "<mark" "</mark>"+{-# INLINE mark #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<menu>@ element.+--+-- Example:+--+-- > menu $ span $ toHtml "foo"+--+-- Result:+--+-- > <menu><span>foo</span></menu>+--+menu :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+menu = Parent "menu" "<menu" "</menu>"+{-# INLINE menu #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<menuitem />@ element.+--+-- Example:+--+-- > menuitem+--+-- Result:+--+-- > <menuitem />+--+menuitem :: Html ev -- ^ Resulting HTML.+menuitem = Leaf "menuitem" "<menuitem" ">"+{-# INLINE menuitem #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<meta />@ element.+--+-- Example:+--+-- > meta+--+-- Result:+--+-- > <meta />+--+meta :: Html ev -- ^ Resulting HTML.+meta = Leaf "meta" "<meta" ">"+{-# INLINE meta #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<meter>@ element.+--+-- Example:+--+-- > meter $ span $ toHtml "foo"+--+-- Result:+--+-- > <meter><span>foo</span></meter>+--+meter :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+meter = Parent "meter" "<meter" "</meter>"+{-# INLINE meter #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<nav>@ element.+--+-- Example:+--+-- > nav $ span $ toHtml "foo"+--+-- Result:+--+-- > <nav><span>foo</span></nav>+--+nav :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+nav = Parent "nav" "<nav" "</nav>"+{-# INLINE nav #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<noscript>@ element.+--+-- Example:+--+-- > noscript $ span $ toHtml "foo"+--+-- Result:+--+-- > <noscript><span>foo</span></noscript>+--+noscript :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+noscript = Parent "noscript" "<noscript" "</noscript>"+{-# INLINE noscript #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<object>@ element.+--+-- Example:+--+-- > object $ span $ toHtml "foo"+--+-- Result:+--+-- > <object><span>foo</span></object>+--+object :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+object = Parent "object" "<object" "</object>"+{-# INLINE object #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<ol>@ element.+--+-- Example:+--+-- > ol $ span $ toHtml "foo"+--+-- Result:+--+-- > <ol><span>foo</span></ol>+--+ol :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+ol = Parent "ol" "<ol" "</ol>"+{-# INLINE ol #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<optgroup>@ element.+--+-- Example:+--+-- > optgroup $ span $ toHtml "foo"+--+-- Result:+--+-- > <optgroup><span>foo</span></optgroup>+--+optgroup :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+optgroup = Parent "optgroup" "<optgroup" "</optgroup>"+{-# INLINE optgroup #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<option>@ element.+--+-- Example:+--+-- > option $ span $ toHtml "foo"+--+-- Result:+--+-- > <option><span>foo</span></option>+--+option :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+option = Parent "option" "<option" "</option>"+{-# INLINE option #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<output>@ element.+--+-- Example:+--+-- > output $ span $ toHtml "foo"+--+-- Result:+--+-- > <output><span>foo</span></output>+--+output :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+output = Parent "output" "<output" "</output>"+{-# INLINE output #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<p>@ element.+--+-- Example:+--+-- > p $ span $ toHtml "foo"+--+-- Result:+--+-- > <p><span>foo</span></p>+--+p :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+p = Parent "p" "<p" "</p>"+{-# INLINE p #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<param />@ element.+--+-- Example:+--+-- > param+--+-- Result:+--+-- > <param />+--+param :: Html ev -- ^ Resulting HTML.+param = Leaf "param" "<param" ">"+{-# INLINE param #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<pre>@ element.+--+-- Example:+--+-- > pre $ span $ toHtml "foo"+--+-- Result:+--+-- > <pre><span>foo</span></pre>+--+pre :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+pre = Parent "pre" "<pre" "</pre>"+{-# INLINE pre #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<progress>@ element.+--+-- Example:+--+-- > progress $ span $ toHtml "foo"+--+-- Result:+--+-- > <progress><span>foo</span></progress>+--+progress :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+progress = Parent "progress" "<progress" "</progress>"+{-# INLINE progress #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<q>@ element.+--+-- Example:+--+-- > q $ span $ toHtml "foo"+--+-- Result:+--+-- > <q><span>foo</span></q>+--+q :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+q = Parent "q" "<q" "</q>"+{-# INLINE q #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<rp>@ element.+--+-- Example:+--+-- > rp $ span $ toHtml "foo"+--+-- Result:+--+-- > <rp><span>foo</span></rp>+--+rp :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+rp = Parent "rp" "<rp" "</rp>"+{-# INLINE rp #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<rt>@ element.+--+-- Example:+--+-- > rt $ span $ toHtml "foo"+--+-- Result:+--+-- > <rt><span>foo</span></rt>+--+rt :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+rt = Parent "rt" "<rt" "</rt>"+{-# INLINE rt #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<ruby>@ element.+--+-- Example:+--+-- > ruby $ span $ toHtml "foo"+--+-- Result:+--+-- > <ruby><span>foo</span></ruby>+--+ruby :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+ruby = Parent "ruby" "<ruby" "</ruby>"+{-# INLINE ruby #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<samp>@ element.+--+-- Example:+--+-- > samp $ span $ toHtml "foo"+--+-- Result:+--+-- > <samp><span>foo</span></samp>+--+samp :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+samp = Parent "samp" "<samp" "</samp>"+{-# INLINE samp #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<script>@ element.+--+-- Example:+--+-- > script $ span $ toHtml "foo"+--+-- Result:+--+-- > <script><span>foo</span></script>+--+script :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+script = Parent "script" "<script" "</script>" . external+{-# INLINE script #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<section>@ element.+--+-- Example:+--+-- > section $ span $ toHtml "foo"+--+-- Result:+--+-- > <section><span>foo</span></section>+--+section :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+section = Parent "section" "<section" "</section>"+{-# INLINE section #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<select>@ element.+--+-- Example:+--+-- > select $ span $ toHtml "foo"+--+-- Result:+--+-- > <select><span>foo</span></select>+--+select :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+select = Parent "select" "<select" "</select>"+{-# INLINE select #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<small>@ element.+--+-- Example:+--+-- > small $ span $ toHtml "foo"+--+-- Result:+--+-- > <small><span>foo</span></small>+--+small :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+small = Parent "small" "<small" "</small>"+{-# INLINE small #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<source />@ element.+--+-- Example:+--+-- > source+--+-- Result:+--+-- > <source />+--+source :: Html ev -- ^ Resulting HTML.+source = Leaf "source" "<source" ">"+{-# INLINE source #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<span>@ element.+--+-- Example:+--+-- > span $ span $ toHtml "foo"+--+-- Result:+--+-- > <span><span>foo</span></span>+--+span :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+span = Parent "span" "<span" "</span>"+{-# INLINE span #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<strong>@ element.+--+-- Example:+--+-- > strong $ span $ toHtml "foo"+--+-- Result:+--+-- > <strong><span>foo</span></strong>+--+strong :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+strong = Parent "strong" "<strong" "</strong>"+{-# INLINE strong #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<style>@ element.+--+-- Example:+--+-- > style $ span $ toHtml "foo"+--+-- Result:+--+-- > <style><span>foo</span></style>+--+style :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+style = Parent "style" "<style" "</style>" . external+{-# INLINE style #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<sub>@ element.+--+-- Example:+--+-- > sub $ span $ toHtml "foo"+--+-- Result:+--+-- > <sub><span>foo</span></sub>+--+sub :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+sub = Parent "sub" "<sub" "</sub>"+{-# INLINE sub #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<summary>@ element.+--+-- Example:+--+-- > summary $ span $ toHtml "foo"+--+-- Result:+--+-- > <summary><span>foo</span></summary>+--+summary :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+summary = Parent "summary" "<summary" "</summary>"+{-# INLINE summary #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<sup>@ element.+--+-- Example:+--+-- > sup $ span $ toHtml "foo"+--+-- Result:+--+-- > <sup><span>foo</span></sup>+--+sup :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+sup = Parent "sup" "<sup" "</sup>"+{-# INLINE sup #-}++-- | Combinator for the @\<svg>@ element.+--+-- Example:+--+-- > svg ! width "100" ! height "100" $+-- > circle ! cx "50" ! cy "50" ! r "40"+--+-- Result:+--+-- > <svg width="100" height="100"><circle cx="50" cy="50" r="40"/></svg>+--+svg :: Svg ev -> Html ev+svg = Parent "svg" "<svg" "</svg>"+{-# INLINE svg #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<table>@ element.+--+-- Example:+--+-- > table $ span $ toHtml "foo"+--+-- Result:+--+-- > <table><span>foo</span></table>+--+table :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+table = Parent "table" "<table" "</table>"+{-# INLINE table #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<tbody>@ element.+--+-- Example:+--+-- > tbody $ span $ toHtml "foo"+--+-- Result:+--+-- > <tbody><span>foo</span></tbody>+--+tbody :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+tbody = Parent "tbody" "<tbody" "</tbody>"+{-# INLINE tbody #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<td>@ element.+--+-- Example:+--+-- > td $ span $ toHtml "foo"+--+-- Result:+--+-- > <td><span>foo</span></td>+--+td :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+td = Parent "td" "<td" "</td>"+{-# INLINE td #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<textarea>@ element.+--+-- Example:+--+-- > textarea $ span $ toHtml "foo"+--+-- Result:+--+-- > <textarea><span>foo</span></textarea>+--+textarea :: Html ev -> Html ev -- ^ Resulting HTML.+textarea = Parent "textarea" "<textarea" "</textarea>"+{-# INLINE textarea #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<tfoot>@ element.+--+-- Example:+--+-- > tfoot $ span $ toHtml "foo"+--+-- Result:+--+-- > <tfoot><span>foo</span></tfoot>+--+tfoot :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+tfoot = Parent "tfoot" "<tfoot" "</tfoot>"+{-# INLINE tfoot #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<th>@ element.+--+-- Example:+--+-- > th $ span $ toHtml "foo"+--+-- Result:+--+-- > <th><span>foo</span></th>+--+th :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+th = Parent "th" "<th" "</th>"+{-# INLINE th #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<thead>@ element.+--+-- Example:+--+-- > thead $ span $ toHtml "foo"+--+-- Result:+--+-- > <thead><span>foo</span></thead>+--+thead :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+thead = Parent "thead" "<thead" "</thead>"+{-# INLINE thead #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<time>@ element.+--+-- Example:+--+-- > time $ span $ toHtml "foo"+--+-- Result:+--+-- > <time><span>foo</span></time>+--+time :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+time = Parent "time" "<time" "</time>"+{-# INLINE time #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<title>@ element.+--+-- Example:+--+-- > title $ span $ toHtml "foo"+--+-- Result:+--+-- > <title><span>foo</span></title>+--+title :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+title = Parent "title" "<title" "</title>"+{-# INLINE title #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<tr>@ element.+--+-- Example:+--+-- > tr $ span $ toHtml "foo"+--+-- Result:+--+-- > <tr><span>foo</span></tr>+--+tr :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+tr = Parent "tr" "<tr" "</tr>"+{-# INLINE tr #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<track />@ element.+--+-- Example:+--+-- > track+--+-- Result:+--+-- > <track />+--+track :: Html ev -- ^ Resulting HTML.+track = Leaf "track" "<track" ">"+{-# INLINE track #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<ul>@ element.+--+-- Example:+--+-- > ul $ span $ toHtml "foo"+--+-- Result:+--+-- > <ul><span>foo</span></ul>+--+ul :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+ul = Parent "ul" "<ul" "</ul>"+{-# INLINE ul #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<var>@ element.+--+-- Example:+--+-- > var $ span $ toHtml "foo"+--+-- Result:+--+-- > <var><span>foo</span></var>+--+var :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+var = Parent "var" "<var" "</var>"+{-# INLINE var #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:199+--+-- | Combinator for the @\<video>@ element.+--+-- Example:+--+-- > video $ span $ toHtml "foo"+--+-- Result:+--+-- > <video><span>foo</span></video>+--+video :: Html ev -- ^ Inner HTML.+ -> Html ev -- ^ Resulting HTML.+video = Parent "video" "<video" "</video>"+{-# INLINE video #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:226+--+-- | Combinator for the @\<wbr />@ element.+--+-- Example:+--+-- > wbr+--+-- Result:+--+-- > <wbr />+--+wbr :: Html ev -- ^ Resulting HTML.+wbr = Leaf "wbr" "<wbr" ">"+{-# INLINE wbr #-}
+ src/Text/Blaze/Front/Html5/Attributes.hs view
@@ -0,0 +1,1870 @@+-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:93+--+-- | This module exports combinators that provide you with the+-- ability to set attributes on HTML elements.+--+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoImplicitPrelude #-}+module Text.Blaze.Front.Html5.Attributes+ ( accept+ , accesskey+ , action+ , allowfullscreen+ , allowtransparency+ , alt+ , async+ , autocapitalize+ , autocomplete+ , autocorrect+ , autofocus+ , autoplay+ , cellpadding+ , cellspacing+ , charset+ , checked+ , class_+ , colspan+ , cols+ , content+ , contenteditable+ , contextmenu+ , controls+ , coords+ , crossorigin+ , data_+ , datetime+ , defer+ , dir+ , disabled+ , download+ , draggable+ , enctype+ , form+ , formnovalidate+ , frameborder+ , height+ , hidden+ , href+ , hreflang+ , for+ , httpequiv+ , icon+ , id+ , itemprop+ , itemscope+ , itemtype+ , key+ , label+ , lang+ , list+ , loop+ , max+ , maxlength+ , mediagroup+ , method+ , min+ , multiple+ , muted+ , name+ , novalidate+ , pattern+ , placeholder+ , poster+ , preload+ , property+ , radiogroup+ , readonly+ , rel+ , required+ , role+ , rowspan+ , rows+ , sandbox+ , scope+ , scrollleft+ , scrolltop+ , scrolling+ , seamless+ , selected+ , shape+ , size+ , span+ , spellcheck+ , src+ , srcdoc+ , srcset+ , start+ , step+ , style+ , tabindex+ , target+ , title+ , type_+ , usemap+ , value+ , width+ , wmode+ ) where++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:99+--++import Text.Blaze.Front.Internal+ ( Attribute, AttributeValue, attribute )++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @accept@ attribute.+--+-- Example:+--+-- > div ! accept "bar" $ "Hello."+--+-- Result:+--+-- > <div accept="bar">Hello.</div>+--+accept :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+accept = attribute "accept" " accept=\""+{-# INLINE accept #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @accessKey@ attribute.+--+-- Example:+--+-- > div ! accesskey "bar" $ "Hello."+--+-- Result:+--+-- > <div accessKey="bar">Hello.</div>+--+accesskey :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+accesskey = attribute "accessKey" " accessKey=\""+{-# INLINE accesskey #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @action@ attribute.+--+-- Example:+--+-- > div ! action "bar" $ "Hello."+--+-- Result:+--+-- > <div action="bar">Hello.</div>+--+action :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+action = attribute "action" " action=\""+{-# INLINE action #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @allowFullScreen@ attribute.+--+-- Example:+--+-- > div ! allowfullscreen "bar" $ "Hello."+--+-- Result:+--+-- > <div allowFullScreen="bar">Hello.</div>+--+allowfullscreen :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+allowfullscreen = attribute "allowFullScreen" " allowFullScreen=\""+{-# INLINE allowfullscreen #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @allowTransparency@ attribute.+--+-- Example:+--+-- > div ! allowtransparency "bar" $ "Hello."+--+-- Result:+--+-- > <div allowTransparency="bar">Hello.</div>+--+allowtransparency :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+allowtransparency = attribute "allowTransparency" " allowTransparency=\""+{-# INLINE allowtransparency #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @alt@ attribute.+--+-- Example:+--+-- > div ! alt "bar" $ "Hello."+--+-- Result:+--+-- > <div alt="bar">Hello.</div>+--+alt :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+alt = attribute "alt" " alt=\""+{-# INLINE alt #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @async@ attribute.+--+-- Example:+--+-- > div ! async "bar" $ "Hello."+--+-- Result:+--+-- > <div async="bar">Hello.</div>+--+async :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+async = attribute "async" " async=\""+{-# INLINE async #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @autoCapitalize@ attribute.+--+-- Example:+--+-- > div ! autocapitalize "bar" $ "Hello."+--+-- Result:+--+-- > <div autoCapitalize="bar">Hello.</div>+--+autocapitalize :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+autocapitalize = attribute "autoCapitalize" " autoCapitalize=\""+{-# INLINE autocapitalize #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @autoComplete@ attribute.+--+-- Example:+--+-- > div ! autocomplete "bar" $ "Hello."+--+-- Result:+--+-- > <div autoComplete="bar">Hello.</div>+--+autocomplete :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+autocomplete = attribute "autoComplete" " autoComplete=\""+{-# INLINE autocomplete #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @autoCorrect@ attribute.+--+-- Example:+--+-- > div ! autocorrect "bar" $ "Hello."+--+-- Result:+--+-- > <div autoCorrect="bar">Hello.</div>+--+autocorrect :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+autocorrect = attribute "autoCorrect" " autoCorrect=\""+{-# INLINE autocorrect #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @autoFocus@ attribute.+--+-- Example:+--+-- > div ! autofocus "bar" $ "Hello."+--+-- Result:+--+-- > <div autoFocus="bar">Hello.</div>+--+autofocus :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+autofocus = attribute "autoFocus" " autoFocus=\""+{-# INLINE autofocus #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @autoPlay@ attribute.+--+-- Example:+--+-- > div ! autoplay "bar" $ "Hello."+--+-- Result:+--+-- > <div autoPlay="bar">Hello.</div>+--+autoplay :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+autoplay = attribute "autoPlay" " autoPlay=\""+{-# INLINE autoplay #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @cellPadding@ attribute.+--+-- Example:+--+-- > div ! cellpadding "bar" $ "Hello."+--+-- Result:+--+-- > <div cellPadding="bar">Hello.</div>+--+cellpadding :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+cellpadding = attribute "cellPadding" " cellPadding=\""+{-# INLINE cellpadding #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @cellSpacing@ attribute.+--+-- Example:+--+-- > div ! cellspacing "bar" $ "Hello."+--+-- Result:+--+-- > <div cellSpacing="bar">Hello.</div>+--+cellspacing :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+cellspacing = attribute "cellSpacing" " cellSpacing=\""+{-# INLINE cellspacing #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @charSet@ attribute.+--+-- Example:+--+-- > div ! charset "bar" $ "Hello."+--+-- Result:+--+-- > <div charSet="bar">Hello.</div>+--+charset :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+charset = attribute "charSet" " charSet=\""+{-# INLINE charset #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @checked@ attribute.+--+-- Example:+--+-- > div ! checked "bar" $ "Hello."+--+-- Result:+--+-- > <div checked="bar">Hello.</div>+--+checked :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+checked = attribute "checked" " checked=\""+{-# INLINE checked #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @className@ attribute.+--+-- Example:+--+-- > div ! class_ "bar" $ "Hello."+--+-- Result:+--+-- > <div className="bar">Hello.</div>+--+class_ :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+class_ = attribute "class" " class=\""+{-# INLINE class_ #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @colSpan@ attribute.+--+-- Example:+--+-- > div ! colspan "bar" $ "Hello."+--+-- Result:+--+-- > <div colSpan="bar">Hello.</div>+--+colspan :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+colspan = attribute "colSpan" " colSpan=\""+{-# INLINE colspan #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @cols@ attribute.+--+-- Example:+--+-- > div ! cols "bar" $ "Hello."+--+-- Result:+--+-- > <div cols="bar">Hello.</div>+--+cols :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+cols = attribute "cols" " cols=\""+{-# INLINE cols #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @content@ attribute.+--+-- Example:+--+-- > div ! content "bar" $ "Hello."+--+-- Result:+--+-- > <div content="bar">Hello.</div>+--+content :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+content = attribute "content" " content=\""+{-# INLINE content #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @contentEditable@ attribute.+--+-- Example:+--+-- > div ! contenteditable "bar" $ "Hello."+--+-- Result:+--+-- > <div contentEditable="bar">Hello.</div>+--+contenteditable :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+contenteditable = attribute "contentEditable" " contentEditable=\""+{-# INLINE contenteditable #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @contextMenu@ attribute.+--+-- Example:+--+-- > div ! contextmenu "bar" $ "Hello."+--+-- Result:+--+-- > <div contextMenu="bar">Hello.</div>+--+contextmenu :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+contextmenu = attribute "contextMenu" " contextMenu=\""+{-# INLINE contextmenu #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @controls@ attribute.+--+-- Example:+--+-- > div ! controls "bar" $ "Hello."+--+-- Result:+--+-- > <div controls="bar">Hello.</div>+--+controls :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+controls = attribute "controls" " controls=\""+{-# INLINE controls #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @coords@ attribute.+--+-- Example:+--+-- > div ! coords "bar" $ "Hello."+--+-- Result:+--+-- > <div coords="bar">Hello.</div>+--+coords :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+coords = attribute "coords" " coords=\""+{-# INLINE coords #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @crossOrigin@ attribute.+--+-- Example:+--+-- > div ! crossorigin "bar" $ "Hello."+--+-- Result:+--+-- > <div crossOrigin="bar">Hello.</div>+--+crossorigin :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+crossorigin = attribute "crossOrigin" " crossOrigin=\""+{-# INLINE crossorigin #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @data@ attribute.+--+-- Example:+--+-- > div ! data_ "bar" $ "Hello."+--+-- Result:+--+-- > <div data="bar">Hello.</div>+--+data_ :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+data_ = attribute "data" " data=\""+{-# INLINE data_ #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @dateTime@ attribute.+--+-- Example:+--+-- > div ! datetime "bar" $ "Hello."+--+-- Result:+--+-- > <div dateTime="bar">Hello.</div>+--+datetime :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+datetime = attribute "dateTime" " dateTime=\""+{-# INLINE datetime #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @defer@ attribute.+--+-- Example:+--+-- > div ! defer "bar" $ "Hello."+--+-- Result:+--+-- > <div defer="bar">Hello.</div>+--+defer :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+defer = attribute "defer" " defer=\""+{-# INLINE defer #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @dir@ attribute.+--+-- Example:+--+-- > div ! dir "bar" $ "Hello."+--+-- Result:+--+-- > <div dir="bar">Hello.</div>+--+dir :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+dir = attribute "dir" " dir=\""+{-# INLINE dir #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @disabled@ attribute.+--+-- Example:+--+-- > div ! disabled "bar" $ "Hello."+--+-- Result:+--+-- > <div disabled="bar">Hello.</div>+--+disabled :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+disabled = attribute "disabled" " disabled=\""+{-# INLINE disabled #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @download@ attribute.+--+-- Example:+--+-- > div ! download "bar" $ "Hello."+--+-- Result:+--+-- > <div download="bar">Hello.</div>+--+download :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+download = attribute "download" " download=\""+{-# INLINE download #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @draggable@ attribute.+--+-- Example:+--+-- > div ! draggable "bar" $ "Hello."+--+-- Result:+--+-- > <div draggable="bar">Hello.</div>+--+draggable :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+draggable = attribute "draggable" " draggable=\""+{-# INLINE draggable #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @encType@ attribute.+--+-- Example:+--+-- > div ! enctype "bar" $ "Hello."+--+-- Result:+--+-- > <div encType="bar">Hello.</div>+--+enctype :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+enctype = attribute "encType" " encType=\""+{-# INLINE enctype #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @form@ attribute.+--+-- Example:+--+-- > div ! form "bar" $ "Hello."+--+-- Result:+--+-- > <div form="bar">Hello.</div>+--+form :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+form = attribute "form" " form=\""+{-# INLINE form #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @formNoValidate@ attribute.+--+-- Example:+--+-- > div ! formnovalidate "bar" $ "Hello."+--+-- Result:+--+-- > <div formNoValidate="bar">Hello.</div>+--+formnovalidate :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+formnovalidate = attribute "formNoValidate" " formNoValidate=\""+{-# INLINE formnovalidate #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @frameBorder@ attribute.+--+-- Example:+--+-- > div ! frameborder "bar" $ "Hello."+--+-- Result:+--+-- > <div frameBorder="bar">Hello.</div>+--+frameborder :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+frameborder = attribute "frameBorder" " frameBorder=\""+{-# INLINE frameborder #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @height@ attribute.+--+-- Example:+--+-- > div ! height "bar" $ "Hello."+--+-- Result:+--+-- > <div height="bar">Hello.</div>+--+height :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+height = attribute "height" " height=\""+{-# INLINE height #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @hidden@ attribute.+--+-- Example:+--+-- > div ! hidden "bar" $ "Hello."+--+-- Result:+--+-- > <div hidden="bar">Hello.</div>+--+hidden :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+hidden = attribute "hidden" " hidden=\""+{-# INLINE hidden #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @href@ attribute.+--+-- Example:+--+-- > div ! href "bar" $ "Hello."+--+-- Result:+--+-- > <div href="bar">Hello.</div>+--+href :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+href = attribute "href" " href=\""+{-# INLINE href #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @hrefLang@ attribute.+--+-- Example:+--+-- > div ! hreflang "bar" $ "Hello."+--+-- Result:+--+-- > <div hrefLang="bar">Hello.</div>+--+hreflang :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+hreflang = attribute "hrefLang" " hrefLang=\""+{-# INLINE hreflang #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @htmlFor@ attribute.+--+-- Example:+--+-- > div ! for "bar" $ "Hello."+--+-- Result:+--+-- > <div htmlFor="bar">Hello.</div>+--+for :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+for = attribute "htmlFor" " htmlFor=\""+{-# INLINE for #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @httpEquiv@ attribute.+--+-- Example:+--+-- > div ! httpequiv "bar" $ "Hello."+--+-- Result:+--+-- > <div httpEquiv="bar">Hello.</div>+--+httpequiv :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+httpequiv = attribute "httpEquiv" " httpEquiv=\""+{-# INLINE httpequiv #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @icon@ attribute.+--+-- Example:+--+-- > div ! icon "bar" $ "Hello."+--+-- Result:+--+-- > <div icon="bar">Hello.</div>+--+icon :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+icon = attribute "icon" " icon=\""+{-# INLINE icon #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @id@ attribute.+--+-- Example:+--+-- > div ! id "bar" $ "Hello."+--+-- Result:+--+-- > <div id="bar">Hello.</div>+--+id :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+id = attribute "id" " id=\""+{-# INLINE id #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @itemProp@ attribute.+--+-- Example:+--+-- > div ! itemprop "bar" $ "Hello."+--+-- Result:+--+-- > <div itemProp="bar">Hello.</div>+--+itemprop :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+itemprop = attribute "itemProp" " itemProp=\""+{-# INLINE itemprop #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @itemScope@ attribute.+--+-- Example:+--+-- > div ! itemscope "bar" $ "Hello."+--+-- Result:+--+-- > <div itemScope="bar">Hello.</div>+--+itemscope :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+itemscope = attribute "itemScope" " itemScope=\""+{-# INLINE itemscope #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @itemType@ attribute.+--+-- Example:+--+-- > div ! itemtype "bar" $ "Hello."+--+-- Result:+--+-- > <div itemType="bar">Hello.</div>+--+itemtype :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+itemtype = attribute "itemType" " itemType=\""+{-# INLINE itemtype #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @key@ attribute.+--+-- Example:+--+-- > div ! key "bar" $ "Hello."+--+-- Result:+--+-- > <div key="bar">Hello.</div>+--+key :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+key = attribute "key" " key=\""+{-# INLINE key #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @label@ attribute.+--+-- Example:+--+-- > div ! label "bar" $ "Hello."+--+-- Result:+--+-- > <div label="bar">Hello.</div>+--+label :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+label = attribute "label" " label=\""+{-# INLINE label #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @lang@ attribute.+--+-- Example:+--+-- > div ! lang "bar" $ "Hello."+--+-- Result:+--+-- > <div lang="bar">Hello.</div>+--+lang :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+lang = attribute "lang" " lang=\""+{-# INLINE lang #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @list@ attribute.+--+-- Example:+--+-- > div ! list "bar" $ "Hello."+--+-- Result:+--+-- > <div list="bar">Hello.</div>+--+list :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+list = attribute "list" " list=\""+{-# INLINE list #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @loop@ attribute.+--+-- Example:+--+-- > div ! loop "bar" $ "Hello."+--+-- Result:+--+-- > <div loop="bar">Hello.</div>+--+loop :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+loop = attribute "loop" " loop=\""+{-# INLINE loop #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @max@ attribute.+--+-- Example:+--+-- > div ! max "bar" $ "Hello."+--+-- Result:+--+-- > <div max="bar">Hello.</div>+--+max :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+max = attribute "max" " max=\""+{-# INLINE max #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @maxLength@ attribute.+--+-- Example:+--+-- > div ! maxlength "bar" $ "Hello."+--+-- Result:+--+-- > <div maxLength="bar">Hello.</div>+--+maxlength :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+maxlength = attribute "maxLength" " maxLength=\""+{-# INLINE maxlength #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @mediaGroup@ attribute.+--+-- Example:+--+-- > div ! mediagroup "bar" $ "Hello."+--+-- Result:+--+-- > <div mediaGroup="bar">Hello.</div>+--+mediagroup :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+mediagroup = attribute "mediaGroup" " mediaGroup=\""+{-# INLINE mediagroup #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @method@ attribute.+--+-- Example:+--+-- > div ! method "bar" $ "Hello."+--+-- Result:+--+-- > <div method="bar">Hello.</div>+--+method :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+method = attribute "method" " method=\""+{-# INLINE method #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @min@ attribute.+--+-- Example:+--+-- > div ! min "bar" $ "Hello."+--+-- Result:+--+-- > <div min="bar">Hello.</div>+--+min :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+min = attribute "min" " min=\""+{-# INLINE min #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @multiple@ attribute.+--+-- Example:+--+-- > div ! multiple "bar" $ "Hello."+--+-- Result:+--+-- > <div multiple="bar">Hello.</div>+--+multiple :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+multiple = attribute "multiple" " multiple=\""+{-# INLINE multiple #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @muted@ attribute.+--+-- Example:+--+-- > div ! muted "bar" $ "Hello."+--+-- Result:+--+-- > <div muted="bar">Hello.</div>+--+muted :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+muted = attribute "muted" " muted=\""+{-# INLINE muted #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @name@ attribute.+--+-- Example:+--+-- > div ! name "bar" $ "Hello."+--+-- Result:+--+-- > <div name="bar">Hello.</div>+--+name :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+name = attribute "name" " name=\""+{-# INLINE name #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @noValidate@ attribute.+--+-- Example:+--+-- > div ! novalidate "bar" $ "Hello."+--+-- Result:+--+-- > <div noValidate="bar">Hello.</div>+--+novalidate :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+novalidate = attribute "noValidate" " noValidate=\""+{-# INLINE novalidate #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @pattern@ attribute.+--+-- Example:+--+-- > div ! pattern "bar" $ "Hello."+--+-- Result:+--+-- > <div pattern="bar">Hello.</div>+--+pattern :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+pattern = attribute "pattern" " pattern=\""+{-# INLINE pattern #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @placeholder@ attribute.+--+-- Example:+--+-- > div ! placeholder "bar" $ "Hello."+--+-- Result:+--+-- > <div placeholder="bar">Hello.</div>+--+placeholder :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+placeholder = attribute "placeholder" " placeholder=\""+{-# INLINE placeholder #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @poster@ attribute.+--+-- Example:+--+-- > div ! poster "bar" $ "Hello."+--+-- Result:+--+-- > <div poster="bar">Hello.</div>+--+poster :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+poster = attribute "poster" " poster=\""+{-# INLINE poster #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @preload@ attribute.+--+-- Example:+--+-- > div ! preload "bar" $ "Hello."+--+-- Result:+--+-- > <div preload="bar">Hello.</div>+--+preload :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+preload = attribute "preload" " preload=\""+{-# INLINE preload #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @property@ attribute.+--+-- Example:+--+-- > div ! property "bar" $ "Hello."+--+-- Result:+--+-- > <div property="bar">Hello.</div>+--+property :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+property = attribute "property" " property=\""+{-# INLINE property #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @radioGroup@ attribute.+--+-- Example:+--+-- > div ! radiogroup "bar" $ "Hello."+--+-- Result:+--+-- > <div radioGroup="bar">Hello.</div>+--+radiogroup :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+radiogroup = attribute "radioGroup" " radioGroup=\""+{-# INLINE radiogroup #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @readOnly@ attribute.+--+-- Example:+--+-- > div ! readonly "bar" $ "Hello."+--+-- Result:+--+-- > <div readOnly="bar">Hello.</div>+--+readonly :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+readonly = attribute "readOnly" " readOnly=\""+{-# INLINE readonly #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @rel@ attribute.+--+-- Example:+--+-- > div ! rel "bar" $ "Hello."+--+-- Result:+--+-- > <div rel="bar">Hello.</div>+--+rel :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+rel = attribute "rel" " rel=\""+{-# INLINE rel #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @required@ attribute.+--+-- Example:+--+-- > div ! required "bar" $ "Hello."+--+-- Result:+--+-- > <div required="bar">Hello.</div>+--+required :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+required = attribute "required" " required=\""+{-# INLINE required #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @role@ attribute.+--+-- Example:+--+-- > div ! role "bar" $ "Hello."+--+-- Result:+--+-- > <div role="bar">Hello.</div>+--+role :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+role = attribute "role" " role=\""+{-# INLINE role #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @rowSpan@ attribute.+--+-- Example:+--+-- > div ! rowspan "bar" $ "Hello."+--+-- Result:+--+-- > <div rowSpan="bar">Hello.</div>+--+rowspan :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+rowspan = attribute "rowSpan" " rowSpan=\""+{-# INLINE rowspan #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @rows@ attribute.+--+-- Example:+--+-- > div ! rows "bar" $ "Hello."+--+-- Result:+--+-- > <div rows="bar">Hello.</div>+--+rows :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+rows = attribute "rows" " rows=\""+{-# INLINE rows #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @sandbox@ attribute.+--+-- Example:+--+-- > div ! sandbox "bar" $ "Hello."+--+-- Result:+--+-- > <div sandbox="bar">Hello.</div>+--+sandbox :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+sandbox = attribute "sandbox" " sandbox=\""+{-# INLINE sandbox #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @scope@ attribute.+--+-- Example:+--+-- > div ! scope "bar" $ "Hello."+--+-- Result:+--+-- > <div scope="bar">Hello.</div>+--+scope :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+scope = attribute "scope" " scope=\""+{-# INLINE scope #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @scrollLeft@ attribute.+--+-- Example:+--+-- > div ! scrollleft "bar" $ "Hello."+--+-- Result:+--+-- > <div scrollLeft="bar">Hello.</div>+--+scrollleft :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+scrollleft = attribute "scrollLeft" " scrollLeft=\""+{-# INLINE scrollleft #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @scrollTop@ attribute.+--+-- Example:+--+-- > div ! scrolltop "bar" $ "Hello."+--+-- Result:+--+-- > <div scrollTop="bar">Hello.</div>+--+scrolltop :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+scrolltop = attribute "scrollTop" " scrollTop=\""+{-# INLINE scrolltop #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @scrolling@ attribute.+--+-- Example:+--+-- > div ! scrolling "bar" $ "Hello."+--+-- Result:+--+-- > <div scrolling="bar">Hello.</div>+--+scrolling :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+scrolling = attribute "scrolling" " scrolling=\""+{-# INLINE scrolling #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @seamless@ attribute.+--+-- Example:+--+-- > div ! seamless "bar" $ "Hello."+--+-- Result:+--+-- > <div seamless="bar">Hello.</div>+--+seamless :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+seamless = attribute "seamless" " seamless=\""+{-# INLINE seamless #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @selected@ attribute.+--+-- Example:+--+-- > div ! selected "bar" $ "Hello."+--+-- Result:+--+-- > <div selected="bar">Hello.</div>+--+selected :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+selected = attribute "selected" " selected=\""+{-# INLINE selected #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @shape@ attribute.+--+-- Example:+--+-- > div ! shape "bar" $ "Hello."+--+-- Result:+--+-- > <div shape="bar">Hello.</div>+--+shape :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+shape = attribute "shape" " shape=\""+{-# INLINE shape #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @size@ attribute.+--+-- Example:+--+-- > div ! size "bar" $ "Hello."+--+-- Result:+--+-- > <div size="bar">Hello.</div>+--+size :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+size = attribute "size" " size=\""+{-# INLINE size #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @span@ attribute.+--+-- Example:+--+-- > div ! span "bar" $ "Hello."+--+-- Result:+--+-- > <div span="bar">Hello.</div>+--+span :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+span = attribute "span" " span=\""+{-# INLINE span #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @spellCheck@ attribute.+--+-- Example:+--+-- > div ! spellcheck "bar" $ "Hello."+--+-- Result:+--+-- > <div spellCheck="bar">Hello.</div>+--+spellcheck :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+spellcheck = attribute "spellCheck" " spellCheck=\""+{-# INLINE spellcheck #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @src@ attribute.+--+-- Example:+--+-- > div ! src "bar" $ "Hello."+--+-- Result:+--+-- > <div src="bar">Hello.</div>+--+src :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+src = attribute "src" " src=\""+{-# INLINE src #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @srcDoc@ attribute.+--+-- Example:+--+-- > div ! srcdoc "bar" $ "Hello."+--+-- Result:+--+-- > <div srcDoc="bar">Hello.</div>+--+srcdoc :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+srcdoc = attribute "srcDoc" " srcDoc=\""+{-# INLINE srcdoc #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @srcSet@ attribute.+--+-- Example:+--+-- > div ! srcset "bar" $ "Hello."+--+-- Result:+--+-- > <div srcSet="bar">Hello.</div>+--+srcset :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+srcset = attribute "srcSet" " srcSet=\""+{-# INLINE srcset #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @start@ attribute.+--+-- Example:+--+-- > div ! start "bar" $ "Hello."+--+-- Result:+--+-- > <div start="bar">Hello.</div>+--+start :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+start = attribute "start" " start=\""+{-# INLINE start #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @step@ attribute.+--+-- Example:+--+-- > div ! step "bar" $ "Hello."+--+-- Result:+--+-- > <div step="bar">Hello.</div>+--+step :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+step = attribute "step" " step=\""+{-# INLINE step #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @style@ attribute.+style :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+style = attribute "style" " style=\""+{-# INLINE style #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @tabIndex@ attribute.+--+-- Example:+--+-- > div ! tabindex "bar" $ "Hello."+--+-- Result:+--+-- > <div tabIndex="bar">Hello.</div>+--+tabindex :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+tabindex = attribute "tabIndex" " tabIndex=\""+{-# INLINE tabindex #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @target@ attribute.+--+-- Example:+--+-- > div ! target "bar" $ "Hello."+--+-- Result:+--+-- > <div target="bar">Hello.</div>+--+target :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+target = attribute "target" " target=\""+{-# INLINE target #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @title@ attribute.+--+-- Example:+--+-- > div ! title "bar" $ "Hello."+--+-- Result:+--+-- > <div title="bar">Hello.</div>+--+title :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+title = attribute "title" " title=\""+{-# INLINE title #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @type@ attribute.+--+-- Example:+--+-- > div ! type_ "bar" $ "Hello."+--+-- Result:+--+-- > <div type="bar">Hello.</div>+--+type_ :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+type_ = attribute "type" " type=\""+{-# INLINE type_ #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @useMap@ attribute.+--+-- Example:+--+-- > div ! usemap "bar" $ "Hello."+--+-- Result:+--+-- > <div useMap="bar">Hello.</div>+--+usemap :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+usemap = attribute "useMap" " useMap=\""+{-# INLINE usemap #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @value@ attribute.+--+-- Example:+--+-- > div ! value "bar" $ "Hello."+--+-- Result:+--+-- > <div value="bar">Hello.</div>+--+value :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+value = attribute "value" " value=\""+{-# INLINE value #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @width@ attribute.+--+-- Example:+--+-- > div ! width "bar" $ "Hello."+--+-- Result:+--+-- > <div width="bar">Hello.</div>+--+width :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+width = attribute "width" " width=\""+{-# INLINE width #-}++-- WARNING: The next block of code was automatically generated by+-- src/Util/GenerateHtmlCombinators.hs:249+--+-- | Combinator for the @wmode@ attribute.+--+-- Example:+--+-- > div ! wmode "bar" $ "Hello."+--+-- Result:+--+-- > <div wmode="bar">Hello.</div>+--+wmode :: AttributeValue -- ^ Attribute value.+ -> Attribute ev -- ^ Resulting attribute.+wmode = attribute "wmode" " wmode=\""+{-# INLINE wmode #-}
+ src/Text/Blaze/Front/Internal.hs view
@@ -0,0 +1,487 @@++{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving, Rank2Types,+ FlexibleInstances, ExistentialQuantification,+ DeriveDataTypeable, MultiParamTypeClasses, DeriveFunctor,+ FunctionalDependencies #-}+-- | 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.+--+module Text.Blaze.Front.Internal+ (+ -- * Important types.+ ChoiceString (..)+ , StaticString (..)+ , MarkupM (..)+ , Markup+ , Tag+ , Attribute (..)+ , AttributeValue(..)+++ -- * Creating custom tags and attributes.+ , customParent+ , customLeaf+ , attribute+ , dataAttribute+ , customAttribute++ -- * Converting values to Markup.+ , text+ , preEscapedText+ , lazyText+ , preEscapedLazyText+ , string+ , preEscapedString+ , unsafeByteString+ , unsafeLazyByteString++ -- * Converting values to tags.+ , textTag+ , stringTag++ -- * Converting values to attribute values.+ , textValue+ , preEscapedTextValue+ , lazyTextValue+ , preEscapedLazyTextValue+ , stringValue+ , preEscapedStringValue+ , unsafeByteStringValue+ , unsafeLazyByteStringValue++ -- * Setting attributes+ , Attributable+ , (!)+ , (!?)++ -- * Modifying Markup elements+ , contents+ , external++ -- * Querying Markup elements+ , null+ ) where++import Control.Applicative++import Data.ByteString.Char8 (ByteString)+import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as BL+import qualified Data.List as List+import Data.Monoid (Monoid, mempty)+import Data.Semigroup (Semigroup, sconcat)+import Data.Text (Text)+import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Data.Text.Lazy as LT+import Data.Typeable (Typeable)++import GHC.Exts (IsString (..))++import Prelude hiding (null)++import Bridge+import Text.Blaze.Internal (StaticString(..), ChoiceString(..))++import Unsafe.Coerce (unsafeCoerce)+++-- | The core Markup datatype. The 'ev' type-parameter tracks the type of+-- events that can be raised when this Markup is rendered.+--+data MarkupM act a+ -- | Map all actions created by the inner Html.+ = forall act'. MapActions (act' -> act) (MarkupM act' a)+ -- | Install event handlers for the given event on all immediate+ -- children.+ | OnEvent (EventHandler act) (MarkupM act a)+ -- | Tag, open tag, end tag, content+ | Parent StaticString StaticString StaticString (MarkupM act a)+ -- | Custom parent+ | CustomParent ChoiceString (MarkupM act a)+ -- | Tag, open tag, end tag+ | Leaf StaticString StaticString StaticString+ -- | Custom leaf+ | CustomLeaf ChoiceString Bool+ -- | HTML content+ | Content ChoiceString+ -- | Concatenation of two HTML pieces+ | forall b c. Append (MarkupM act b) (MarkupM act c)+ -- | Add an attribute to the inner HTML. Raw key, key, value, HTML to+ -- receive the attribute.+ | AddAttribute StaticString StaticString ChoiceString (MarkupM act a)+ -- | Add a custom attribute to the inner HTML.+ | AddCustomAttribute ChoiceString ChoiceString (MarkupM act a)+ -- | Empty HTML.+ | Empty+ deriving (Typeable)++-- | Simplification of the 'MarkupM' datatype.+--+type Markup e = MarkupM e ()++instance Monoid a => Monoid (MarkupM ev a) where+ mempty = Empty+ {-# INLINE mempty #-}++instance Semigroup a => Semigroup (MarkupM ev a) where+ x <> y = Append x y+ {-# INLINE (<>) #-}+ sconcat = foldr Append Empty+ {-# INLINE sconcat #-}++instance Functor (MarkupM ev) where+ -- Safe because it does not contain a value anyway+ fmap _ = unsafeCoerce++instance Applicative (MarkupM ev) where+ pure _ = Empty+ ff <*> fx = Append ff fx++instance Monad (MarkupM ev) where+ return _ = Empty+ {-# INLINE return #-}+ (>>) = Append+ {-# INLINE (>>) #-}+ h1 >>= f = h1 >> f+ (error "Text.Blaze.Internal.MarkupM: invalid use of monadic bind")+ {-# INLINE (>>=) #-}++instance IsString (MarkupM ev a) where+ fromString = Content . fromString+ {-# INLINE fromString #-}++-- | Type for an HTML tag. This can be seen as an internal string type used by+-- BlazeMarkup.+--+newtype Tag = Tag { unTag :: StaticString }+ deriving (IsString)++-- | Type for an attribute.+--+newtype Attribute ev = Attribute (forall a. MarkupM ev a -> MarkupM ev a)++instance Monoid (Attribute ev) where+ mempty = Attribute id++instance Semigroup (Attribute ev) where+ Attribute f <> Attribute g = Attribute (g . f)++-- | The type for the value part of an attribute.+--+newtype AttributeValue = AttributeValue { unAttributeValue :: ChoiceString }+ deriving (IsString, Monoid, Semigroup)+++-- custom tags+--------------++-- | Create a custom parent element+customParent :: Tag -- ^ Element tag+ -> Markup ev -- ^ Content+ -> Markup ev -- ^ Resulting markup+customParent tag = CustomParent (Static $ unTag tag)++-- | Create a custom leaf element+customLeaf :: Tag -- ^ Element tag+ -> Bool -- ^ Close the leaf?+ -> Markup ev -- ^ Resulting markup+customLeaf tag = CustomLeaf (Static $ unTag tag)++-- | Create an HTML attribute that can be applied to an HTML element later using+-- the '!' operator.+--+attribute :: Tag -- ^ Raw key+ -> Tag -- ^ Shared key string for the HTML attribute.+ -> AttributeValue -- ^ Value for the HTML attribute.+ -> Attribute ev -- ^ Resulting HTML attribute.+attribute rawKey key value = Attribute $+ AddAttribute (unTag rawKey) (unTag key) (unAttributeValue value)+{-# INLINE 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."+--+dataAttribute :: Tag -- ^ Name of the attribute.+ -> AttributeValue -- ^ Value for the attribute.+ -> Attribute ev -- ^ Resulting HTML attribute.+dataAttribute tag value = Attribute $ AddCustomAttribute+ (Static "data-" `mappend` Static (unTag tag))+ (unAttributeValue value)+{-# INLINE dataAttribute #-}++-- | 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"+--+customAttribute :: Tag -- ^ Name of the attribute+ -> AttributeValue -- ^ Value for the attribute+ -> Attribute ev -- ^ Resulting HTML attribtue+customAttribute tag value = Attribute $ AddCustomAttribute+ (Static $ unTag tag)+ (unAttributeValue value)+{-# INLINE customAttribute #-}++-- | Render text. Functions like these can be used to supply content in HTML.+--+text :: Text -- ^ Text to render.+ -> Markup ev -- ^ Resulting HTML fragment.+text = Content . Text+{-# INLINE text #-}++-- | Render text without escaping.+--+preEscapedText :: Text -- ^ Text to insert+ -> Markup ev -- ^ Resulting HTML fragment+preEscapedText = Content . PreEscaped . Text+{-# INLINE preEscapedText #-}++-- | A variant of 'text' for lazy 'LT.Text'.+--+lazyText :: LT.Text -- ^ Text to insert+ -> Markup ev -- ^ Resulting HTML fragment+lazyText = mconcat . map text . LT.toChunks+{-# INLINE lazyText #-}++-- | A variant of 'preEscapedText' for lazy 'LT.Text'+--+preEscapedLazyText :: LT.Text -- ^ Text to insert+ -> Markup ev -- ^ Resulting HTML fragment+preEscapedLazyText = mconcat . map preEscapedText . LT.toChunks++-- | Create an HTML snippet from a 'String'.+--+string :: String -- ^ String to insert.+ -> Markup ev -- ^ Resulting HTML fragment.+string = Content . String+{-# INLINE string #-}++-- | Create an HTML snippet from a 'String' without escaping+--+preEscapedString :: String -- ^ String to insert.+ -> Markup ev -- ^ Resulting HTML fragment.+preEscapedString = Content . PreEscaped . String+{-# INLINE preEscapedString #-}++-- | 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).+--+unsafeByteString :: ByteString -- ^ Value to insert.+ -> Markup ev -- ^ Resulting HTML fragment.+unsafeByteString = Content . ByteString+{-# INLINE unsafeByteString #-}++-- | Insert a lazy 'BL.ByteString'. See 'unsafeByteString' for reasons why this+-- is an unsafe operation.+--+unsafeLazyByteString :: BL.ByteString -- ^ Value to insert+ -> Markup ev -- ^ Resulting HTML fragment+unsafeLazyByteString = mconcat . map unsafeByteString . BL.toChunks+{-# INLINE unsafeLazyByteString #-}++-- | Create a 'Tag' from some 'Text'.+--+textTag :: Text -- ^ Text to create a tag from+ -> Tag -- ^ Resulting tag+textTag t = Tag $ StaticString (T.unpack t ++) (T.encodeUtf8 t) t++-- | Create a 'Tag' from a 'String'.+--+stringTag :: String -- ^ String to create a tag from+ -> Tag -- ^ Resulting tag+stringTag = Tag . fromString++-- | Render an attribute value from 'Text'.+--+textValue :: Text -- ^ The actual value.+ -> AttributeValue -- ^ Resulting attribute value.+textValue = AttributeValue . Text+{-# INLINE textValue #-}++-- | Render an attribute value from 'Text' without escaping.+--+preEscapedTextValue :: Text -- ^ The actual value+ -> AttributeValue -- ^ Resulting attribute value+preEscapedTextValue = AttributeValue . PreEscaped . Text+{-# INLINE preEscapedTextValue #-}++-- | A variant of 'textValue' for lazy 'LT.Text'+--+lazyTextValue :: LT.Text -- ^ The actual value+ -> AttributeValue -- ^ Resulting attribute value+lazyTextValue = mconcat . map textValue . LT.toChunks+{-# INLINE lazyTextValue #-}++-- | A variant of 'preEscapedTextValue' for lazy 'LT.Text'+--+preEscapedLazyTextValue :: LT.Text -- ^ The actual value+ -> AttributeValue -- ^ Resulting attribute value+preEscapedLazyTextValue = mconcat . map preEscapedTextValue . LT.toChunks+{-# INLINE preEscapedLazyTextValue #-}++-- | Create an attribute value from a 'String'.+--+stringValue :: String -> AttributeValue+stringValue = AttributeValue . String+{-# INLINE stringValue #-}++-- | Create an attribute value from a 'String' without escaping.+--+preEscapedStringValue :: String -> AttributeValue+preEscapedStringValue = AttributeValue . PreEscaped . String+{-# INLINE preEscapedStringValue #-}++-- | Create an attribute value from a 'ByteString'. See 'unsafeByteString'+-- for reasons why this might not be a good idea.+--+unsafeByteStringValue :: ByteString -- ^ ByteString value+ -> AttributeValue -- ^ Resulting attribute value+unsafeByteStringValue = AttributeValue . ByteString+{-# INLINE unsafeByteStringValue #-}++-- | Create an attribute value from a lazy 'BL.ByteString'. See+-- 'unsafeByteString' for reasons why this might not be a good idea.+--+unsafeLazyByteStringValue :: BL.ByteString -- ^ ByteString value+ -> AttributeValue -- ^ Resulting attribute value+unsafeLazyByteStringValue = mconcat . map unsafeByteStringValue . BL.toChunks+{-# INLINE unsafeLazyByteStringValue #-}++-- | Used for applying attributes. You should not define your own instances of+-- this class.+class Attributable h ev | h -> ev where+ -- | 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>+ --+ (!) :: h -> Attribute ev -> h++instance Attributable (MarkupM ev a) ev where+ h ! (Attribute f) = f h+ {-# INLINE (!) #-}++instance Attributable (MarkupM ev a -> MarkupM ev b) ev where+ h ! f = (! f) . h+ {-# INLINE (!) #-}++-- | 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"+--+(!?) :: Attributable h ev => h -> (Bool, Attribute ev) -> h+(!?) h (c, a) = if c then h ! a else h++-- | Mark HTML as external data. External data can be:+--+-- * CSS data in a @<style>@ tag;+--+-- * Script data in a @<script>@ tag.+--+-- This function is applied automatically when using the @style@ or @script@+-- combinators.+--+external :: MarkupM ev a -> MarkupM ev a+external (MapActions f x) = MapActions f (external x)+external (OnEvent ev x) = OnEvent ev (external x)+external (Content x) = Content $ External x+external (Append x y) = Append (external x) (external y)+external (Parent x y z i) = Parent x y z $ external i+external (CustomParent x i) = CustomParent x $ external i+external (AddAttribute x y z i) = AddAttribute x y z $ external i+external (AddCustomAttribute x y i) = AddCustomAttribute x y $ external i+external x = x+{-# INLINABLE external #-}++-- | Take only the text content of an HTML tree.+--+-- > contents $ do+-- > p ! $ "Hello "+-- > p ! $ "Word!"+--+-- Result:+--+-- > Hello World!+--+contents :: MarkupM ev a -> MarkupM ev' b+contents (MapActions _ c) = contents c+contents (OnEvent _ c) = contents c+contents (Parent _ _ _ c) = contents c+contents (CustomParent _ c) = contents c+contents (Content c) = Content c+contents (Append c1 c2) = Append (contents c1) (contents c2)+contents (AddAttribute _ _ _ c) = contents c+contents (AddCustomAttribute _ _ c) = contents c+contents _ = Empty++-- | Check if a 'Markup' value is completely empty (renders to the empty+-- string).+null :: MarkupM ev a -> Bool+null markup = case markup of+ MapActions _ c -> null c+ OnEvent _ c -> null c+ Parent _ _ _ _ -> False+ CustomParent _ _ -> False+ Leaf _ _ _ -> False+ CustomLeaf _ _ -> False+ Content c -> emptyChoiceString c+ Append c1 c2 -> null c1 && null c2+ AddAttribute _ _ _ c -> null c+ AddCustomAttribute _ _ c -> null c+ Empty -> True+ where+ emptyChoiceString cs = case cs of+ Static ss -> emptyStaticString ss+ String s -> List.null s+ Text t -> T.null t+ ByteString bs -> B.null bs+ PreEscaped c -> emptyChoiceString c+ External c -> emptyChoiceString c+ AppendChoiceString c1 c2 -> emptyChoiceString c1 && emptyChoiceString c2+ EmptyChoiceString -> True++ emptyStaticString = B.null . getUtf8ByteString
+ src/Text/Blaze/Front/Renderer.hs view
@@ -0,0 +1,237 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+++-- | A preliminary renderer that produces `JS` components when run using+-- Fay.+--+module Text.Blaze.Front.Renderer where++import qualified Data.ByteString.Char8 as SBC+import Data.List (isInfixOf)+import Data.Text (Text)+import qualified Data.Text as T+import qualified Data.ByteString as S+import Data.Text.Lazy.Builder (Builder)+import qualified Data.Text.Lazy.Builder as TLB+import qualified Data.Text.Lazy as TL++import Prelude hiding (span)++import Text.Blaze.Front+import Text.Blaze.Front.Internal++-- import qualified Text.Blaze as B+import qualified Text.Blaze.Html as B++import Bridge++------------------------------------------------------------------------------+-- Rendering+------------------------------------------------------------------------------+++-- | Escape predefined XML entities in a text value+--+escapeMarkupEntities :: Text -- ^ Text to escape+ -> Builder -- ^ Resulting text builder+escapeMarkupEntities = T.foldr escape mempty+ where+ escape :: Char -> Builder -> Builder+ escape '<' b = TLB.fromText "<" `mappend` b+ escape '>' b = TLB.fromText ">" `mappend` b+ escape '&' b = TLB.fromText "&" `mappend` b+ escape '"' b = TLB.fromText """ `mappend` b+ escape '\'' b = TLB.fromText "'" `mappend` b+ escape x b = TLB.singleton x `mappend` b++-- | Render a 'ChoiceString'.+--+fromChoiceString :: ChoiceString -- ^ String to render+ -> Builder -- ^ String to append+ -> Builder -- ^ Resulting string+fromChoiceString (Static s) = (((TLB.fromText . getText) s) `mappend`)+fromChoiceString (String s) = (((escapeMarkupEntities . T.pack) s) `mappend`)+fromChoiceString (Text s) = ((escapeMarkupEntities s) `mappend`)+fromChoiceString (ByteString s) = (((TLB.fromText . T.pack . SBC.unpack) s) `mappend`)+fromChoiceString (PreEscaped x) =+ case x of+ String s -> (((TLB.fromText . T.pack) s) `mappend`)+ Text s -> ((TLB.fromText s) `mappend`)+ s -> fromChoiceString s+fromChoiceString (External x) = case x of+ -- Check that the sequence "</" is *not* in the external data.+ String s -> if "</" `isInfixOf` s then id else (((TLB.fromText . T.pack) s) `mappend`)+ Text s -> if "</" `T.isInfixOf` s then id else ((TLB.fromText s) `mappend`)+ ByteString s -> if "</" `S.isInfixOf` s then id else (((TLB.fromText . T.pack . SBC.unpack) s) `mappend`)+ s -> fromChoiceString s+fromChoiceString (AppendChoiceString x y) =+ fromChoiceString x . fromChoiceString y+fromChoiceString EmptyChoiceString = id+++-- | Render some 'Markup' to a virtual dom.+--+-- This function is morally pure.+--+render+ :: Show act+ => Markup act+ -> Builder+ -> Builder+render = go 0 id+ where+ go :: forall act' b. Int+ -> (Builder -> Builder)+ -> MarkupM act' b+ -> Builder -> Builder+ go i attrs (Parent _ open close content) =+ ind i+ . (((TLB.fromText . getText) open) `mappend`)+ . attrs . ((TLB.fromText ">\n") `mappend`)+ . go (inc i) id content . ind i+ . (((TLB.fromText . getText) close) `mappend`)+ . ((TLB.singleton '\n') `mappend`)+ go i attrs (CustomParent tag content) =+ ind i+ . ((TLB.singleton '<') `mappend`)+ . fromChoiceString tag . (attrs)+ . ((TLB.fromText ">\n") `mappend`)+ . go (inc i) id content . ind i+ . ((TLB.fromText "</") `mappend`)+ . fromChoiceString tag+ . ((TLB.fromText ">\n") `mappend`)+ go i attrs (Leaf _ begin end) =+ ind i+ . (((TLB.fromText . getText) begin) `mappend`)+ . (attrs)+ . (((TLB.fromText . getText) end) `mappend`)+ . ((TLB.singleton '\n') `mappend`)+ go i attrs (CustomLeaf tag close) =+ ind i+ . ((TLB.singleton '<') `mappend`)+ . fromChoiceString tag . attrs+ . ((TLB.fromText (if close then " />\n" else ">\n")) `mappend`)+ go i attrs (AddAttribute _ key value h) = flip (go i) h $+ (((TLB.fromText . getText) key) `mappend`)+ . fromChoiceString value+ . ((TLB.singleton '"') `mappend`) . attrs+ go i attrs (AddCustomAttribute key value h) = flip (go i) h $+ ((TLB.singleton ' ') `mappend`)+ . fromChoiceString key+ . ((TLB.fromText "=\"") `mappend`)+ . fromChoiceString value+ . ((TLB.singleton '"') `mappend`) . attrs+ go i _ (Content content) = ind i . fromChoiceString content+ . ((TLB.singleton '\n') `mappend`)+ go i attrs (Append h1 h2) = go i attrs h1 . go i attrs h2+ go _ _ (Empty) = id+ go _ _ (MapActions _ _) = id+ go i attrs (OnEvent _ h) = go i attrs h -- will be registered later through registerEvent+ {-# NOINLINE go #-}++ -- Increase the indentation+ inc = (+) 4++ -- Produce appending indentation+ ind i = ((TLB.fromString (replicate i ' ')) `mappend`)+{-# INLINE render #-}++renderHtml+ :: Show act+ => Markup act+ -> String+renderHtml html = TL.unpack . TLB.toLazyText $ render html TLB.flush+{-# INLINE renderHtml #-}++------------------------------------------------------------------------------+-- Event handler callback construction+------------------------------------------------------------------------------++-- | JS defines the following event types:+data EventType+ -- Clipboard Events+ = OnCopyE | OnCutE | OnPasteE+ -- Keyboard Events+ | OnKeyDownE | OnKeyPressE | OnKeyUpE+ -- Focus Events+ | OnFocusE | OnBlurE+ -- Form Events+ | OnChangeE | OnInputE | OnSubmitE+ -- Mouse Events+ | OnClickE | OnDoubleClickE | OnDragE | OnDragEndE | OnDragEnterE+ | OnDragExitE | OnDragLeaveE | OnDragOverE | OnDragStartE | OnDropE+ | OnMouseDownE | OnMouseEnterE | OnMouseLeaveE | OnMouseMoveE+ | OnMouseOutE | OnMouseOverE | OnMouseUpE+ -- Touch Events+ | OnTouchCancelE | OnTouchEndE | OnTouchMoveE | OnTouchStartE+ -- UI Events+ | OnScrollE+ -- Wheel Events+ | OnWheelE++eventName :: EventType -> String+eventName _ = ""+{-eventName ev = case ev of+ OnCopyE -> "onCopy"+ OnCutE -> "onCut"+ OnPasteE -> "onPaste"+ OnKeyDownE -> "onKeyDown"+ OnKeyPressE -> "onKeyPress"+ OnKeyUpE -> "onKeyUp"+ OnFocusE -> "onFocus"+ OnBlurE -> "onBlur"+ OnChangeE -> "onChange"+ OnInputE -> "onInput"+ OnSubmitE -> "onSubmit"+ OnClickE -> "onClick"+ OnDoubleClickE -> "onDoubleClick"+ OnDragE -> "onDrag"+ OnDragEndE -> "onDragEnd"+ OnDragEnterE -> "onDragEnter"+ OnDragExitE -> "onDragExit"+ OnDragLeaveE -> "onDragLeave"+ OnDragOverE -> "onDragOver"+ OnDragStartE -> "onDragStart"+ OnDropE -> "onDrop"+ OnMouseDownE -> "onMouseDown"+ OnMouseEnterE -> "onMouseEnter"+ OnMouseLeaveE -> "onMouseLeave"+ OnMouseMoveE -> "onMouseMove"+ OnMouseOutE -> "onMouseOut"+ OnMouseOverE -> "onMouseOver"+ OnMouseUpE -> "onMouseUp"+ OnTouchCancelE -> "onTouchCancel"+ OnTouchEndE -> "onTouchEnd"+ OnTouchMoveE -> "onTouchMove"+ OnTouchStartE -> "onTouchStart"+ OnScrollE -> "onScroll"+ OnWheelE -> "onWheel"-}++data Handler+ = IgnoreEvent+ | HandleEvent (IO (Bool -> IO ()))+ -- ^ Contains an IO action which generates the callback to attach to the event++registerEvents+ :: Markup a -> [CallbackAction a] -> [CallbackAction a]+registerEvents x = go x+ where+ go :: MarkupM a b -> [CallbackAction a] -> [CallbackAction a]+ go (MapActions _ _) = id+ go (Parent _ _ _ content) = go content+ go (CustomParent _ content) = go content+ go (Leaf _ _ _) = id+ go (CustomLeaf _ _) = id+ go (Content _) = id+ go (Append a b) = (go a) . (go b)+ go (AddAttribute _ _ _ a) = go a+ go (AddCustomAttribute _ _ a) = go a+ go Empty = id+ go (OnEvent eh a) = ((reg eh) :) . (go a)++ reg x' = CallbackAction x'++renderNewMarkup :: Show act => Markup act -> B.Html+renderNewMarkup = B.preEscapedToHtml . T.pack . renderHtml+
+ src/Text/Blaze/Front/Svg.hs view
@@ -0,0 +1,85 @@+{-# LANGUAGE OverloadedStrings #-}++-- | This module exports SVG combinators.+module Text.Blaze.Front.Svg+ ( module Text.Blaze.Front+ , Svg+ , toSvg+ , preEscapedToSvg++ , circle+ , defs+ , ellipse+ , g+ , line+ , linearGradient+ , mask+ , path+ , pattern+ , polygon+ , polyline+ , radialGradient+ , rect+ , stop+ , text+ , tspan+ ) where++import Text.Blaze.Front+import Text.Blaze.Front.Internal hiding (text)++type Svg ev = Markup ev++toSvg :: ToMarkup a => a -> Svg ev+toSvg = toMarkup++preEscapedToSvg :: ToMarkup a => a -> Svg ev+preEscapedToSvg = preEscapedToMarkup++circle :: Svg ev+circle = Leaf "circle" "<circle" ">"++defs :: Svg ev -> Svg ev+defs = Parent "defs" "<defs" "</defs>"++ellipse :: Svg ev+ellipse = Leaf "ellipse" "<ellipse" ">"++g :: Svg ev -> Svg ev+g = Parent "g" "<g" "</g>"++line :: Svg ev+line = Leaf "line" "<line" ">"++linearGradient :: Svg ev -> Svg ev+linearGradient = Parent "linearGradient" "<linearGradient" "</linearGradient>"++mask :: Svg ev -> Svg ev+mask = Parent "mask" "<mask" "</mask>"++path :: Svg ev+path = Leaf "path" "<path" ">"++pattern :: Svg ev -> Svg ev+pattern = Parent "pattern" "<pattern" "</pattern>"++polygon :: Svg ev+polygon = Leaf "polygon" "<polygon" ">"++polyline :: Svg ev+polyline = Leaf "polyline" "<polyline" ">"++radialGradient :: Svg ev -> Svg ev+radialGradient = Parent "radialGradient" "<radialGradient" "</radialGradient>"++rect :: Svg ev+rect = Leaf "rect" "<rect" ">"++stop :: Svg ev+stop = Leaf "stop" "<stop" ">"++text :: Svg ev -> Svg ev+text = Parent "text" "<text" "</text>"++tspan :: Svg ev -> Svg ev+tspan = Parent "tspan" "<tspan" "</tspan>"
+ src/Text/Blaze/Front/Svg/Attributes.hs view
@@ -0,0 +1,180 @@+-- | This module exports combinators that provide you with the+-- ability to set attributes on SVG elements.+--+{-# LANGUAGE OverloadedStrings #-}+module Text.Blaze.Front.Svg.Attributes+ ( cx+ , cy+ , d+ , dx+ , dy+ , fill+ , fillOpacity+ , fontFamily+ , fontSize+ , fx+ , fy+ , gradientTransform+ , gradientUnits+ , markerEnd+ , markerMid+ , markerStart+ , offset+ , opacity+ , patternContentUnits+ , patternUnits+ , points+ , preserveAspectRatio+ , r+ , rx+ , ry+ , spreadMethod+ , stopColor+ , stopOpacity+ , stroke+ , strokeDasharray+ , strokeLinecap+ , strokeOpacity+ , strokeWidth+ , textAnchor+ , transform+ , version+ , viewBox+ , x1+ , x2+ , x+ , y1+ , y2+ , y+ ) where++import Text.Blaze.Front.Internal (Attribute, AttributeValue, attribute)++cx :: AttributeValue -> Attribute ev+cx = attribute "cx" " cx=\""++cy :: AttributeValue -> Attribute ev+cy = attribute "cy" " cy=\""++d :: AttributeValue -> Attribute ev+d = attribute "d" " d=\""++dx :: AttributeValue -> Attribute ev+dx = attribute "dx" " dx=\""++dy :: AttributeValue -> Attribute ev+dy = attribute "dy" " dy=\""++fill :: AttributeValue -> Attribute ev+fill = attribute "fill" " fill=\""++fillOpacity :: AttributeValue -> Attribute ev+fillOpacity = attribute "fillOpacity" " fillOpacity=\""++fontFamily :: AttributeValue -> Attribute ev+fontFamily = attribute "fontFamily" " fontFamily=\""++fontSize :: AttributeValue -> Attribute ev+fontSize = attribute "fontSize" " fontSize=\""++fx :: AttributeValue -> Attribute ev+fx = attribute "fx" " fx=\""++fy :: AttributeValue -> Attribute ev+fy = attribute "fy" " fy=\""++gradientTransform :: AttributeValue -> Attribute ev+gradientTransform = attribute "gradientTransform" " gradientTransform=\""++gradientUnits :: AttributeValue -> Attribute ev+gradientUnits = attribute "gradientUnits" " gradientUnits=\""++markerEnd :: AttributeValue -> Attribute ev+markerEnd = attribute "markerEnd" " markerEnd=\""++markerMid :: AttributeValue -> Attribute ev+markerMid = attribute "markerMid" " markerMid=\""++markerStart :: AttributeValue -> Attribute ev+markerStart = attribute "markerStart" " markerStart=\""++offset :: AttributeValue -> Attribute ev+offset = attribute "offset" " offset=\""++opacity :: AttributeValue -> Attribute ev+opacity = attribute "opacity" " opacity=\""++patternContentUnits :: AttributeValue -> Attribute ev+patternContentUnits = attribute "patternContentUnits" " patternContentUnits=\""++patternUnits :: AttributeValue -> Attribute ev+patternUnits = attribute "patternUnits" " patternUnits=\""++points :: AttributeValue -> Attribute ev+points = attribute "points" " points=\""++preserveAspectRatio :: AttributeValue -> Attribute ev+preserveAspectRatio = attribute "preserveAspectRatio" " preserveAspectRatio=\""++r :: AttributeValue -> Attribute ev+r = attribute "r" " r=\""++rx :: AttributeValue -> Attribute ev+rx = attribute "rx" " rx=\""++ry :: AttributeValue -> Attribute ev+ry = attribute "ry" " ry=\""++spreadMethod :: AttributeValue -> Attribute ev+spreadMethod = attribute "spreadMethod" " spreadMethod=\""++stopColor :: AttributeValue -> Attribute ev+stopColor = attribute "stopColor" " stopColor=\""++stopOpacity :: AttributeValue -> Attribute ev+stopOpacity = attribute "stopOpacity" " stopOpacity=\""++stroke :: AttributeValue -> Attribute ev+stroke = attribute "stroke" " stroke=\""++strokeDasharray :: AttributeValue -> Attribute ev+strokeDasharray = attribute "strokeDasharray" " strokeDasharray=\""++strokeLinecap :: AttributeValue -> Attribute ev+strokeLinecap = attribute "strokeLinecap" " strokeLinecap=\""++strokeOpacity :: AttributeValue -> Attribute ev+strokeOpacity = attribute "strokeOpacity" " strokeOpacity=\""++strokeWidth :: AttributeValue -> Attribute ev+strokeWidth = attribute "strokeWidth" " strokeWidth=\""++textAnchor :: AttributeValue -> Attribute ev+textAnchor = attribute "textAnchor" " textAnchor=\""++transform :: AttributeValue -> Attribute ev+transform = attribute "transform" " transform=\""++version :: AttributeValue -> Attribute ev+version = attribute "version" " version=\""++viewBox :: AttributeValue -> Attribute ev+viewBox = attribute "viewBox" " viewBox=\""++x1 :: AttributeValue -> Attribute ev+x1 = attribute "x1" " x1=\""++x2 :: AttributeValue -> Attribute ev+x2 = attribute "x2" " x2=\""++x :: AttributeValue -> Attribute ev+x = attribute "x" " x=\""++y1 :: AttributeValue -> Attribute ev+y1 = attribute "y1" " y1=\""++y2 :: AttributeValue -> Attribute ev+y2 = attribute "y2" " y2=\""++y :: AttributeValue -> Attribute ev+y = attribute "y" " y=\""