Module HTML.Base

Library for constructing static and dynamic HTML pages. This paper contains a description of the basic ideas behind an old version of this library.

An application written with this library can be transformed into a cgi script by the command

> cypm exec curry2cgi -m mainPage -o /home/joe/cgi-bin/prog.cgi Prog

where Prog is the name of the Curry program with the cgi script, /home/joe/cgi-bin/prog.cgi is the desired location of the compiled cgi script, and mainPage is the Curry expression (of type IO HtmlPage) computing the HTML page (where cypm is the command calling the Curry Package Manager).

Author: Michael Hanus (with extensions by Bernd Brassel and Marco Comini)

Version: October 2020

Summary of exported operations:

defaultEncoding :: String   
The default encoding used in generated HTML documents.
hStruct :: HTML a => String -> [a] -> a   
An HTML structure with a given tag and no attributes.
idOfHtmlRef :: HtmlRef -> String   
Internal identifier of a HtmlRef (intended only for internal use in other libraries!).
toHtmlExp :: BaseHtml -> HtmlExp   
Transforms a static into a dynamic HTML document.
fromHtmlExp :: HtmlExp -> BaseHtml   
Transforms a dynamic HTML into a static one by dropping references and event handlers.
textOf :: [BaseHtml] -> String   
Extracts the textual contents of a list of HTML expressions.
fromFormReader :: FormReader a -> IO a   
Transforms a FormReader action into a standard IO action.
toFormReader :: IO a -> FormReader a   
Transforms an IO action into a FormReader action.
simpleFormDef :: [HtmlExp] -> HtmlFormDef ()   
A definition of a simple form which does not require session data.
simpleFormDefWithID :: String -> [HtmlExp] -> HtmlFormDef ()   
A definition of a simple form, which does not require session data, with a unique identifier (usually, the qualified name of the operation defining the form).
formDef :: FormReader a -> (a -> [HtmlExp]) -> HtmlFormDef a   
A definition of a form which consists of a FormReader action and a mapping from data into an HTML expression (which usually contains event handlers to produce the form answers).
formDefWithID :: String -> FormReader a -> (a -> [HtmlExp]) -> HtmlFormDef a   
A definition of a form with a unique identifier (usually, the qualified name of the operation defining the form).
formDefId :: HtmlFormDef a -> String   
Returns the identifier of a form definition.
setFormDefId :: String -> HtmlFormDef a -> HtmlFormDef a   
Sets the identifier of a form definition.
formDefRead :: HtmlFormDef a -> IO a   
Returns the FormReader action of a form definition.
formDefView :: HtmlFormDef a -> a -> [HtmlExp]   
Returns the view operation of a form definition.
instHtmlRefs :: [HtmlExp] -> Int -> ([HtmlExp],Int)   
Instantiates all HtmlRefs with a unique tag in HTML expressions.
pageEnc :: String -> PageParam   
An encoding scheme for a HTML page.
pageCookie :: (String,String) -> PageParam   
A cookie to be sent to the client's browser when a HTML page is requested.
pageCSS :: String -> PageParam   
A URL for a CSS file for a HTML page.
pageMetaInfo :: [(String,String)] -> PageParam   
Meta information for a HTML page.
pageLinkInfo :: [(String,String)] -> PageParam   
Link information for a HTML page.
pageBodyAttr :: (String,String) -> PageParam   
Optional attribute for the body element of the web page.
page :: String -> [BaseHtml] -> HtmlPage   
A basic HTML web page with the default encoding.
headerPage :: String -> [BaseHtml] -> HtmlPage   
A standard HTML web page where the title is included in the body as the first header.
addPageParam :: HtmlPage -> PageParam -> HtmlPage   
Adds a parameter to an HTML page.
addCookies :: [(String,String)] -> HtmlPage -> HtmlPage   
Adds simple cookie to an HTML page.
addHttpHeader :: String -> String -> HtmlPage -> HtmlPage   
Adds a HTTP header to a HTML page.
formatCookie :: (String,String,[CookieParam]) -> String   
answerText :: String -> HtmlPage   
A textual result instead of an HTML page as a result for active web pages.
answerEncText :: String -> String -> HtmlPage   
A textual result instead of an HTML page as a result for active web pages where the encoding is given as the first parameter.
redirectPage :: String -> HtmlPage   
Generates a redirection page to a given URL.
expires :: Int -> HtmlPage -> HtmlPage   
Adds expire time to given HTML page.
htxt :: HTML a => String -> a   
Basic text as HTML expression.
htxts :: HTML a => [String] -> [a]   
A list of strings represented as a list of HTML expressions.
hempty :: HTML a => a   
An empty HTML expression.
nbsp :: HTML a => a   
Non breaking Space
h1 :: HTML a => [a] -> a   
Header 1
h2 :: HTML a => [a] -> a   
Header 2
h3 :: HTML a => [a] -> a   
Header 3
h4 :: HTML a => [a] -> a   
Header 4
h5 :: HTML a => [a] -> a   
Header 5
h6 :: HTML a => [a] -> a   
Header 6
par :: HTML a => [a] -> a   
Paragraph
section :: HTML a => [a] -> a   
Section
header :: HTML a => [a] -> a   
Header
footer :: HTML a => [a] -> a   
Footer
emphasize :: HTML a => [a] -> a   
Emphasize
strong :: HTML a => [a] -> a   
Strong (more emphasized) text.
bold :: HTML a => [a] -> a   
Boldface
italic :: HTML a => [a] -> a   
Italic
nav :: HTML a => [a] -> a   
Navigation
code :: HTML a => [a] -> a   
Program code
center :: HTML a => [a] -> a   
Centered text
blink :: HTML a => [a] -> a   
Blinking text
teletype :: HTML a => [a] -> a   
Teletype font
pre :: HTML a => [a] -> a   
Unformatted input, i.e., keep spaces and line breaks and don't quote special characters.
verbatim :: HTML a => String -> a   
Verbatim (unformatted), special characters (<,>,&,") are quoted.
address :: HTML a => [a] -> a   
Address
href :: HTML a => String -> [a] -> a   
Hypertext reference
anchor :: HTML a => String -> [a] -> a   
An anchored text with a hypertext reference inside a document.
ulist :: HTML a => [[a]] -> a   
Unordered list.
ulistWithClass :: HTML a => String -> String -> [[a]] -> a   
An unordered list with classes for the entire list and the list elements.
ulistWithItemClass :: HTML a => String -> [(String,[a])] -> a   
An unordered list with classes for the entire list individual classes for the list elements.
olist :: HTML a => [[a]] -> a   
Ordered list.
olistWithClass :: HTML a => String -> String -> [[a]] -> a   
An ordered list with classes for the entire list and the list elements.
olistWithItemClass :: HTML a => String -> [(String,[a])] -> a   
An ordered list with classes for the entire list individual classes for the list elements.
litem :: HTML a => [a] -> a   
A single list item (usually not explicitly used)
dlist :: HTML a => [([a],[a])] -> a   
Description list
table :: HTML a => [[[a]]] -> a   
Table with a matrix of items where each item is a list of HTML expressions.
tableWithClass :: HTML a => String -> String -> String -> [[[a]]] -> a   
Table with a matrix of items (each item is a list of HTML expressions) with classes for the entire table, each row, and each data element.
headedTable :: HTML a => [[[a]]] -> a   
Similar to table but introduces header tags for the first row.
hrule :: HTML a => a   
Horizontal rule
breakline :: HTML a => a   
Break a line
image :: HTML a => String -> String -> a   
Image
styleSheet :: HTML a => String -> a   
Defines a style sheet to be used in this HTML document.
style :: HTML a => String -> [a] -> a   
Provides a style for HTML elements.
textstyle :: HTML a => String -> String -> a   
Provides a style for a basic text.
blockstyle :: HTML a => String -> [a] -> a   
Provides a style for a block of HTML elements.
inline :: HTML a => [a] -> a   
Joins a list of HTML elements into a single HTML element.
block :: HTML a => [a] -> a   
Joins a list of HTML elements into a block.
hiddenField :: HTML a => String -> String -> a   
A hidden field to pass a value referenced by a fixed name.
formElem :: HtmlFormDef a -> BaseHtml   
A form embedded in an HTML expression.
button :: String -> ((HtmlRef -> String) -> IO HtmlPage) -> HtmlExp   
A button to submit a form with a label string and an event handler.
resetButton :: String -> HtmlExp   
Reset button with a label string
imageButton :: String -> ((HtmlRef -> String) -> IO HtmlPage) -> HtmlExp   
Submit button in form of an imag.
textField :: HtmlRef -> String -> HtmlExp   
Input text field with a reference and an initial contents
password :: HtmlRef -> HtmlExp   
Input text field (where the entered text is obscured) with a reference
textArea :: HtmlRef -> (Int,Int) -> String -> HtmlExp   
Input text area with a reference, height/width, and initial contents
checkBox :: HtmlRef -> String -> HtmlExp   
A checkbox with a reference and a value.
checkedBox :: HtmlRef -> String -> HtmlExp   
A checkbox that is initially checked with a reference and a value.
radioMain :: HtmlRef -> String -> HtmlExp   
A main button of a radio (initially "on") with a reference and a value.
radioMainOff :: HtmlRef -> String -> HtmlExp   
A main button of a radio (initially "off") with a reference and a value.
radioOther :: HtmlRef -> String -> HtmlExp   
A further button of a radio (initially "off") with a reference (identical to the main button of this radio) and a value.
selection :: HtmlRef -> [(String,String)] -> HtmlExp   
A selection button with a reference and a list of name/value pairs.
selectionInitial :: HtmlRef -> [(String,String)] -> Int -> HtmlExp   
A selection button with a reference, a list of name/value pairs, and a preselected item in this list.
multipleSelection :: HtmlRef -> [(String,String,Bool)] -> HtmlExp   
A selection button with a reference and a list of name/value/flag pairs.
htmlQuote :: String -> String   
Quotes special characters (<,>,&,", umlauts) in a string as HTML special characters.
htmlIsoUmlauts :: String -> String   
Translates umlauts in iso-8859-1 encoding into HTML special characters.
addAttr :: HTML a => a -> (String,String) -> a   
Adds an attribute (name/value pair) to an HTML element.
addAttrs :: HTML a => a -> [(String,String)] -> a   
Adds a list of attributes (name/value pair) to an HTML element.
addClass :: HTML a => a -> String -> a   
Adds a class attribute to an HTML element (if the class attribute is not empty).
showBaseHtmls :: [BaseHtml] -> String   
Transforms a list of HTML expressions into string representation.
showBaseHtml :: BaseHtml -> String   
Transforms a single HTML expression into string representation.
showHtmlPage :: HtmlPage -> String   
Transforms HTML page into string representation.
htmlPrelude :: String   
Standard header for generated HTML pages.
htmlTagAttrs :: [(String,String)]   
Standard attributes for element "html".
getUrlParameter :: IO String   
Gets the parameter attached to the URL of the script.
urlencoded2string :: String -> String   
Translates an URL encoded string into equivalent ASCII string.
string2urlencoded :: String -> String   
Translates arbitrary strings into equivalent URL encoded strings.
getCookies :: IO [(String,String)]   
Gets the cookies sent from the browser for the current CGI script.
coordinates :: (HtmlRef -> String) -> Maybe (Int,Int)   
For image buttons: retrieve the coordinates where the user clicked within the image.

Exported datatypes:


BaseHtml

The data type to represent static HTML expressions.

Constructors:

  • BaseText :: String -> BaseHtml : a text string without any further structure
  • BaseStruct :: String -> Attrs -> [BaseHtml] -> BaseHtml : a structure with a tag, attributes, and HTML expressions inside the structure
  • BaseAction :: (IO HtmlExp) -> BaseHtml : an action that computes a general HTML expression which will be inserted when the HTML document is shown (used to implement form expressions)

HtmlRef

The (abstract) data type for representing references to input elements in HTML forms.

Constructors:


HtmlEnv

The type for representing cgi environments, i.e., mappings from cgi references to the corresponding values of the input elements.

Type synonym: HtmlEnv = HtmlRef -> String


HtmlHandler

The type of event handlers occurring in HTML forms.

Type synonym: HtmlHandler = HtmlEnv -> IO HtmlPage


HtmlExp

The data type for representing HTML expressions with input elements, i.e., all elements which might occur inside a form.

Constructors:

  • HtmlText :: String -> HtmlExp : a text string without any further structure
  • HtmlStruct :: String -> Attrs -> [HtmlExp] -> HtmlExp : a structure with a tag, attributes, and HTML expressions inside the structure
  • HtmlAction :: (IO HtmlExp) -> HtmlExp : an action that computes an HTML expression which will be inserted when the HTML document is shown (used to implement form expressions)
  • HtmlInput :: HtmlRef -> HtmlExp -> HtmlExp : an input element (described by the second argument) with a cgi reference
  • HtmlEvent :: HtmlRef -> HtmlHandler -> HtmlExp -> HtmlExp : an input element (first arg) identified by a cgi reference with an associated event handler (typically, a submit button)

FormReader

The type FormReader is a monad with operations to read data to invoke an HTML form. It is assumed that a FormReader action reads only data and does not change the environment, since the action is applied twice when executing a form. A typical action of this kind is HTML.Session.getSessionData.

The FormReader type encapsulates IO actions in order to enforce the correct use of forms.

Constructors:


HtmlFormDef

The data type for representing HTML forms embedded into HTML pages.

A form definition consists of a unique identifier of form (usually, the qualified name of the operation defining the form), a FormReader action and a mapping from data into an HTML expression (which usually contains event handlers to produce the form answers).

Constructors:


HtmlPage

The data type for representing HTML pages. Since the HTML document shown in this page is a base HTML expression, it is ensured that input elements and event handlers occur only in embedded forms.

Constructors:

  • HtmlPage :: String -> [PageParam] -> [BaseHtml] -> HtmlPage : an HTML page with title t, optional parameters (e.g., cookies) ps, and contents hs
  • HtmlAnswer :: String -> String -> HtmlPage : an answer in an arbitrary format where t is the content type (e.g., "text/plain") and c is the contents

PageParam

The possible parameters of an HTML page. The parameters of a cookie (PageCookie) are its name and value and optional parameters (expiration date, domain, path (e.g., the path "/" makes the cookie valid for all documents on the server), security) which are collected in a list.

Constructors:

  • PageEnc :: String -> PageParam : the encoding scheme of this page
  • PageCookie :: String -> String -> [CookieParam] -> PageParam : a cookie to be sent to the client's browser
  • PageCSS :: String -> PageParam : a URL for a CSS file for this page
  • HttpHeader :: String -> String -> PageParam : additional HTTP header included in this page
  • PageJScript :: String -> PageParam : a URL for a Javascript file for this page
  • PageMeta :: [(String,String)] -> PageParam : meta information (in form of attributes) for this page
  • PageLink :: [(String,String)] -> PageParam : link information (in form of attributes) for this page
  • PageHeadInclude :: BaseHtml -> PageParam : HTML expression to be included in page header
  • PageBodyAttr :: (String,String) -> PageParam : optional attribute for the body element of the page (more than one occurrence is allowed)

CookieParam

The possible parameters of a cookie.

Constructors:

  • CookieExpire :: ClockTime -> CookieParam
  • CookieDomain :: String -> CookieParam
  • CookiePath :: String -> CookieParam
  • CookieSecure :: CookieParam

Exported operations:

defaultEncoding :: String   

The default encoding used in generated HTML documents.

Further infos:
  • solution complete, i.e., able to compute all solutions

hStruct :: HTML a => String -> [a] -> a   

An HTML structure with a given tag and no attributes.

idOfHtmlRef :: HtmlRef -> String   

Internal identifier of a HtmlRef (intended only for internal use in other libraries!).

Further infos:
  • solution complete, i.e., able to compute all solutions

toHtmlExp :: BaseHtml -> HtmlExp   

Transforms a static into a dynamic HTML document.

fromHtmlExp :: HtmlExp -> BaseHtml   

Transforms a dynamic HTML into a static one by dropping references and event handlers.

textOf :: [BaseHtml] -> String   

Extracts the textual contents of a list of HTML expressions. For instance,

textOf [BaseText "xy", BaseStruct "a" [] [BaseText "bc"]] == "xy bc"

fromFormReader :: FormReader a -> IO a   

Transforms a FormReader action into a standard IO action.

Further infos:
  • solution complete, i.e., able to compute all solutions

toFormReader :: IO a -> FormReader a   

Transforms an IO action into a FormReader action. This operation should be used with care since it must be ensured that the action only reads data and does not change the environment, since the action is applied twice when executing a form.

Further infos:
  • solution complete, i.e., able to compute all solutions

simpleFormDef :: [HtmlExp] -> HtmlFormDef ()   

A definition of a simple form which does not require session data.

The unique identifier required for the implementation of forms is added by the curry2cgi translator.

simpleFormDefWithID :: String -> [HtmlExp] -> HtmlFormDef ()   

A definition of a simple form, which does not require session data, with a unique identifier (usually, the qualified name of the operation defining the form).

formDef :: FormReader a -> (a -> [HtmlExp]) -> HtmlFormDef a   

A definition of a form which consists of a FormReader action and a mapping from data into an HTML expression (which usually contains event handlers to produce the form answers). It is assumed that the FormReader action reads only data and does not change it, since it is applied twice when executing a form.

The unique identifier required for the implementation of forms is added by the curry2cgi translator.

Further infos:
  • solution complete, i.e., able to compute all solutions

formDefWithID :: String -> FormReader a -> (a -> [HtmlExp]) -> HtmlFormDef a   

A definition of a form with a unique identifier (usually, the qualified name of the operation defining the form). A form contains a FormReader action and a mapping from data into an HTML expression (which usually contains event handlers to produce the form answers). It is assumed that the FormReader action reads only data and does not change it, since it is applied twice when executing a form.

Further infos:
  • solution complete, i.e., able to compute all solutions

formDefId :: HtmlFormDef a -> String   

Returns the identifier of a form definition.

Further infos:
  • solution complete, i.e., able to compute all solutions

setFormDefId :: String -> HtmlFormDef a -> HtmlFormDef a   

Sets the identifier of a form definition. Only intended for internal use in the curry2cgi translator.

Further infos:
  • solution complete, i.e., able to compute all solutions

formDefRead :: HtmlFormDef a -> IO a   

Returns the FormReader action of a form definition.

Further infos:
  • solution complete, i.e., able to compute all solutions

formDefView :: HtmlFormDef a -> a -> [HtmlExp]   

Returns the view operation of a form definition.

Further infos:
  • solution complete, i.e., able to compute all solutions

instHtmlRefs :: [HtmlExp] -> Int -> ([HtmlExp],Int)   

Instantiates all HtmlRefs with a unique tag in HTML expressions. Only internally used. Parameters: HTML expressions, number for cgi-refs Result: translated HTML expressions, new number for cgi-refs

Further infos:
  • partially defined

pageEnc :: String -> PageParam   

An encoding scheme for a HTML page.

Further infos:
  • solution complete, i.e., able to compute all solutions

pageCSS :: String -> PageParam   

A URL for a CSS file for a HTML page.

Further infos:
  • solution complete, i.e., able to compute all solutions

pageMetaInfo :: [(String,String)] -> PageParam   

Meta information for a HTML page. The argument is a list of attributes included in the meta-tag in the header for this page.

Further infos:
  • solution complete, i.e., able to compute all solutions

pageLinkInfo :: [(String,String)] -> PageParam   

Link information for a HTML page. The argument is a list of attributes included in the link-tag in the header for this page.

Further infos:
  • solution complete, i.e., able to compute all solutions

pageBodyAttr :: (String,String) -> PageParam   

Optional attribute for the body element of the web page. More than one occurrence is allowed, i.e., all such attributes are collected.

Further infos:
  • solution complete, i.e., able to compute all solutions

page :: String -> [BaseHtml] -> HtmlPage   

A basic HTML web page with the default encoding.

Example call:
(page title hexps)
Parameters:
  • title : the title of the page
  • hexps : the page's body (list of HTML expressions)
Returns:
an HTML page
Further infos:
  • solution complete, i.e., able to compute all solutions

headerPage :: String -> [BaseHtml] -> HtmlPage   

A standard HTML web page where the title is included in the body as the first header.

Example call:
(headerPage title hexps)
Parameters:
  • title : the title of the page
  • hexps : the page's body (list of HTML expressions)
Returns:
an HTML page with the title as the first header

addPageParam :: HtmlPage -> PageParam -> HtmlPage   

Adds a parameter to an HTML page.

Example call:
(addPageParam page param)
Parameters:
  • page : a page
  • param : a page's parameter
Returns:
an HTML page
Further infos:
  • defined as left-associative infix operator with precedence 0
  • solution complete, i.e., able to compute all solutions

addCookies :: [(String,String)] -> HtmlPage -> HtmlPage   

Adds simple cookie to an HTML page. The cookies are sent to the client's browser together with this page.

Example call:
(addCookies cs form)
Parameters:
  • cs : the cookies as a list of name/value pairs
  • form : the form to add cookies to
Returns:
a new HTML page

addHttpHeader :: String -> String -> HtmlPage -> HtmlPage   

Adds a HTTP header to a HTML page. Headers are sent to the client's browser together with the page.

Example call:
(addHttpHeader key value page)
Parameters:
  • key : the name of the HTTP header field
  • value : the value of the HTTP header field
  • page : the page to which the header is added
Returns:
a new HTML page

formatCookie :: (String,String,[CookieParam]) -> String   

answerText :: String -> HtmlPage   

A textual result instead of an HTML page as a result for active web pages.

Example call:
(answerText txt)
Parameters:
  • txt : the contents of the result page
Returns:
an HTML answer page
Further infos:
  • solution complete, i.e., able to compute all solutions

answerEncText :: String -> String -> HtmlPage   

A textual result instead of an HTML page as a result for active web pages where the encoding is given as the first parameter.

Example call:
(answerEncText enc txt)
Parameters:
  • enc : the encoding of the text(e.g., "utf-8" or "iso-8859-1")
  • txt : the contents of the result page
Returns:
an HTML answer page
Further infos:
  • solution complete, i.e., able to compute all solutions

redirectPage :: String -> HtmlPage   

Generates a redirection page to a given URL. This is implemented via the HTTP response header Location (see also https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location).

Example call:
(redirectPage url page)
Parameters:
  • url : The URL target of the redirection
  • page : The redirection page

expires :: Int -> HtmlPage -> HtmlPage   

Adds expire time to given HTML page.

Example call:
(expires secs page)
Parameters:
  • secs : Number of seconds before document expires
  • page : The page to add the header information to

htxt :: HTML a => String -> a   

Basic text as HTML expression. The text may contain special HTML chars (like &lt;,&gt;,&amp;,&quot;) which will be quoted so that they appear as in the parameter string.

htxts :: HTML a => [String] -> [a]   

A list of strings represented as a list of HTML expressions. The strings may contain special HTML chars that will be quoted.

hempty :: HTML a => a   

An empty HTML expression.

nbsp :: HTML a => a   

Non breaking Space

h1 :: HTML a => [a] -> a   

Header 1

h2 :: HTML a => [a] -> a   

Header 2

h3 :: HTML a => [a] -> a   

Header 3

h4 :: HTML a => [a] -> a   

Header 4

h5 :: HTML a => [a] -> a   

Header 5

h6 :: HTML a => [a] -> a   

Header 6

par :: HTML a => [a] -> a   

Paragraph

section :: HTML a => [a] -> a   

Section

emphasize :: HTML a => [a] -> a   

Emphasize

strong :: HTML a => [a] -> a   

Strong (more emphasized) text.

bold :: HTML a => [a] -> a   

Boldface

italic :: HTML a => [a] -> a   

Italic

code :: HTML a => [a] -> a   

Program code

center :: HTML a => [a] -> a   

Centered text

teletype :: HTML a => [a] -> a   

Teletype font

pre :: HTML a => [a] -> a   

Unformatted input, i.e., keep spaces and line breaks and don't quote special characters.

verbatim :: HTML a => String -> a   

Verbatim (unformatted), special characters (&lt;,&gt;,&amp;,&quot;) are quoted.

address :: HTML a => [a] -> a   

Address

href :: HTML a => String -> [a] -> a   

Hypertext reference

anchor :: HTML a => String -> [a] -> a   

An anchored text with a hypertext reference inside a document.

ulist :: HTML a => [[a]] -> a   

Unordered list.

Example call:
(ulist items)
Parameters:
  • items : the list items where each item is a list of HTML expressions

ulistWithClass :: HTML a => String -> String -> [[a]] -> a   

An unordered list with classes for the entire list and the list elements. The class annotation will be ignored if it is empty.

Example call:
(ulistWithClass listclass itemclass items)
Parameters:
  • listclass : the class for the entire list structure
  • itemclass : the class for the list items
  • items : the list items where each item is a list of HTML expressions

ulistWithItemClass :: HTML a => String -> [(String,[a])] -> a   

An unordered list with classes for the entire list individual classes for the list elements. The class annotation will be ignored if it is empty.

Example call:
(ulistWithItemClass listclass classitems)
Parameters:
  • listclass : the class for the entire list structure
  • classitems : the list items together with their classes

olist :: HTML a => [[a]] -> a   

Ordered list.

Example call:
(olist items)
Parameters:
  • items : the list items where each item is a list of HTML expressions

olistWithClass :: HTML a => String -> String -> [[a]] -> a   

An ordered list with classes for the entire list and the list elements. The class annotation will be ignored if it is empty.

Example call:
(olistWithClass listclass itemclass items)
Parameters:
  • listclass : the class for the entire list structure
  • itemclass : the class for the list items
  • items : the list items where each item is a list of HTML expressions

olistWithItemClass :: HTML a => String -> [(String,[a])] -> a   

An ordered list with classes for the entire list individual classes for the list elements. The class annotation will be ignored if it is empty.

Example call:
(olistWithItemClass listclass classitems)
Parameters:
  • listclass : the class for the entire list structure
  • classitems : the list items together with their classes

litem :: HTML a => [a] -> a   

A single list item (usually not explicitly used)

dlist :: HTML a => [([a],[a])] -> a   

Description list

Example call:
(dlist items)
Parameters:
  • items : a list of (title/description) pairs (of HTML expressions)

table :: HTML a => [[[a]]] -> a   

Table with a matrix of items where each item is a list of HTML expressions.

tableWithClass :: HTML a => String -> String -> String -> [[[a]]] -> a   

Table with a matrix of items (each item is a list of HTML expressions) with classes for the entire table, each row, and each data element. The class annotation will be ignored if it is empty.

Example call:
(tableWithClass tableclass rowclass dataclass items)
Parameters:
  • tableclass : the class for the entire table structure
  • rowclass : the class for the table rows
  • dataclass : the class for the table data items
  • items : the matrix of table items where each item is a list of HTML expressions

headedTable :: HTML a => [[[a]]] -> a   

Similar to table but introduces header tags for the first row.

hrule :: HTML a => a   

Horizontal rule

breakline :: HTML a => a   

Break a line

image :: HTML a => String -> String -> a   

Image

Example call:
(image src alt)
Parameters:
  • src : the URL of the image
  • alt : the alternative text shown instead of the image

styleSheet :: HTML a => String -> a   

Defines a style sheet to be used in this HTML document.

Example call:
(styleSheet css)
Parameters:
  • css : a string in CSS format

style :: HTML a => String -> [a] -> a   

Provides a style for HTML elements. The style argument is the name of a style class defined in a style definition (see styleSheet) or in an external style sheet (see form and page parameters FormCSS and PageCSS).

Example call:
(style st hexps)
Parameters:
  • st : name of a style class
  • hexps : list of HTML expressions

textstyle :: HTML a => String -> String -> a   

Provides a style for a basic text. The style argument is the name of a style class defined in an external style sheet.

Example call:
(textstyle st txt)
Parameters:
  • st : name of a style class
  • txt : a string (special characters will be quoted)

blockstyle :: HTML a => String -> [a] -> a   

Provides a style for a block of HTML elements. The style argument is the name of a style class defined in an external style sheet. This element is used (in contrast to "style") for larger blocks of HTML elements since a line break is placed before and after these elements.

Example call:
(blockstyle st hexps)
Parameters:
  • st : name of a style class
  • hexps : list of HTML expressions

inline :: HTML a => [a] -> a   

Joins a list of HTML elements into a single HTML element. Although this construction has no rendering, it is sometimes useful for programming when several HTML elements must be put together.

Example call:
(inline hexps)
Parameters:
  • hexps : list of HTML expressions

block :: HTML a => [a] -> a   

Joins a list of HTML elements into a block. A line break is placed before and after these elements.

Example call:
(block hexps)
Parameters:
  • hexps : list of HTML expressions

hiddenField :: HTML a => String -> String -> a   

A hidden field to pass a value referenced by a fixed name. This function should be used with care since it may cause conflicts with the CGI-based implementation of this library.

formElem :: HtmlFormDef a -> BaseHtml   

A form embedded in an HTML expression. The parameter is a form defined as an exported top-level operation in the CGI program so that it can be accessed by the main program. The URL of the generated form is the same as the main page, i.e., the current URL parameter is passed to the form (which is useful for REST-based programming with URL parameters). The form uses a hidden field named FORMID to identify the form in the submitted form controller.

Since form elements can not be nested, see HTML, the form element itself is a static HTML expression.

button :: String -> ((HtmlRef -> String) -> IO HtmlPage) -> HtmlExp   

A button to submit a form with a label string and an event handler.

resetButton :: String -> HtmlExp   

Reset button with a label string

imageButton :: String -> ((HtmlRef -> String) -> IO HtmlPage) -> HtmlExp   

Submit button in form of an imag.

Example call:
(imageButton src handler)
Parameters:
  • src : url of the image
  • handler : event handler

textField :: HtmlRef -> String -> HtmlExp   

Input text field with a reference and an initial contents

password :: HtmlRef -> HtmlExp   

Input text field (where the entered text is obscured) with a reference

textArea :: HtmlRef -> (Int,Int) -> String -> HtmlExp   

Input text area with a reference, height/width, and initial contents

checkBox :: HtmlRef -> String -> HtmlExp   

A checkbox with a reference and a value. The value is returned if checkbox is on, otherwise "" is returned.

checkedBox :: HtmlRef -> String -> HtmlExp   

A checkbox that is initially checked with a reference and a value. The value is returned if checkbox is on, otherwise "" is returned.

radioMain :: HtmlRef -> String -> HtmlExp   

A main button of a radio (initially "on") with a reference and a value. The value is returned of this button is on. A complete radio button suite always consists of a main button (radiomain) and some further buttons (radioothers) with the same reference. Initially, the main button is selected (or nothing is selected if one uses radiomainoff instead of radio_main). The user can select another button but always at most one button of the radio can be selected. The value corresponding to the selected button is returned in the environment for this radio reference.

radioMainOff :: HtmlRef -> String -> HtmlExp   

A main button of a radio (initially "off") with a reference and a value. The value is returned of this button is on.

radioOther :: HtmlRef -> String -> HtmlExp   

A further button of a radio (initially "off") with a reference (identical to the main button of this radio) and a value. The value is returned of this button is on.

selection :: HtmlRef -> [(String,String)] -> HtmlExp   

A selection button with a reference and a list of name/value pairs. The names are shown in the selection and the value is returned for the selected name.

selectionInitial :: HtmlRef -> [(String,String)] -> Int -> HtmlExp   

A selection button with a reference, a list of name/value pairs, and a preselected item in this list. The names are shown in the selection and the value is returned for the selected name.

Example call:
(selectionInitial ref nvs sel)
Parameters:
  • ref : a CGI reference
  • nvs : list of name/value pairs
  • sel : the index of the initially selected item in the list nvs
Returns:
an HTML expression representing the selection button

multipleSelection :: HtmlRef -> [(String,String,Bool)] -> HtmlExp   

A selection button with a reference and a list of name/value/flag pairs. The names are shown in the selection and the value is returned if the corresponding name is selected. If flag is True, the corresonding name is initially selected. If more than one name has been selected, all values are returned in one string where the values are separated by newline (<code><a href="#\n">\n</a></code>) characters.

htmlQuote :: String -> String   

Quotes special characters (<,>,&,", umlauts) in a string as HTML special characters.

htmlIsoUmlauts :: String -> String   

Translates umlauts in iso-8859-1 encoding into HTML special characters.

addAttr :: HTML a => a -> (String,String) -> a   

Adds an attribute (name/value pair) to an HTML element.

Further infos:
  • defined as left-associative infix operator with precedence 0

addAttrs :: HTML a => a -> [(String,String)] -> a   

Adds a list of attributes (name/value pair) to an HTML element.

Further infos:
  • defined as left-associative infix operator with precedence 0

addClass :: HTML a => a -> String -> a   

Adds a class attribute to an HTML element (if the class attribute is not empty).

Further infos:
  • defined as left-associative infix operator with precedence 0

showBaseHtmls :: [BaseHtml] -> String   

Transforms a list of HTML expressions into string representation.

showBaseHtml :: BaseHtml -> String   

Transforms a single HTML expression into string representation.

showHtmlPage :: HtmlPage -> String   

Transforms HTML page into string representation.

Example call:
(showHtmlPage page)
Parameters:
  • page : the HTML page
Returns:
string representation of the HTML document

htmlPrelude :: String   

Standard header for generated HTML pages.

Further infos:
  • solution complete, i.e., able to compute all solutions

htmlTagAttrs :: [(String,String)]   

Standard attributes for element "html".

Further infos:
  • solution complete, i.e., able to compute all solutions

getUrlParameter :: IO String   

Gets the parameter attached to the URL of the script. For instance, if the script is called with URL "http://.../script.cgi?parameter", then "parameter" is returned by this I/O action. Note that an URL parameter should be "URL encoded" to avoid the appearance of characters with a special meaning. Use the functions "urlencoded2string" and "string2urlencoded" to decode and encode such parameters, respectively.

urlencoded2string :: String -> String   

Translates an URL encoded string into equivalent ASCII string.

string2urlencoded :: String -> String   

Translates arbitrary strings into equivalent URL encoded strings.

getCookies :: IO [(String,String)]   

Gets the cookies sent from the browser for the current CGI script. The cookies are represented in the form of name/value pairs since no other components are important here.

coordinates :: (HtmlRef -> String) -> Maybe (Int,Int)   

For image buttons: retrieve the coordinates where the user clicked within the image.