|
|
|
|
|
|
Synopsis |
|
data CGI a | | class Monad cgi => CGIMonad cgi | | ask :: CGIMonad cgi => WithHTML DOCUMENT cgi a -> cgi () | | tell :: (CGIMonad cgi, CGIOutput a) => a -> cgi () | | io :: (Read a, Show a) => IO a -> CGI a | | run :: 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 HTML IO () -> cgi a | | askOffline :: CGIMonad cgi => WithHTML HTML 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, AdmitChildIMG y) => Image -> HTMLField cgi IMG y () | | makeRef :: (CGIMonad cgi, AdmitChildA y, Monad m) => String -> WithHTML A m () -> cgi (WithHTML y m ()) | | makePopupRef :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y () | | makeA :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y () | | backLink :: (AdmitChildA x, Monad m) => HTMLCons A x m () | | hlink :: (AdmitChildA y, Monad m) => URL -> HTMLCons A y m () | | popuplink :: (AdmitChildA y, Monad m) => String -> URL -> HTMLCons A y m () | | restart :: CGI () | | standardPage :: (AdmitChildHTML y, Monad m) => String -> WithHTML BODY m a -> WithHTML y m () | | htmlHeader :: (AdmitChildHTML y, Monad m) => String -> WithHTML HTML m a -> WithHTML y m () | | html :: (Monad m, AdmitChildHTML y) => WithHTML HTML m a -> WithHTML y m () | | cssPage :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML BODY m a -> WithHTML y m () | | cssHeader :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML HTML m a -> WithHTML y m () | | type HTMLField cgi x y a = WithHTML x cgi () -> WithHTML y cgi a | | makeForm :: AdmitChildFORM y => WithHTML FORM CGI a -> WithHTML y CGI () | | standardQuery :: String -> WithHTML FORM CGI a -> CGI () | | submit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y () | | submit0 :: (CGIMonad cgi, AdmitChildINPUT y) => cgi () -> HTMLField cgi INPUT y () | | defaultSubmit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y () | | resetField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField () INVALID) | | activeInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => (a -> cgi ()) -> HTMLField cgi INPUT y () | | activate :: (CGIMonad cgi, InputHandle (i a), HasValue i, AdmitChildINPUT y) => (a -> cgi ()) -> HTMLField cgi INPUT y (i a INVALID) -> HTMLField cgi INPUT y (i a INVALID) | | submitLink :: (CGIMonad cgi, AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons A y cgi () | | submitLink0 :: AdmitChildA y => CGI () -> HTMLCons A y CGI () | | defaultSubmitLink :: (AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> CGI ()) -> HTMLCons A y CGI () | | submitx :: AdmitChildINPUT y => DTree cgi INPUT y -> HTMLField cgi INPUT 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, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID) | | textInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField String INVALID) | | checkedTextInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe String -> Maybe String) -> HTMLField cgi INPUT y (InputField String INVALID) | | passwordInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID) | | makeTextarea :: (CGIMonad cgi, AdmitChildTEXTAREA y) => String -> HTMLField cgi TEXTAREA y (InputField String INVALID) | | checkboxInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID) | | makeButton :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID) | | data RadioGroup a x | | radioGroup :: (CGIMonad cgi, Read a) => WithHTML x cgi (RadioGroup a INVALID) | | radioButton :: (CGIMonad cgi, AdmitChildINPUT y, Show a) => RadioGroup a INVALID -> a -> HTMLField cgi INPUT y () | | radioError :: (CGIMonad cgi, AdmitChildIMG x) => RadioGroup a INVALID -> WithHTML x cgi () | | imageField :: (CGIMonad cgi, AdmitChildINPUT y) => Image -> HTMLField cgi INPUT y (InputField (Int, Int) INVALID) | | selectMultiple :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> [a] -> [a] -> (Int, Int) -> HTMLField cgi SELECT y (InputField [a] INVALID) | | selectSingle :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> Maybe a -> [a] -> HTMLField cgi SELECT y (InputField a INVALID) | | selectBounded :: (CGIMonad cgi, AdmitChildSELECT y, Enum a, Bounded a, Read a, Show a, Eq a) => Maybe a -> HTMLField cgi SELECT y (InputField a INVALID) | | fileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField FileReference INVALID) | | checkedFileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe FileReference -> Maybe FileReference) -> HTMLField cgi INPUT y (InputField FileReference INVALID) | | data InputField a x | | data VALID | | data INVALID | | 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 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) | | fieldSIZE :: (Monad m, AdmitAttrSIZE e, AttrValueSIZE v) => v -> WithHTML e m () | | fieldMAXLENGTH :: (Monad m, AdmitAttrMAXLENGTH e, AttrValueMAXLENGTH v) => v -> WithHTML e m () | | fieldVALUE :: (Monad m, AdmitAttrVALUE e, AttrValueVALUE v) => v -> WithHTML e 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.HTML.HTMLMonad98 | | module WASH.CGI.Style | | data FrameSet | | | | | | makeFrame :: WithHTML FRAME IO () -> CGI () -> CGI FrameSet | | makeFrameset :: CGIMonad cgi => FrameLayout -> [(FrameSpacing, cgi FrameSet)] -> cgi FrameSet | | framesetPage :: CGIMonad cgi => String -> cgi FrameSet -> cgi () |
|
|
|
Basics
|
|
|
|
|
|
|
|
|
|
Terminates script by sending its argument to the browser.
|
|
|
Safe embedding of an IO action into the CGI monad. Intentionally not
parameterized ver its monad to avoid its use inside of transactions.
|
|
|
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
|
|
|
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.
|
|
|
Repeats a CGI action without saving its state so that the size of the
interaction log remains constant.
|
|
|
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.
|
|
|
|
|
|
Links and Images
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Page Templates
|
|
|
|
|
|
|
|
|
|
|
|
Forms and Widgets
|
|
|
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
|
|
|
|
|
|
Form Submission
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abstract type of decisions trees. These trees provide structured validation.
|
|
|
|
Create a leaf in a decision tree from a CGI action.
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
Checkbox
|
|
|
|
Button
|
|
|
|
|
|
|
Create a handle for a new radio group. This handle is invisible on the screen!
|
|
|
|
|
|
Image
|
|
|
|
Selection Box
|
|
|
|
|
|
|
|
File
|
|
|
|
|
|
Handle Manipulation
|
|
|
|
|
|
|
|
|
|
|
|
| Methods | | extract a value from various kinds of input handles
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Constructors | F4 (a x) (b x) (c x) (d x) | |
|
|
|
|
Constructors | F5 (a x) (b x) (c x) (d x) (e x) | |
|
|
|
|
Constructors | F6 (a x) (b x) (c x) (d x) (e x) (f x) | |
|
|
|
data F8 a b c d e f g h x | Source |
|
Constructors | F8 (a x) (b x) (c x) (d x) (e x) (f x) (g x) (h 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 | |
|
|
|
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 | |
|
|
Attribute Shortcuts
|
|
|
|
|
|
|
|
Advanced
|
|
Installing Translators
|
|
|
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
|
|
|
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.
|
|
|
Terminates a sequence of translators.
|
|
Outputable Stuff
|
|
|
|
|
|
|
|
|
|
|
|
Constructors | FreeForm | | ffName :: String | internal name
| ffContentType :: String | MIME type
| ffRawContents :: String | contents as octet stream
|
|
|
|
|
|
Constructors | FileReference | | fileReferenceName :: FilePath | valid local filename where this file can be accessed
| fileReferenceContentType :: String | | fileReferenceExternalName :: String | |
|
|
|
|
Predefined Types for Input Fields
|
|
|
Arbitrary string data. No quotes required.
| Constructors | |
|
|
|
Non-empty strings.
| Constructors | |
|
|
|
Non-empty strings of digits.
| Constructors | |
|
|
|
Phone numbers.
| Constructors | |
|
|
|
Reads an email address according to RFC 2822
| Constructors | |
|
|
newtype CreditCardNumber | Source |
|
Reads a credit card number and performs Luhn check on it.
| Constructors | |
|
|
|
Reads credit card expiration dates in format .
| Constructors | |
|
|
|
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 | |
|
|
|
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 | |
|
|
Lowlevel Options
|
|
|
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 | | |
|
|
|
|
|
|
|
|
Servlets
|
|
|
Transform a CGI action into a servlet suitable for running from Marlow's web
server.
|
|
|
Like makeServlet with additional CGI generator as in runWithHook.
|
|
HTML and Style
|
|
module WASH.HTML.HTMLMonad98 |
|
module WASH.CGI.Style |
|
Experimental Stuff
|
|
|
Abstract data type of frame set generators.
|
|
|
|
Overall layout of a frame set: row-wise or column-wise.
| Constructors | |
|
|
|
|
|
|
|
|
Create a frameset, given a layout, its spacing, and its subframe(set)s.
|
|
|
Required wrapper for pages with frames. Takes a title and a FrameSet
generator and displays the page.
|
|
Produced by Haddock version 2.6.0 |