| WashNGo-2.12: WASH is a family of embedded domain specific languages (EDSL) for programming Web applications in Haskell. | Contents | Index |
|
|
|
|
|
Description |
One stop shop for the WASH/CGI library. All high-level scripts should
get along with importing just this module. Low-level scripts may have to
import RawCGI.
|
|
Synopsis |
|
data CGI a | | class Monad cgi => CGIMonad cgi | | ask :: CGIMonad cgi => WithHTML x cgi a -> cgi () | | tell :: (CGIMonad cgi, CGIOutput a) => a -> cgi () | | io :: (Read a, Show a) => IO a -> CGI a | | run :: CGI () -> IO () | | runWithOptions :: CGIOptions -> CGI () -> IO () | | once :: (CGIMonad cgi, Read a, Show a) => cgi a -> cgi a | | forever :: CGIMonad cgi => cgi () -> cgi () | | callWithCurrentHistory :: (CGIMonad cgi, Read a, Show a) => ((a -> cgi ()) -> a -> cgi ()) -> a -> cgi () | | htell :: CGIMonad cgi => WithHTML x IO () -> cgi a | | askOffline :: CGIMonad cgi => WithHTML x cgi a -> (Element -> IO ()) -> cgi () | | data Image | | internalImage :: CGIMonad cgi => FreeForm -> String -> WithHTML x cgi Image | | externalImage :: CGIMonad cgi => URL -> String -> WithHTML x cgi Image | | makeImg :: Monad cgi => Image -> HTMLField cgi x y () | | makeRef :: (CGIMonad cgi, Monad m) => String -> WithHTML x m () -> cgi (WithHTML y m ()) | | makePopupRef :: CGIMonad cgi => String -> String -> HTMLCons x y cgi () | | makeA :: CGIMonad cgi => String -> String -> HTMLField cgi x y () | | backLink :: Monad m => HTMLCons x y m () | | hlink :: Monad m => URL -> HTMLCons x y m () | | popuplink :: Monad m => String -> URL -> HTMLCons x y m () | | restart :: CGIMonad cgi => cgi () | | standardPage :: Monad m => String -> WithHTML x m a -> WithHTML y m () | | htmlHeader :: Monad m => String -> WithHTML x m a -> WithHTML y m () | | html :: Monad m => WithHTML x m a -> WithHTML y m () | | cssPage :: Monad m => String -> String -> WithHTML x m a -> WithHTML y m () | | cssHeader :: Monad m => String -> String -> WithHTML x m a -> WithHTML y m () | | type HTMLField cgi x y a = WithHTML x cgi () -> WithHTML y cgi a | | makeForm :: CGIMonad cgi => WithHTML x cgi a -> WithHTML y cgi () | | standardQuery :: CGIMonad cgi => String -> WithHTML x cgi a -> cgi () | | submit :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi x y () | | submit0 :: CGIMonad cgi => cgi () -> HTMLField cgi x y () | | defaultSubmit :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi x y () | | resetField :: CGIMonad cgi => HTMLField cgi x y (InputField () INVALID) | | activeInputField :: (CGIMonad cgi, Reason a, Read a) => (a -> cgi ()) -> HTMLField cgi x y () | | activate :: (CGIMonad cgi, InputHandle (i a), HasValue i) => (a -> cgi ()) -> HTMLField cgi x y (i a INVALID) -> HTMLField cgi x y (i a INVALID) | | submitLink :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons x y cgi () | | submitLink0 :: CGIMonad cgi => cgi () -> HTMLCons x y cgi () | | defaultSubmitLink :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons x y cgi () | | submitx :: DTree cgi x y -> HTMLField cgi x y () | | data DTree cgi x y | | dtleaf :: CGIMonad cgi => cgi () -> DTree cgi x y | | dtnode :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> DTree cgi x y) -> DTree cgi x y | | inputField :: (CGIMonad cgi, Reason a, Read a) => HTMLField cgi x y (InputField a INVALID) | | textInputField :: CGIMonad cgi => HTMLField cgi x y (InputField String INVALID) | | checkedTextInputField :: CGIMonad cgi => (Maybe String -> Maybe String) -> HTMLField cgi x y (InputField String INVALID) | | passwordInputField :: (CGIMonad cgi, Reason a, Read a) => HTMLField cgi x y (InputField a INVALID) | | makeTextarea :: CGIMonad cgi => String -> HTMLField cgi x y (InputField String INVALID) | | checkboxInputField :: CGIMonad cgi => HTMLField cgi x y (InputField Bool INVALID) | | makeButton :: CGIMonad cgi => HTMLField cgi x y (InputField Bool INVALID) | | data RadioGroup a x | | radioGroup :: (CGIMonad cgi, Read a) => WithHTML x cgi (RadioGroup a INVALID) | | radioButton :: (Show a, Monad cgi) => RadioGroup a INVALID -> a -> HTMLField cgi x y () | | radioError :: CGIMonad cgi => RadioGroup a INVALID -> WithHTML x cgi () | | imageField :: CGIMonad cgi => Image -> HTMLField cgi x y (InputField (Int, Int) INVALID) | | selectMultiple :: (CGIMonad cgi, Eq a) => (a -> String) -> [a] -> [a] -> (Int, Int) -> HTMLField cgi x y (InputField [a] INVALID) | | selectSingle :: (CGIMonad cgi, Eq a) => (a -> String) -> Maybe a -> [a] -> HTMLField cgi x y (InputField a INVALID) | | selectBounded :: (CGIMonad cgi, Enum a, Bounded a, Read a, Show a, Eq a) => Maybe a -> HTMLField cgi x y (InputField a INVALID) | | fileInputField :: CGIMonad cgi => HTMLField cgi x y (InputField FileReference INVALID) | | checkedFileInputField :: CGIMonad cgi => (Maybe FileReference -> Maybe FileReference) -> HTMLField cgi x y (InputField FileReference INVALID) | | as_rows :: AT -> Int | | as_cols :: AT -> Int | | table_io :: IO [[String]] -> CGI AT | | getText :: Monad m => AT -> Int -> Int -> WithHTML x m () | | unAR :: AR -> [String] | | selectionGroup :: CGIMonad cgi => WithHTML y cgi (SelectionGroup AR INVALID) | | selectionButton :: CGIMonad cgi => SelectionGroup AR INVALID -> AT -> Int -> HTMLField cgi x y () | | selectionDisplay :: CGIMonad cgi => SelectionGroup AR INVALID -> AT -> Int -> (WithHTML x cgi () -> [WithHTML x cgi ()] -> WithHTML x cgi a) -> WithHTML x cgi a | | choiceGroup :: CGIMonad cgi => WithHTML x cgi (SelectionGroup [AR] INVALID) | | choiceButton :: CGIMonad cgi => SelectionGroup [AR] INVALID -> AT -> Int -> HTMLField cgi x y () | | choiceDisplay :: CGIMonad cgi => SelectionGroup [AR] INVALID -> AT -> Int -> (WithHTML x cgi () -> [WithHTML x cgi ()] -> WithHTML x cgi a) -> WithHTML x cgi a | | data InputField a x | | data VALID | | data INVALID | | value :: HasValue i => i a VALID -> a | | class InputHandle h | | class HasValue i where | | | data F0 x = F0 | | data F1 a x = F1 (a x) | | data F2 a b x = F2 (a x) (b x) | | data F3 a b c x = F3 (a x) (b x) (c x) | | data F4 a b c d x = F4 (a x) (b x) (c x) (d x) | | data F5 a b c d e x = F5 (a x) (b x) (c x) (d x) (e x) | | data F6 a b c d e f x = F6 (a x) (b x) (c x) (d x) (e x) (f x) | | data F7 a b c d e f g x = F7 (a x) (b x) (c x) (d x) (e x) (f x) (g x) | | data F8 a b c d e f g h x = F8 (a x) (b x) (c x) (d x) (e x) (f x) (g x) (h x) | | data FL a x = FL [a x] | | data FA a b x = FA a (b x) | | concatFields :: (Reason c, Read c) => InputField c INVALID -> InputField Text INVALID -> InputField c INVALID | | concatFieldsWith :: (Reason c, Read c) => (String -> [String] -> String) -> InputField c INVALID -> [InputField Text INVALID] -> InputField c INVALID | | fieldSIZE :: Monad m => Int -> WithHTML x m () | | fieldMAXLENGTH :: Monad m => Int -> WithHTML x m () | | fieldVALUE :: (Monad m, Show a) => a -> WithHTML x m () | | runWithHook :: CGIOptions -> ([String] -> CGI ()) -> CGI () -> IO () | | docTranslator :: [FreeForm] -> ([String] -> CGI ()) -> [String] -> CGI () | | lastTranslator :: [String] -> CGI () | | class CGIOutput a | | data Status = Status {} | | newtype Location = Location URL | | data FreeForm = FreeForm {} | | data FileReference = FileReference {} | | newtype Text = Text {} | | newtype NonEmpty = NonEmpty {} | | newtype AllDigits = AllDigits {} | | newtype Phone = Phone {} | | newtype EmailAddress = EmailAddress {} | | newtype CreditCardNumber = CreditCardNumber {} | | data CreditCardExp = CreditCardExp {} | | newtype Password = Password {} | | | | | | type CGIOptions = [CGIOption] | | newtype URL = URL {} | | makeServlet :: CGI () -> CGIProgram | | makeServletWithHook :: ([String] -> CGI ()) -> CGI () -> CGIProgram | | module WASH.CGI.HTMLWrapper | | module WASH.CGI.Style | | data FrameSet | | | | | | makeFrame :: CGIMonad cgi => WithHTML x IO () -> cgi () -> cgi FrameSet | | makeFrameset :: CGIMonad cgi => FrameLayout -> [(FrameSpacing, cgi FrameSet)] -> cgi FrameSet | | framesetPage :: CGIMonad cgi => String -> cgi FrameSet -> cgi () |
|
|
|
Basics
|
|
data CGI a |
Instances | |
|
|
class Monad cgi => CGIMonad cgi |
| Instances | |
|
|
ask :: CGIMonad cgi => WithHTML x cgi a -> cgi () |
Takes a monadic value that constructs a HTML page and delivers this
page to the browser. This page may contain forms and input widgets.
|
|
tell :: (CGIMonad cgi, CGIOutput a) => a -> cgi () |
Terminates script by sending its argument to the browser.
|
|
io :: (Read a, Show a) => IO a -> CGI a |
Safe embedding of an IO action into the CGI monad. Intentionally not
parameterized óver its monad to avoid its use inside of transactions.
|
|
run :: CGI () -> IO () |
Turns a CGI action into an IO action. Used to turn the main CGI action
into the main function of the program. Typical use:
main = run mainCGI
|
|
runWithOptions :: CGIOptions -> CGI () -> IO () |
Turns a CGI action into an IO action. Used to turn the main CGI action
into the main function of the program. Takes additional low-level
options. Typical use:
main = runWithOptions [] mainCGI
|
|
once :: (CGIMonad cgi, Read a, Show a) => cgi a -> cgi a |
Brackets a CGI action so that only its result is visible. Improves
efficiency by not executing the bracketed action after it has been performed
once. Use this for avoiding the inefficient buildup of long interaction logs.
|
|
forever :: CGIMonad cgi => cgi () -> cgi () |
Repeats a CGI action without saving its state so that the size of the
interaction log remains constant.
|
|
callWithCurrentHistory :: (CGIMonad cgi, Read a, Show a) => ((a -> cgi ()) -> a -> cgi ()) -> a -> cgi () |
Control operator for the CGI monad. Its specification is
callWithCurrentHistory (\backto x -> action x >>= backto) x
==
action x >>= callWithCurrentHistory (\backto x -> action x >>= backto)
However, callWithCurrentHistory is more efficient because it avoids the
buildup of long interaction logs by cutting back every time just before
action gets executed.
|
|
htell :: CGIMonad cgi => WithHTML x IO () -> cgi a |
Terminate script by sending a HTML page constructed by monadic argument.
|
|
askOffline :: CGIMonad cgi => WithHTML x cgi a -> (Element -> IO ()) -> cgi () |
Like ask, but passes the constructed HTML page to the elementAction
parameter. This function may send the page via Email or store it into a
file. Anyone loading this page in a browser can resume the interaction.
|
|
Links and Images
|
|
data Image |
|
|
internalImage |
|
|
externalImage |
|
|
makeImg :: Monad cgi => Image -> HTMLField cgi x y () |
Create an inline image.
|
|
makeRef |
:: (CGIMonad cgi, Monad m) | | => String | internal name of entity
| -> WithHTML x m () | body of the reference
| -> cgi (WithHTML y m ()) | | Create a hyperlink to internal entity.
|
|
|
makePopupRef |
:: CGIMonad cgi | | => String | name of popup window
| -> String | internal name of entity
| -> HTMLCons x y cgi () | | Create a popup hyperlink to internal entity.
|
|
|
makeA :: CGIMonad cgi => String -> String -> HTMLField cgi x y () |
Create hyperlink to internal entity /path?name.
|
|
backLink :: Monad m => HTMLCons x y m () |
Link to previous page in browser's history. Uses JavaScript.
|
|
hlink :: Monad m => URL -> HTMLCons x y m () |
Plain Hyperlink from an URL string.
|
|
popuplink :: Monad m => String -> URL -> HTMLCons x y m () |
Hyperlink that creates a named popup window from an URL string.
|
|
restart :: CGIMonad cgi => cgi () |
restart application.
|
|
Page Templates
|
|
standardPage :: Monad m => String -> WithHTML x m a -> WithHTML y m () |
create a standard XHTML page from a title string and body elements
|
|
htmlHeader :: Monad m => String -> WithHTML x m a -> WithHTML y m () |
create a standard XHTML page without heading from a title string and body elements
|
|
html :: Monad m => WithHTML x m a -> WithHTML y m () |
create a bare XHTML root tag with proper namespace attribute
|
|
cssPage :: Monad m => String -> String -> WithHTML x m a -> WithHTML y m () |
create a standard XHTML page from a title string, a stylesheet URL and body
elements
|
|
cssHeader :: Monad m => String -> String -> WithHTML x m a -> WithHTML y m () |
create an XHTML page with CSS reference but without heading from a title
string, the URL of the stylesheet and body elements
|
|
Forms and Widgets
|
|
type HTMLField cgi x y a = WithHTML x cgi () -> WithHTML y cgi a |
Every input widget maps the content generator for the widget (which may
produce HTML elements or attributes) to the content generator of the widget.
|
|
Form Creation
|
|
makeForm :: CGIMonad cgi => WithHTML x cgi a -> WithHTML y cgi () |
Wraps an HTML form around its arguments. All standard attributes are
computed and need not be supplied explicitly.
|
|
standardQuery :: CGIMonad cgi => String -> WithHTML x cgi a -> cgi () |
Convenient workhorse. Takes the title of a page and a monadic HTML value for
the contents of the page. Wraps the contents in a form so that input fields
and buttons may be used inside.
|
|
Form Submission
|
|
submit |
:: (CGIMonad cgi, InputHandle h) | | => h INVALID | input field handles to be validated and passed to callback action
| -> (h VALID -> cgi ()) | callback maps valid input handles to a CGI action
| -> HTMLField cgi x y () | returns a field so that attributes can be attached
| Create a submission button with attached action.
|
|
|
submit0 :: CGIMonad cgi => cgi () -> HTMLField cgi x y () |
Create a continuation button that takes no parameters.
|
|
defaultSubmit :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi x y () |
Create a submission button whose attached action is fired whenever the form
is submitted without explicitly clicking any submit button. This can happen if
an input field has an attached onclick=submit() action.
|
|
resetField :: CGIMonad cgi => HTMLField cgi x y (InputField () INVALID) |
Creates a reset button that clears all fields of a form.
|
|
activeInputField |
:: (CGIMonad cgi, Reason a, Read a) | | => (a -> cgi ()) | Function that maps input data to a CGI action.
| -> HTMLField cgi x y () | | Creates an input field that submits the field to the browser when data is
entered into this field.
|
|
|
activate :: (CGIMonad cgi, InputHandle (i a), HasValue i) => (a -> cgi ()) -> HTMLField cgi x y (i a INVALID) -> HTMLField cgi x y (i a INVALID) |
Attach a CGI action to the value returned by the input field. Activation
means that data is submitted as soon as it is entered.
|
|
submitLink :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons x y cgi () |
Create an ordinary link serving as a submission button.
|
|
submitLink0 :: CGIMonad cgi => cgi () -> HTMLCons x y cgi () |
Create a continuation link.
|
|
defaultSubmitLink :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons x y cgi () |
|
submitx :: DTree cgi x y -> HTMLField cgi x y () |
Create a submission button whose validation proceeds according to a decision
tree. Trees are built using dtleaf and dtnode.
|
|
data DTree cgi x y |
Abstract type of decisions trees. These trees provide structured validation.
|
|
|
dtleaf :: CGIMonad cgi => cgi () -> DTree cgi x y |
Create a leaf in a decision tree from a CGI action.
|
|
dtnode :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> DTree cgi x y) -> DTree cgi x y |
Create a node in a decision tree. Takes an invalid input field and a
continuation. Validates the input field and passes it to the continuation if
the validation was successful. The continuation can dispatch on the value of
the input field and produces a new decision tree.
|
|
Textual Input
|
|
inputField :: (CGIMonad cgi, Reason a, Read a) => HTMLField cgi x y (InputField a INVALID) |
Create a textual input field. Return type can be *anything* in class Reason
and Read.
|
|
textInputField :: CGIMonad cgi => HTMLField cgi x y (InputField String INVALID) |
Create a textual input field that returns the string entered. (Avoids having
to put quotes around a string.)
|
|
checkedTextInputField :: CGIMonad cgi => (Maybe String -> Maybe String) -> HTMLField cgi x y (InputField String INVALID) |
Creates a textual input field that takes a custom validation function.
|
|
passwordInputField :: (CGIMonad cgi, Reason a, Read a) => HTMLField cgi x y (InputField a INVALID) |
Like inputField but the characters are not echoed on the screen.
|
|
makeTextarea :: CGIMonad cgi => String -> HTMLField cgi x y (InputField String INVALID) |
Create a text area with a preset string.
|
|
Checkbox
|
|
checkboxInputField :: CGIMonad cgi => HTMLField cgi x y (InputField Bool INVALID) |
Creates a checkbox. Returns True if box was checked.
|
|
Button
|
|
makeButton :: CGIMonad cgi => HTMLField cgi x y (InputField Bool INVALID) |
Create a single button.
|
|
data RadioGroup a x |
Instances | |
|
|
radioGroup :: (CGIMonad cgi, Read a) => WithHTML x cgi (RadioGroup a INVALID) |
Create a handle for a new radio group. This handle is invisible on the screen!
|
|
radioButton :: (Show a, Monad cgi) => RadioGroup a INVALID -> a -> HTMLField cgi x y () |
Create a new radio button and attach it to an existing RadioGroup.
|
|
radioError :: CGIMonad cgi => RadioGroup a INVALID -> WithHTML x cgi () |
Create and place the error indicator for an existing RadioGroup. Becomes
visible only if no button of a radio group is pressed.
|
|
Image
|
|
imageField :: CGIMonad cgi => Image -> HTMLField cgi x y (InputField (Int, Int) INVALID) |
Create an input field from an image. Returns (x,y)
position clicked in the image.
|
|
Selection Box
|
|
selectMultiple |
:: (CGIMonad cgi, Eq a) | | => (a -> String) | function to display values of type a
| -> [a] | list of preselected entries
| -> [a] | list of all possible entries
| -> (Int, Int) | (min, max) number of fields that must be selected
| -> HTMLField cgi x y (InputField [a] INVALID) | | Create a selection box where multiple entries can be selected.
|
|
|
selectSingle |
:: (CGIMonad cgi, Eq a) | | => (a -> String) | function to display values of type a
| -> Maybe a | optional preselected value
| -> [a] | list of all possible values
| -> HTMLField cgi x y (InputField a INVALID) | | Create a selection box where exactly one entry can be selected.
|
|
|
selectBounded :: (CGIMonad cgi, Enum a, Bounded a, Read a, Show a, Eq a) => Maybe a -> HTMLField cgi x y (InputField a INVALID) |
Selection box for elements of a Bounded type. Argument is the optional
preselected value.
|
|
File
|
|
fileInputField :: CGIMonad cgi => HTMLField cgi x y (InputField FileReference INVALID) |
Creates a file input field. Returns a temporary FileReference. The
fileReferenceName of the result is *not* guaranteed to be persistent. The
application is responsible for filing it away at a safe place.
|
|
checkedFileInputField :: CGIMonad cgi => (Maybe FileReference -> Maybe FileReference) -> HTMLField cgi x y (InputField FileReference INVALID) |
Creates a file input field. Like fileInputField but has an additional
parameter for additional validation of the input.
|
|
Abstract Selection
|
|
as_rows :: AT -> Int |
|
as_cols :: AT -> Int |
|
table_io :: IO [[String]] -> CGI AT |
Transform an IO action that produces a table in list form into a CGI action
that returns an abstract table.
|
|
getText :: Monad m => AT -> Int -> Int -> WithHTML x m () |
Access abstract table by row and column. Produces a test node in the
document monad.
|
|
unAR :: AR -> [String] |
|
selectionGroup :: CGIMonad cgi => WithHTML y cgi (SelectionGroup AR INVALID) |
Create a selection group for a table. Selects one row.
|
|
selectionButton :: CGIMonad cgi => SelectionGroup AR INVALID -> AT -> Int -> HTMLField cgi x y () |
Create a selection button for an abstract table
|
|
selectionDisplay :: CGIMonad cgi => SelectionGroup AR INVALID -> AT -> Int -> (WithHTML x cgi () -> [WithHTML x cgi ()] -> WithHTML x cgi a) -> WithHTML x cgi a |
Create a labelled selection display for an abstract table. The display
function takes the button element and a list of text nodes corresponding to
the selected row and is expected to perform the layout.
|
|
choiceGroup :: CGIMonad cgi => WithHTML x cgi (SelectionGroup [AR] INVALID) |
Create a choice group for a table (0-*).
|
|
choiceButton :: CGIMonad cgi => SelectionGroup [AR] INVALID -> AT -> Int -> HTMLField cgi x y () |
Create one choice button for an abstract table
|
|
choiceDisplay :: CGIMonad cgi => SelectionGroup [AR] INVALID -> AT -> Int -> (WithHTML x cgi () -> [WithHTML x cgi ()] -> WithHTML x cgi a) -> WithHTML x cgi a |
Create a labelled choice display for an abstract table. The display
function takes the button element and a list of text nodes corresponding to
the selected row and is expected to perform the layout.
|
|
Handle Manipulation
|
|
data InputField a x |
Instances | |
|
|
data VALID |
|
|
data INVALID |
|
|
value :: HasValue i => i a VALID -> a |
extract a value from various kinds of input handles
|
|
class InputHandle h |
| Instances | |
|
|
class HasValue i where |
| Methods | value :: i a VALID -> a | extract a value from various kinds of input handles
|
| | Instances | |
|
|
data F0 x |
Constructors | | Instances | |
|
|
data F1 a x |
Constructors | | Instances | |
|
|
data F2 a b x |
Constructors | | Instances | |
|
|
data F3 a b c x |
Constructors | | Instances | |
|
|
data F4 a b c d x |
Constructors | F4 (a x) (b x) (c x) (d x) | |
| Instances | |
|
|
data F5 a b c d e x |
Constructors | F5 (a x) (b x) (c x) (d x) (e x) | |
| Instances | |
|
|
data F6 a b c d e f x |
Constructors | F6 (a x) (b x) (c x) (d x) (e x) (f x) | |
| Instances | |
|
|
data F7 a b c d e f g x |
Constructors | F7 (a x) (b x) (c x) (d x) (e x) (f x) (g x) | |
| Instances | |
|
|
data F8 a b c d e f g h x |
Constructors | F8 (a x) (b x) (c x) (d x) (e x) (f x) (g x) (h x) | |
| Instances | |
|
|
data FL a x |
FL is required to pass an unknown number of handles of the same
type need to the callback function in a form submission. The
handles need to be collected in a list and then wrapped in the FL data constructor
| Constructors | | Instances | |
|
|
data FA a b x |
FA comes handy when you want to tag an input handle with some extra
information, which is not itsefl an input handle and which is not validated
by a form submission. The tag is the first argument and the handle is the
second argument of the data constructor.
| Constructors | | Instances | |
|
|
Handle Concatenation
|
|
concatFields :: (Reason c, Read c) => InputField c INVALID -> InputField Text INVALID -> InputField c INVALID |
create a virtual input field from the concatenation of two input fields
|
|
concatFieldsWith :: (Reason c, Read c) => (String -> [String] -> String) -> InputField c INVALID -> [InputField Text INVALID] -> InputField c INVALID |
Create a virtual input field from the result of applying a function to two
input fields. Parsing is applied to the result of the function call.
|
|
Attribute Shortcuts
|
|
fieldSIZE :: Monad m => Int -> WithHTML x m () |
Create a SIZE attribute from an Int.
|
|
fieldMAXLENGTH :: Monad m => Int -> WithHTML x m () |
Create a MAXLENGTH attribute from an Int.
|
|
fieldVALUE :: (Monad m, Show a) => a -> WithHTML x m () |
Create a VALUE attribute from any Showable.
|
|
Advanced
|
|
Installing Translators
|
|
runWithHook :: CGIOptions -> ([String] -> CGI ()) -> CGI () -> IO () |
Variant of run where an additional argument cgigen specifies an action
taken when the script is invoked with a non-empty query string as in
script-name?query-string
|
|
docTranslator :: [FreeForm] -> ([String] -> CGI ()) -> [String] -> CGI () |
A translator is a function [String] -> CGI (). It takes the query string
of the URL (of type [String]) and translates it into a CGI
action. docTranslator docs next
takes a list of FreeForm documents and a next translator. It tries to
select a document by its ffName and falls through to the
next translator if no document matches.
|
|
lastTranslator :: [String] -> CGI () |
Terminates a sequence of translators.
|
|
Outputable Stuff
|
|
class CGIOutput a |
| Instances | |
|
|
data Status |
Constructors | Status | | statusCode :: Int | status code
| statusReason :: String | reason phrase
| statusContent :: (Maybe (WithHTML () IO ())) | more explanation
|
|
| Instances | |
|
|
newtype Location |
Constructors | | Instances | |
|
|
data FreeForm |
Constructors | FreeForm | | ffName :: String | internal name
| ffContentType :: String | MIME type
| ffRawContents :: String | contents as octet stream
|
|
| Instances | |
|
|
data FileReference |
Constructors | FileReference | | fileReferenceName :: FilePath | valid local filename where this file can be accessed
| fileReferenceContentType :: String | | fileReferenceExternalName :: String | |
|
| Instances | |
|
|
Predefined Types for Input Fields
|
|
newtype Text |
Arbitrary string data. No quotes required.
| Constructors | | Instances | |
|
|
newtype NonEmpty |
Non-empty strings.
| Constructors | | Instances | |
|
|
newtype AllDigits |
Non-empty strings of digits.
| Constructors | | Instances | |
|
|
newtype Phone |
Phone numbers.
| Constructors | | Instances | |
|
|
newtype EmailAddress |
Reads an email address according to RFC 2822
| Constructors | | Instances | |
|
|
newtype CreditCardNumber |
Reads a credit card number and performs Luhn check on it.
| Constructors | | Instances | |
|
|
data CreditCardExp |
Reads credit card expiration dates in format .
| Constructors | | Instances | |
|
|
newtype Password |
A Password is a string of length >= 8 with characters taken from at least
three of the four sets: lower case characters, upper case characters, digits,
and special characters.
| Constructors | | Instances | |
|
|
data Optional a |
Data type for transforming a field into an optional one. The Read syntax of
Absent is the empty string, whereas the Read syntax of Present a is just the
Read syntax of a. Analogously for Show.
| Constructors | | Instances | |
|
|
Lowlevel Stuff
|
|
data CGIOption |
Constructors | NoPort | do not include port number in generated URLs
| AutoPort | include automatically generated port number in generated URLs (default)
| Port Int | use this port number in generated URLs
| NoHttps | do not attempt to detect Https
| AutoHttps | autodetect Https by checking for port number 443 and env var HTTPS (default)
| FullURL | generate full URL including scheme, host, and port
| PartialURL | generate absolute path URL, only (default)
| SessionMode | | |
| Instances | |
|
|
type CGIOptions = [CGIOption] |
|
newtype URL |
Constructors | | Instances | |
|
|
Servlets
|
|
makeServlet :: CGI () -> CGIProgram |
Transform a CGI action into a servlet suitable for running from Marlow's web
server.
|
|
makeServletWithHook :: ([String] -> CGI ()) -> CGI () -> CGIProgram |
Like makeServlet with additional CGI generator as in runWithHook.
|
|
HTML and Style
|
|
module WASH.CGI.HTMLWrapper |
|
module WASH.CGI.Style |
|
Experimental Stuff
|
|
data FrameSet |
Abstract data type of frame set generators.
|
|
|
data FrameLayout |
Overall layout of a frame set: row-wise or column-wise.
| Constructors | | Instances | |
|
|
data FrameSpacing |
|
|
makeFrame |
:: CGIMonad cgi | | => WithHTML x IO () | additional attributes to frame
| -> cgi () | contents of the frame
| -> cgi FrameSet | returns HTML generator for the frame
| Create a single frame. Returns the assigned name of the frame.
|
|
|
makeFrameset :: CGIMonad cgi => FrameLayout -> [(FrameSpacing, cgi FrameSet)] -> cgi FrameSet |
Create a frameset, given a layout, its spacing, and its subframe(set)s.
|
|
framesetPage :: CGIMonad cgi => String -> cgi FrameSet -> cgi () |
Required wrapper for pages with frames. Takes a title and a FrameSet
generator and displays the page.
|
|
Produced by Haddock version 0.8 |