packages feed

html-minimalist 0.11 → 0.12

raw patch · 8 files changed

+455/−143 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Text.HTML.Light: cdata :: String -> Content
- Text.HTML.Light: cdata_raw :: String -> Content
+ Text.HTML.Light: renderHTML5 :: Element -> String
+ Text.HTML.Light: renderHTML5_pp :: Element -> String
+ Text.HTML.Light.Attribute: cols :: String -> Attr
+ Text.HTML.Light.Attribute: controls :: Attr
+ Text.HTML.Light.Attribute: datetime :: String -> Attr
+ Text.HTML.Light.Attribute: enctype :: String -> Attr
+ Text.HTML.Light.Attribute: frameborder :: String -> Attr
+ Text.HTML.Light.Attribute: mk_attr :: String -> String -> Attr
+ Text.HTML.Light.Attribute: mk_bool_attr :: String -> Attr
+ Text.HTML.Light.Attribute: rows :: String -> Attr
+ Text.HTML.Light.Attribute: seamless :: Attr
+ Text.HTML.Light.Composite: Button :: Input_Type
+ Text.HTML.Light.Composite: Checkbox :: Input_Type
+ Text.HTML.Light.Composite: Color :: Input_Type
+ Text.HTML.Light.Composite: Date :: Input_Type
+ Text.HTML.Light.Composite: DateTime :: Input_Type
+ Text.HTML.Light.Composite: DateTime_Local :: Input_Type
+ Text.HTML.Light.Composite: Email :: Input_Type
+ Text.HTML.Light.Composite: File :: Input_Type
+ Text.HTML.Light.Composite: Hidden :: Input_Type
+ Text.HTML.Light.Composite: Image :: Input_Type
+ Text.HTML.Light.Composite: Link_Alternate :: Link_Type
+ Text.HTML.Light.Composite: Link_Author :: Link_Type
+ Text.HTML.Light.Composite: Link_Bookmark :: Link_Type
+ Text.HTML.Light.Composite: Link_Help :: Link_Type
+ Text.HTML.Light.Composite: Link_Icon :: Link_Type
+ Text.HTML.Light.Composite: Link_License :: Link_Type
+ Text.HTML.Light.Composite: Link_Next :: Link_Type
+ Text.HTML.Light.Composite: Link_NoFollow :: Link_Type
+ Text.HTML.Light.Composite: Link_NoReferrer :: Link_Type
+ Text.HTML.Light.Composite: Link_Prefetch :: Link_Type
+ Text.HTML.Light.Composite: Link_Prev :: Link_Type
+ Text.HTML.Light.Composite: Link_Search :: Link_Type
+ Text.HTML.Light.Composite: Link_Stylesheet :: Link_Type
+ Text.HTML.Light.Composite: Month :: Input_Type
+ Text.HTML.Light.Composite: Number :: Input_Type
+ Text.HTML.Light.Composite: Password :: Input_Type
+ Text.HTML.Light.Composite: Radio :: Input_Type
+ Text.HTML.Light.Composite: Range :: Input_Type
+ Text.HTML.Light.Composite: Reset :: Input_Type
+ Text.HTML.Light.Composite: Search :: Input_Type
+ Text.HTML.Light.Composite: Submit :: Input_Type
+ Text.HTML.Light.Composite: Tel :: Input_Type
+ Text.HTML.Light.Composite: Text :: Input_Type
+ Text.HTML.Light.Composite: Time :: Input_Type
+ Text.HTML.Light.Composite: Url :: Input_Type
+ Text.HTML.Light.Composite: Week :: Input_Type
+ Text.HTML.Light.Composite: add_attrs_c :: [Attr] -> Content -> Content
+ Text.HTML.Light.Composite: data Input_Type
+ Text.HTML.Light.Composite: data Link_Type
+ Text.HTML.Light.Composite: input_hidden :: String -> String -> Content
+ Text.HTML.Light.Composite: input_submit :: String -> String -> Content
+ Text.HTML.Light.Composite: input_ty :: Input_Type -> [Attr] -> Content
+ Text.HTML.Light.Composite: input_type_str :: Input_Type -> String
+ Text.HTML.Light.Composite: instance Eq Input_Type
+ Text.HTML.Light.Composite: instance Eq Link_Type
+ Text.HTML.Light.Composite: instance Show Input_Type
+ Text.HTML.Light.Composite: instance Show Link_Type
+ Text.HTML.Light.Composite: link_css :: String -> String -> Content
+ Text.HTML.Light.Composite: link_rss :: String -> String -> Content
+ Text.HTML.Light.Composite: link_ty :: Link_Type -> [Attr] -> Content
+ Text.HTML.Light.Composite: link_type_str :: Link_Type -> String
+ Text.HTML.Light.Composite: meta_author :: String -> Content
+ Text.HTML.Light.Composite: meta_content_type :: String -> Content
+ Text.HTML.Light.Composite: meta_description :: String -> Content
+ Text.HTML.Light.Composite: meta_viewport :: String -> Content
+ Text.HTML.Light.Composite: script_js :: String -> Content
+ Text.HTML.Light.Composite: script_js_src :: FilePath -> Content
+ Text.HTML.Light.Composite: w3_css_validator :: String
+ Text.HTML.Light.Composite: w3_html_validator :: String
+ Text.HTML.Light.Composite: w3_rss_validator :: String -> String
+ Text.HTML.Light.Composite.Menu: nav_menu :: Element_C -> Element_C -> Menu_C
+ Text.HTML.Light.Composite.Menu: nav_menu_list :: Menu_C
+ Text.HTML.Light.Composite.Menu: nav_menu_span :: Menu_C
+ Text.HTML.Light.Composite.Menu: type Menu_C = Menu_P -> String -> [Menu_Entry] -> String -> Content
+ Text.HTML.Light.Composite.Menu: type Menu_Entry = (String, String, Maybe String)
+ Text.HTML.Light.Composite.Menu: type Menu_P = [Content] -> [Content]
+ Text.HTML.Light.Constant: hellip :: Content
+ Text.HTML.Light.Constant: html5_dt :: DocType
+ Text.HTML.Light.Element: address :: Element_C
+ Text.HTML.Light.Element: article :: Element_C
+ Text.HTML.Light.Element: aside :: Element_C
+ Text.HTML.Light.Element: audio :: Element_C
+ Text.HTML.Light.Element: caption :: Element_C
+ Text.HTML.Light.Element: cdata :: String -> Content
+ Text.HTML.Light.Element: cdata_raw :: String -> Content
+ Text.HTML.Light.Element: cite :: Element_C
+ Text.HTML.Light.Element: figcaption :: Element_C
+ Text.HTML.Light.Element: figure :: Element_C
+ Text.HTML.Light.Element: footer :: Element_C
+ Text.HTML.Light.Element: header :: Element_C
+ Text.HTML.Light.Element: hgroup :: Element_C
+ Text.HTML.Light.Element: iframe :: Element_C
+ Text.HTML.Light.Element: mk_element :: String -> Element_C
+ Text.HTML.Light.Element: mk_empty_element :: String -> Empty_Element_C
+ Text.HTML.Light.Element: nav :: Element_C
+ Text.HTML.Light.Element: q :: Element_C
+ Text.HTML.Light.Element: section :: Element_C
+ Text.HTML.Light.Element: source :: Empty_Element_C
+ Text.HTML.Light.Element: textarea :: Element_C
+ Text.HTML.Light.Element: time :: Element_C
+ Text.HTML.Light.Element: type Element_C = [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: type Empty_Element_C = [Attr] -> Content
- Text.HTML.Light.Element: a :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: a :: Element_C
- Text.HTML.Light.Element: area :: [Attr] -> Content
+ Text.HTML.Light.Element: area :: Empty_Element_C
- Text.HTML.Light.Element: body :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: body :: Element_C
- Text.HTML.Light.Element: br :: [Attr] -> Content
+ Text.HTML.Light.Element: br :: Empty_Element_C
- Text.HTML.Light.Element: col :: [Attr] -> Content
+ Text.HTML.Light.Element: col :: Empty_Element_C
- Text.HTML.Light.Element: colgroup :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: colgroup :: Element_C
- Text.HTML.Light.Element: dd :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: dd :: Element_C
- Text.HTML.Light.Element: div :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: div :: Element_C
- Text.HTML.Light.Element: dl :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: dl :: Element_C
- Text.HTML.Light.Element: dt :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: dt :: Element_C
- Text.HTML.Light.Element: embed :: [Attr] -> Content
+ Text.HTML.Light.Element: embed :: Empty_Element_C
- Text.HTML.Light.Element: form :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: form :: Element_C
- Text.HTML.Light.Element: frame :: [Attr] -> Content
+ Text.HTML.Light.Element: frame :: Empty_Element_C
- Text.HTML.Light.Element: frameset :: [Attr] -> Content
+ Text.HTML.Light.Element: frameset :: Empty_Element_C
- Text.HTML.Light.Element: h1 :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: h1 :: Element_C
- Text.HTML.Light.Element: h2 :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: h2 :: Element_C
- Text.HTML.Light.Element: h3 :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: h3 :: Element_C
- Text.HTML.Light.Element: h4 :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: h4 :: Element_C
- Text.HTML.Light.Element: head :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: head :: Element_C
- Text.HTML.Light.Element: hr :: [Attr] -> Content
+ Text.HTML.Light.Element: hr :: Empty_Element_C
- Text.HTML.Light.Element: img :: [Attr] -> Content
+ Text.HTML.Light.Element: img :: Empty_Element_C
- Text.HTML.Light.Element: input :: [Attr] -> Content
+ Text.HTML.Light.Element: input :: Empty_Element_C
- Text.HTML.Light.Element: li :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: li :: Element_C
- Text.HTML.Light.Element: link :: [Attr] -> Content
+ Text.HTML.Light.Element: link :: Empty_Element_C
- Text.HTML.Light.Element: map :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: map :: Element_C
- Text.HTML.Light.Element: meta :: [Attr] -> Content
+ Text.HTML.Light.Element: meta :: Empty_Element_C
- Text.HTML.Light.Element: object :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: object :: Element_C
- Text.HTML.Light.Element: ol :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: ol :: Element_C
- Text.HTML.Light.Element: p :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: p :: Element_C
- Text.HTML.Light.Element: param :: [Attr] -> Content
+ Text.HTML.Light.Element: param :: Empty_Element_C
- Text.HTML.Light.Element: pre :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: pre :: Element_C
- Text.HTML.Light.Element: script :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: script :: Element_C
- Text.HTML.Light.Element: span :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: span :: Element_C
- Text.HTML.Light.Element: style :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: style :: Element_C
- Text.HTML.Light.Element: table :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: table :: Element_C
- Text.HTML.Light.Element: td :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: td :: Element_C
- Text.HTML.Light.Element: th :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: th :: Element_C
- Text.HTML.Light.Element: thead :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: thead :: Element_C
- Text.HTML.Light.Element: title :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: title :: Element_C
- Text.HTML.Light.Element: tr :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: tr :: Element_C
- Text.HTML.Light.Element: ul :: [Attr] -> [Content] -> Content
+ Text.HTML.Light.Element: ul :: Element_C

Files

README view
@@ -1,12 +1,18 @@-html-minimalist - minimalist haskell html library+html-minimalist+--------------- +a minimalist [haskell][hs] [html5][html5] library+ Text.HTML.Light is a very simple Haskell module-for writing [x]html documents.  It provides-constructors for html elements and attributes-in terms of Text.XML.Light.+for writing html5 documents.  It provides+constructors for html5 elements and attributes+in terms of [Text.XML.Light][hs-xml]. -  http://slavepianos.org/rd/-  http://haskell.org/+[hs]: http://haskell.org/+[hs-xml]: http://hackage.haskell.org/package/xml+[html5]: http://www.w3.org/html5 -(c) rohan drape, 2006-2011-    gpl, http://gnu.org/copyleft/+© [rohan drape][rd], 2006-2012, [gpl]++[rd]: http://rd.slavepianos.org/+[gpl]: http://gnu.org/copyleft/
Text/HTML/Light.hs view
@@ -1,23 +1,36 @@ -- | Provides xhtml constructors for 'Text.XML.Light'. module Text.HTML.Light (module L-                       ,cdata,cdata_raw-                       ,renderXHTML) where+                       ,renderXHTML+                       ,renderHTML5,renderHTML5_pp) where -import Text.XML.Light as L+import Text.XML.Light import Text.HTML.Light.Attribute as L import Text.HTML.Light.Constant as L import Text.HTML.Light.Element as L --- | Ordinary character data, subject to escaping.-cdata :: String -> Content-cdata s = Text (CData CDataText s Nothing)+-- | Set of @HTML5@ elements that do not allow content.+html5_empty_elem :: [String]+html5_empty_elem =+    ["area","base","br","col","command","embed","hr"+    ,"img","input","keygen","link"+    ,"meta","param","source","track","wbr"] --- | Raw character data, not subject to escaping.-cdata_raw :: String -> Content-cdata_raw s = Text (CData CDataRaw s Nothing)+pp_reconf :: ConfigPP -> ConfigPP+pp_reconf =+    let f nm = qName nm `elem` html5_empty_elem+    in useShortEmptyTags f +pp_el :: ConfigPP -> Element -> String+pp_el c = ppcElement (pp_reconf c)+ -- | Render an xhtml element with the given document type. renderXHTML :: DocType -> Element -> String-renderXHTML t e = concat [xml_1_0-                         ,t-                         ,showElement e]+renderXHTML t e = concat [xml_1_0,t,pp_el defaultConfigPP e]++-- | Render an HTML5 element with the given document type.+renderHTML5 :: Element -> String+renderHTML5 e = html5_dt ++ pp_el defaultConfigPP e++-- | Pretty-printing variant (inserts whitespace).+renderHTML5_pp :: Element -> String+renderHTML5_pp e = unlines [html5_dt,pp_el prettyConfigPP e]
Text/HTML/Light/Attribute.hs view
@@ -6,119 +6,147 @@  import Text.XML.Light +mk_attr :: String -> String -> Attr+mk_attr a = Attr (unqual a)++-- | Make an 'Attr' where the /key/ and /value/ are equal.+mk_bool_attr :: String -> Attr+mk_bool_attr a = Attr (unqual a) a+ action :: String -> Attr-action = Attr (unqual "action")+action = mk_attr "action"  align :: String -> Attr-align = Attr (unqual "align")+align = mk_attr "align"  alt :: String -> Attr-alt = Attr (unqual "alt")+alt = mk_attr "alt"  bgcolor :: String -> Attr-bgcolor = Attr (unqual "bgcolor")+bgcolor = mk_attr "bgcolor"  border :: String -> Attr-border = Attr (unqual "border")+border = mk_attr "border"  -- | Prime suffixed since /class/ is a reserved word. class' :: String -> Attr-class' = Attr (unqual "class")+class' = mk_attr "class"  classid :: String -> Attr-classid = Attr (unqual "classid")+classid = mk_attr "classid" +cols :: String -> Attr+cols = mk_attr "cols"+ colspan :: String -> Attr-colspan = Attr (unqual "colspan")+colspan = mk_attr "colspan"  content :: String -> Attr-content = Attr (unqual "content")+content = mk_attr "content" +controls :: Attr+controls = mk_bool_attr "controls"+ coords :: String -> Attr-coords = Attr (unqual "coords")+coords = mk_attr "coords"  -- | Prime suffixed since /data/ is a reserved word. data' :: String -> Attr-data' = Attr (unqual "data")+data' = mk_attr "data" +datetime :: String -> Attr+datetime = mk_attr "datetime"++enctype :: String -> Attr+enctype = mk_attr "enctype"++frameborder :: String -> Attr+frameborder = mk_attr "frameborder"+ height :: String -> Attr-height = Attr (unqual "height")+height = mk_attr "height"  href :: String -> Attr-href = Attr (unqual "href")+href = mk_attr "href"  id :: String -> Attr-id = Attr (unqual "id")+id = mk_attr "id"  http_equiv :: String -> Attr http_equiv = Attr (unqual "http-equiv")  lang :: String -> Attr-lang = Attr (unqual "lang")+lang = mk_attr "lang"  language :: String -> Attr-language = Attr (unqual "language")+language = mk_attr "language"  media :: String -> Attr-media = Attr (unqual "media")+media = mk_attr "media"  method :: String -> Attr-method = Attr (unqual "method")+method = mk_attr "method"  name :: String -> Attr-name = Attr (unqual "name")+name = mk_attr "name"  quality :: String -> Attr-quality = Attr (unqual "quality")+quality = mk_attr "quality"  rel :: String -> Attr-rel = Attr (unqual "rel")+rel = mk_attr "rel" +rows :: String -> Attr+rows = mk_attr "rows"+ rowspan :: String -> Attr-rowspan = Attr (unqual "rowspan")+rowspan = mk_attr "rowspan" +seamless :: Attr+seamless = mk_bool_attr "seamless"+ shape :: String -> Attr-shape = Attr (unqual "shape")+shape = mk_attr "shape"  -- | Prime suffixed since /span/ is the name of both an attribute and -- element. span' :: String -> Attr-span' = Attr (unqual "span")+span' = mk_attr "span"  src :: String -> Attr-src = Attr (unqual "src")+src = mk_attr "src"  -- | Prime suffixed since /style/ is the name of both an attribute and -- element. style' :: String -> Attr-style' = Attr (unqual "style")+style' = mk_attr "style"  target :: String -> Attr-target = Attr (unqual "target")+target = mk_attr "target"  -- | Prime suffixed since /title/ is the name of both an attribute and -- element. title' :: String -> Attr-title' = Attr (unqual "title")+title' = mk_attr "title"  -- | Prime suffixed since /type/ is a reserved word. type' :: String -> Attr-type' = Attr (unqual "type")+type' = mk_attr "type"  usemap :: String -> Attr-usemap = Attr (unqual "usemap")+usemap = mk_attr "usemap"  valign :: String -> Attr-valign = Attr (unqual "valign")+valign = mk_attr "valign"  value :: String -> Attr-value = Attr (unqual "value")+value = mk_attr "value"  width :: String -> Attr-width = Attr (unqual "width")+width = mk_attr "width"  xml_lang :: String -> Attr xml_lang = Attr (unqual "xml:lang")  xmlns :: String -> Attr-xmlns = Attr (unqual "xmlns")+xmlns = mk_attr "xmlns"
+ Text/HTML/Light/Composite.hs view
@@ -0,0 +1,141 @@+-- | Composite constructors and constants.+module Text.HTML.Light.Composite where++import Data.Char+import Data.List as L+import Data.Maybe+import Text.HTML.Light.Attribute+import Text.HTML.Light.Element+import Text.XML.Light++-- * Attributes++-- | Variant on 'add_attrs' lifted to 'Content'.+add_attrs_c :: [Attr] -> Content -> Content+add_attrs_c z c =+    case c of+      Elem e -> Elem (add_attrs z e)+      _ -> error "add_attrs_c: not Elem"++-- * Meta elements++-- | Set @content-type@.+meta_content_type :: String -> Content+meta_content_type t = meta [http_equiv "content-type",content t]++-- | Set @author@.+meta_author :: String -> Content+meta_author au = meta [name "author",content au]++-- | Set @description@.+meta_description :: String -> Content+meta_description dsc = meta [name "description",content dsc]++-- | Set @meta_viewport@.+meta_viewport :: String -> Content+meta_viewport v = meta [name "viewport",content v]++-- * Link elements++-- | Enumeration of HTML5 link types.+data Link_Type = Link_Alternate+               | Link_Author+               | Link_Bookmark+               | Link_Help+               | Link_Icon+               | Link_License+               | Link_Next+               | Link_NoFollow+               | Link_NoReferrer+               | Link_Prefetch+               | Link_Prev+               | Link_Search+               | Link_Stylesheet+                 deriving (Eq,Show)++-- | HTML name for 'Link_Type'.+--+-- > link_type_str Link_Stylesheet == "stylesheet"+link_type_str :: Link_Type -> String+link_type_str = L.map toLower . fromJust . stripPrefix "Link_" . show++-- | Variant on 'link' with enumerated /type/ value.+link_ty :: Link_Type -> [Attr] -> Content+link_ty ty = link . (:) (rel (link_type_str ty))++-- | Set CSS @stylesheet@ for given @media@.+link_css :: String -> String -> Content+link_css m c = link_ty Link_Stylesheet [type' "text/css"+                                       ,media m+                                       ,href c]++-- | Set RSS @alternate@ with given @title@.+link_rss :: String -> String -> Content+link_rss tt ln =+    link_ty Link_Alternate [type' "application/rss+xml"+                           ,title' tt+                           ,href ln]++-- * Script elements++-- | Embed javascript.+script_js :: String -> Content+script_js s = script [type' "text/javascript"] [cdata_raw s]++-- | Source javascript.+script_js_src :: FilePath -> Content+script_js_src fn = script [type' "text/javascript",src fn] []++-- * Validators++-- | @W3.org@ HTML validator.+w3_html_validator :: String+w3_html_validator = "http://validator.w3.org/check/referer"++-- | @W3.org@ CSS validator.+w3_css_validator :: String+w3_css_validator = "http://jigsaw.w3.org/css-validator/check/referer"++-- | @W3.org@ CSS validator.+--+-- > w3_rss_validator "http://haskell.org"+w3_rss_validator :: String -> String+w3_rss_validator = (++) "http://validator.w3.org/feed/check.cgi?url="++-- * Input elements++-- | Enumeration of HTML5 input types.+data Input_Type = Hidden+                | Text+                | Search+                | Tel | Url | Email+                | Password+                | DateTime | Date | Month | Week | Time | DateTime_Local+                | Number | Range+                | Color+                | Checkbox | Radio+                | File+                | Submit+                | Image+                | Reset+                | Button+                  deriving (Eq,Show)++-- | HTML name for 'Input_Type'.+input_type_str :: Input_Type -> String+input_type_str =+    let f c = if c == '_' then '-' else c+    in L.map (f . toLower) . show++-- | Variant on 'input' with enumerated /type/ value.+input_ty :: Input_Type -> [Attr] -> Content+input_ty ty = input . (:) (type' (input_type_str ty))++-- | 'Hidden' input with /name/ and /value/.+input_hidden :: String -> String -> Content+input_hidden k v = input_ty Hidden [name k,value v]++-- | 'Submit' input with /name/ and /value/.+input_submit :: String -> String -> Content+input_submit k v = input_ty Submit [name k,value v]+
+ Text/HTML/Light/Composite/Menu.hs view
@@ -0,0 +1,36 @@+-- | Menu constructors.+module Text.HTML.Light.Composite.Menu where++import Data.List as L+import Prelude as P+import Text.HTML.Light.Attribute as H+import Text.HTML.Light.Element as H+import Text.XML.Light++-- | A menu entry is /(name,identifier,link)/.+type Menu_Entry = (String,String,Maybe String)++type Menu_P = ([Content] -> [Content])++-- | Menu constructor.+type Menu_C = Menu_P -> String -> [Menu_Entry] -> String -> Content++nav_menu :: Element_C -> Element_C -> Menu_C+nav_menu outer_f inner_f between_f ty m h =+    let cl = class' ty+        f (nm,nm_id,ln) =+            let a_cl = class' (if nm_id == h then "here" else "not-here")+                at = maybe [a_cl] ((: [a_cl]) . href) ln+            in inner_f [cl,H.id nm_id] [a at [cdata nm]]+    in nav [cl] [outer_f [cl] (between_f (L.map f m))]++-- | Make a 'nav' menu of class /ty/ with a 'ul' structure.  The entry+-- corresponding to identifier /h/ is marked with the class @here@.+nav_menu_list :: Menu_C+nav_menu_list = nav_menu ul li++-- | Variant of 'nav_menu_list' using 'H.span' elements.+nav_menu_span :: Menu_C+nav_menu_span f =+    let sp = H.span [class' "menu-separator"] [cdata " | "]+    in nav_menu H.div H.span (f . intersperse sp)
Text/HTML/Light/Constant.hs view
@@ -1,4 +1,4 @@--- | xhtml related constants.+-- | (x)html related constants. module Text.HTML.Light.Constant where  import Text.XML.Light@@ -21,6 +21,10 @@ deg :: Content deg = Text (CData CDataRaw "&deg;" Nothing) +-- | The horizontal ellipsis character.+hellip :: Content+hellip = Text (CData CDataRaw "&hellip;" Nothing)+ -- | The left double arrow character. larr :: Content larr = Text (CData CDataRaw "&larr;" Nothing)@@ -72,7 +76,7 @@  -- | The xhtml 1.0 strict document type string. xhtml_1_0_strict :: DocType-xhtml_1_0_strict = +xhtml_1_0_strict =     let dtd = "PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\""         url = "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\""     in concat ["<!DOCTYPE html ", dtd, " ", url, ">"]@@ -83,3 +87,7 @@     let dtd = "PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""         url = "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""     in concat ["<!DOCTYPE html ", dtd, " ", url, ">"]++-- | The HTML5 document type string.+html5_dt :: DocType+html5_dt = "<!DOCTYPE html>"
Text/HTML/Light/Element.hs view
@@ -4,128 +4,206 @@  import Text.XML.Light -a :: [Attr] -> [Content] -> Content-a z e = Elem (Element (unqual "a") z e Nothing)+-- * Content constructors -area :: [Attr] -> Content-area z = Elem (Element (unqual "area") z [] Nothing)+-- | Ordinary character data, subject to escaping.+cdata :: String -> Content+cdata s = Text (CData CDataText s Nothing) -body :: [Attr] -> [Content] -> Content-body z e = Elem (Element (unqual "body") z e Nothing)+-- | Raw character data, not subject to escaping.+cdata_raw :: String -> Content+cdata_raw s = Text (CData CDataRaw s Nothing) -br :: [Attr] -> Content-br z = Elem (Element (unqual "br") z [] Nothing)+-- * Element constructors -colgroup :: [Attr] -> [Content] -> Content-colgroup z e = Elem (Element (unqual "colgroup") z e Nothing)+-- | Element contructor.+type Element_C = [Attr] -> [Content] -> Content -col :: [Attr] -> Content-col z = Elem (Element (unqual "col") z [] Nothing)+-- | Empty element contructor.+type Empty_Element_C = [Attr] -> Content -div :: [Attr] -> [Content] -> Content-div z e = Elem (Element (unqual "div") z e Nothing)+mk_element :: String -> Element_C+mk_element nm z e = Elem (Element (unqual nm) z e Nothing) -embed :: [Attr] -> Content-embed z = Elem (Element (unqual "embed") z [] Nothing)+mk_empty_element :: String -> Empty_Element_C+mk_empty_element nm z = Elem (Element (unqual nm) z [] Nothing) -form :: [Attr] -> [Content] -> Content-form z e = Elem (Element (unqual "form") z e Nothing)+a :: Element_C+a = mk_element "a" -frame :: [Attr] -> Content-frame z = Elem (Element (unqual "frame") z [] Nothing)+address :: Element_C+address = mk_element "address" -frameset :: [Attr] -> Content-frameset z = Elem (Element (unqual "frameset") z [] Nothing)+area :: Empty_Element_C+area = mk_empty_element "area" -h1 :: [Attr] -> [Content] -> Content-h1 z c = Elem (Element (unqual "h1") z c Nothing)+article :: Element_C+article = mk_element "article" -h2 :: [Attr] -> [Content] -> Content-h2 z e = Elem (Element (unqual "h2") z e Nothing)+aside :: Element_C+aside = mk_element "aside" -h3 :: [Attr] -> [Content] -> Content-h3 z e = Elem (Element (unqual "h3") z e Nothing)+audio :: Element_C+audio = mk_element "audio" -h4 :: [Attr] -> [Content] -> Content-h4 z e = Elem (Element (unqual "h4") z e Nothing)+body :: Element_C+body = mk_element "body" -head :: [Attr] -> [Content] -> Content-head z e = Elem (Element (unqual "head") z e Nothing)+br :: Empty_Element_C+br = mk_empty_element "br" -hr :: [Attr] -> Content-hr z = Elem (Element (unqual "hr") z [] Nothing)+caption :: Element_C+caption = mk_element "caption" +cite :: Element_C+cite = mk_element "cite"++colgroup :: Element_C+colgroup = mk_element "colgroup"++col :: Empty_Element_C+col = mk_empty_element "col"++div :: Element_C+div = mk_element "div"++embed :: Empty_Element_C+embed = mk_empty_element "embed"++figcaption :: Element_C+figcaption = mk_element "figcaption"++figure :: Element_C+figure = mk_element "figure"++footer :: Element_C+footer = mk_element "footer"++form :: Element_C+form = mk_element "form"++frame :: Empty_Element_C+frame = mk_empty_element "frame"++frameset :: Empty_Element_C+frameset = mk_empty_element "frameset"++h1 :: Element_C+h1 = mk_element "h1"++h2 :: Element_C+h2 = mk_element "h2"++h3 :: Element_C+h3 = mk_element "h3"++h4 :: Element_C+h4 = mk_element "h4"++head :: Element_C+head = mk_element "head"++header :: Element_C+header = mk_element "header"++hgroup :: Element_C+hgroup = mk_element "hgroup"++hr :: Empty_Element_C+hr = mk_empty_element "hr"+ html :: [Attr] -> [Content] -> Element html z e = Element (unqual "html") z e Nothing -img :: [Attr] -> Content-img z = Elem (Element (unqual "img") z [] Nothing)+iframe :: Element_C+iframe = mk_element "iframe" -input :: [Attr] -> Content-input z = Elem (Element (unqual "input") z [] Nothing)+img :: Empty_Element_C+img = mk_empty_element "img" -li :: [Attr] -> [Content] -> Content-li z e = Elem (Element (unqual "li") z e Nothing)+input :: Empty_Element_C+input = mk_empty_element "input" -link :: [Attr] -> Content-link z = Elem (Element (unqual "link") z [] Nothing)+li :: Element_C+li = mk_element "li" -map :: [Attr] -> [Content] -> Content-map z e = Elem (Element (unqual "map") z e Nothing)+link :: Empty_Element_C+link = mk_empty_element "link" -meta :: [Attr] -> Content-meta z = Elem (Element (unqual "meta") z [] Nothing)+map :: Element_C+map = mk_element "map" -object :: [Attr] -> [Content] -> Content-object z e = Elem (Element (unqual "object") z e Nothing)+meta :: Empty_Element_C+meta = mk_empty_element "meta" -ol :: [Attr] -> [Content] -> Content-ol z e = Elem (Element (unqual "ol") z e Nothing)+nav :: Element_C+nav = mk_element "nav" -param :: [Attr] -> Content-param z = Elem (Element (unqual "param") z [] Nothing)+object :: Element_C+object = mk_element "object" -ul :: [Attr] -> [Content] -> Content-ul z e = Elem (Element (unqual "ul") z e Nothing)+ol :: Element_C+ol = mk_element "ol" -dl :: [Attr] -> [Content] -> Content-dl z e = Elem (Element (unqual "dl") z e Nothing)+param :: Empty_Element_C+param = mk_empty_element "param" -dt :: [Attr] -> [Content] -> Content-dt z e = Elem (Element (unqual "dt") z e Nothing)+ul :: Element_C+ul = mk_element "ul" -dd :: [Attr] -> [Content] -> Content-dd z e = Elem (Element (unqual "dd") z e Nothing)+dl :: Element_C+dl = mk_element "dl" -p :: [Attr] -> [Content] -> Content-p z e = Elem (Element (unqual "p") z e Nothing)+dt :: Element_C+dt = mk_element "dt" -pre :: [Attr] -> [Content] -> Content-pre z e = Elem (Element (unqual "pre") z e Nothing)+dd :: Element_C+dd = mk_element "dd" -script :: [Attr] -> [Content] -> Content-script z e = Elem (Element (unqual "script") z e Nothing)+p :: Element_C+p = mk_element "p" -span :: [Attr] -> [Content] -> Content-span z e = Elem (Element (unqual "span") z e Nothing)+pre :: Element_C+pre = mk_element "pre" -style :: [Attr] -> [Content] -> Content-style z e = Elem (Element (unqual "style") z e Nothing)+q :: Element_C+q = mk_element "q" -table :: [Attr] -> [Content] -> Content-table z e = Elem (Element (unqual "table") z e Nothing)+script :: Element_C+script = mk_element "script" -td :: [Attr] -> [Content] -> Content-td z e = Elem (Element (unqual "td") z e Nothing)+section :: Element_C+section = mk_element "section" -th :: [Attr] -> [Content] -> Content-th z e = Elem (Element (unqual "th") z e Nothing)+source :: Empty_Element_C+source = mk_empty_element "source" -thead :: [Attr] -> [Content] -> Content-thead z e = Elem (Element (unqual "thead") z e Nothing)+span :: Element_C+span = mk_element "span" -title :: [Attr] -> [Content] -> Content-title z e = Elem (Element (unqual "title") z e Nothing)+style :: Element_C+style = mk_element "style" -tr :: [Attr] -> [Content] -> Content-tr z e = Elem (Element (unqual "tr") z e Nothing)+table :: Element_C+table = mk_element "table"++td :: Element_C+td = mk_element "td"++textarea :: Element_C+textarea = mk_element "textarea"++th :: Element_C+th = mk_element "th"++thead :: Element_C+thead = mk_element "thead"++time :: Element_C+time = mk_element "time"++title :: Element_C+title = mk_element "title"++tr :: Element_C+tr = mk_element "tr"
html-minimalist.cabal view
@@ -1,5 +1,5 @@ Name:              html-minimalist-Version:           0.11+Version:           0.12 Synopsis:          Minimalist haskell html library Description:       Text.HTML.Light is a very simple Haskell module                    for writing [x]html documents.  It provides@@ -7,12 +7,12 @@                    in terms of Text.XML.Light. License:           GPL Category:          Text-Copyright:         (c) Rohan Drape, 2006-2011+Copyright:         (c) Rohan Drape, 2006-2012 Author:            Rohan Drape Maintainer:        rd@slavepianos.org Stability:         Experimental-Homepage:          http://slavepianos.org/rd/?t=html-minimalist-Tested-With:       GHC == 7.2.2+Homepage:          http://rd.slavepianos.org/?t=html-minimalist+Tested-With:       GHC == 7.6.1 Build-Type:        Simple Cabal-Version:     >= 1.8 @@ -24,9 +24,11 @@   GHC-Options:     -Wall -fwarn-tabs   Exposed-modules: Text.HTML.Light                    Text.HTML.Light.Attribute+                   Text.HTML.Light.Composite+                   Text.HTML.Light.Composite.Menu                    Text.HTML.Light.Constant                    Text.HTML.Light.Element  Source-Repository  head   Type:            darcs-  Location:        http://slavepianos.org/rd/sw/html-minimalist+  Location:        http://rd.slavepianos.org/sw/html-minimalist