module WASH.CGI.GuaranteedCGI ( -- * Basics CGI, CGIMonad , ask, tell, io, run , once, forever, callWithCurrentHistory, htell, askOffline -- * Links and Images , Image, internalImage, externalImage, makeImg, makeRef, makePopupRef, makeA , backLink, hlink, popuplink, restart -- * Page Templates , standardPage, htmlHeader, WASH.CGI.GuaranteedCGI.html, cssPage, cssHeader -- * Forms and Widgets , HTMLField -- ** Form Creation , makeForm, standardQuery -- ** Form Submission , submit, submit0, defaultSubmit, resetField, activeInputField, activate , submitLink, submitLink0, defaultSubmitLink , submitx, DTree, dtleaf, dtnode -- ** Textual Input , inputField, textInputField, checkedTextInputField, passwordInputField, makeTextarea -- ** Checkbox , checkboxInputField -- ** Button , makeButton, RadioGroup, radioGroup, radioButton, radioError -- ** Image , imageField -- ** Selection Box , selectMultiple, selectSingle, selectBounded -- ** File , fileInputField, checkedFileInputField -- ** Handle Manipulation , InputField, VALID, INVALID, value, InputHandle, HasValue , F0 (F0), F1 (F1), F2 (F2), F3 (F3), F4 (F4), F5 (F5), F6 (F6), F8 (F8) , FL (FL), FA (FA) -- ** Attribute Shortcuts , fieldSIZE, fieldMAXLENGTH, fieldVALUE -- * Advanced -- ** Installing Translators , runWithHook, docTranslator, lastTranslator -- ** Outputable Stuff , CGIOutput, Status(..), Location(..), FreeForm(..), FileReference (..) -- ** Predefined Types for Input Fields , Text(..), NonEmpty(..), AllDigits(..), Phone(..) , EmailAddress(..), CreditCardNumber(..), CreditCardExp(..) , Password(..), Optional(..) -- ** Lowlevel Options , CGIOption (..), CGIOptions, URL (..) -- ** Servlets , makeServlet, makeServletWithHook -- * HTML and Style , module WASH.HTML.HTMLMonad98 , module WASH.CGI.Style -- * Experimental Stuff , FrameSet, FrameLayout(..), FrameSpacing(..), makeFrame, makeFrameset, framesetPage ) where import WASH.CGI.CGIMonad (CGIMonad()) import WASH.CGI.CGITypes import WASH.CGI.Fields import WASH.CGI.Style import qualified WASH.CGI.CGIInternals as CGIInternals import WASH.CGI.CGI ( CGI , tell, io, run, once, forever, callWithCurrentHistory , Image, internalImage, externalImage , HTMLField, RadioGroup, radioGroup, InputField, VALID, INVALID, value , InputHandle, HasValue , F0 (F0), F1 (F1), F2 (F2), F3 (F3), F4 (F4), F5 (F5), F6 (F6), F8 (F8) , FL (FL), FA (FA) , DTree, dtleaf, dtnode , runWithHook, docTranslator, lastTranslator , CGIOutput, Status(..), Location(..), FreeForm(..), FileReference (..) , Text(..), NonEmpty(..), AllDigits(..) , EmailAddress(..), CreditCardNumber(..), CreditCardExp(..) , CGIOption(..), CGIOptions , makeServlet, makeServletWithHook , FrameSet, FrameLayout(..), FrameSpacing(..) , makeFrameset, framesetPage , Style(..) ) import WASH.HTML.HTMLMonad98 hiding (html) import qualified WASH.CGI.CGI as CGI ask :: (CGIMonad cgi) => WithHTML DOCUMENT cgi a -> cgi () ask = CGI.ask htell :: (CGIMonad cgi) => WithHTML HTML IO () -> cgi a htell = CGI.htell askOffline :: (CGIMonad cgi) => WithHTML HTML cgi a -> (Element -> IO ()) -> cgi () askOffline = CGI.askOffline makeImg :: (Monad cgi, AdmitChildIMG y) => Image -> HTMLField cgi IMG y () makeImg = CGI.makeImg makeRef :: (CGIMonad cgi, AdmitChildA y, Monad m) => String -> WithHTML A m () -> cgi (WithHTML y m ()) makeRef = CGI.makeRef makeA :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y () makeA = CGI.makeA makePopupRef :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y () makePopupRef = CGI.makePopupRef backLink :: (AdmitChildA x, Monad m) => HTMLCons A x m () backLink = CGI.backLink hlink :: (AdmitChildA y, Monad m) => URL -> HTMLCons A y m () hlink = CGI.hlink popuplink :: (AdmitChildA y, Monad m) => String -> URL -> HTMLCons A y m () popuplink = CGI.popuplink restart :: CGI () restart = CGI.restart makeForm :: (AdmitChildFORM y) => WithHTML FORM CGI a -> WithHTML y CGI () makeForm = CGI.makeForm standardQuery :: String -> WithHTML FORM CGI a -> CGI () standardQuery = CGI.standardQuery submit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y () submit = CGI.submit submit0 :: (CGIMonad cgi, AdmitChildINPUT y) => cgi () -> HTMLField cgi INPUT y () submit0 = CGI.submit0 defaultSubmit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y () defaultSubmit = CGI.defaultSubmit submitLink :: (CGIMonad cgi, AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons A y cgi () submitLink = CGI.submitLink submitLink0 :: (AdmitChildA y) => CGI () -> HTMLCons A y CGI () submitLink0 = CGI.submitLink0 defaultSubmitLink :: (AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> CGI ()) -> HTMLCons A y CGI () defaultSubmitLink = CGI.defaultSubmitLink submitx :: (AdmitChildINPUT y) => DTree cgi INPUT y -> HTMLField cgi INPUT y () submitx = CGI.submitx resetField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField () INVALID) resetField = CGI.resetField activeInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => (a -> cgi ()) -> HTMLField cgi INPUT y () activeInputField = CGI.activeInputField 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) activate = CGI.activate inputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID) inputField = CGI.inputField checkedTextInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe String -> Maybe String) -> HTMLField cgi INPUT y (InputField String INVALID) checkedTextInputField = CGI.checkedTextInputField textInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField String INVALID) textInputField = CGI.textInputField passwordInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID) passwordInputField = CGI.passwordInputField makeTextarea :: (CGIMonad cgi, AdmitChildTEXTAREA y) => String -> HTMLField cgi TEXTAREA y (InputField String INVALID) makeTextarea = CGI.makeTextarea checkboxInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID) checkboxInputField = CGI.checkboxInputField makeButton :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID) makeButton = CGI.makeButton radioButton :: (CGIMonad cgi, AdmitChildINPUT y, Show a) => RadioGroup a INVALID -> a -> HTMLField cgi INPUT y () radioButton = CGI.radioButton radioError :: (CGIMonad cgi, AdmitChildIMG x) => RadioGroup a INVALID -> WithHTML x cgi () radioError = CGI.radioError imageField :: (CGIMonad cgi, AdmitChildINPUT y) => Image -> HTMLField cgi INPUT y (InputField (Int, Int) INVALID) imageField = CGI.imageField selectMultiple :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> [a] -> [a] -> (Int, Int) -> HTMLField cgi SELECT y (InputField [a] INVALID) selectMultiple = CGI.selectMultiple selectSingle :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> Maybe a -> [a] -> HTMLField cgi SELECT y (InputField a INVALID) selectSingle = CGI.selectSingle selectBounded :: (CGIMonad cgi, AdmitChildSELECT y, Enum a, Bounded a, Read a, Show a, Eq a) => Maybe a -> HTMLField cgi SELECT y (InputField a INVALID) selectBounded = CGI.selectBounded checkedFileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe FileReference -> Maybe FileReference) -> HTMLField cgi INPUT y (InputField FileReference INVALID) checkedFileInputField = CGI.checkedFileInputField fileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField FileReference INVALID) fileInputField = CGI.fileInputField fieldSIZE :: (Monad m, AdmitAttrSIZE e, AttrValueSIZE v) => v -> WithHTML e m () fieldSIZE = WASH.HTML.HTMLMonad98.atSIZE fieldMAXLENGTH :: (Monad m, AdmitAttrMAXLENGTH e, AttrValueMAXLENGTH v) => v -> WithHTML e m () fieldMAXLENGTH = WASH.HTML.HTMLMonad98.atMAXLENGTH fieldVALUE :: (Monad m, AdmitAttrVALUE e, AttrValueVALUE v) => v -> WithHTML e m () fieldVALUE = WASH.HTML.HTMLMonad98.atVALUE -- module HTMLWrapper standardPage :: (AdmitChildHTML y, Monad m) => String -> WithHTML BODY m a -> WithHTML y m () standardPage = CGI.standardPage htmlHeader :: (AdmitChildHTML y, Monad m) => String -> WithHTML HTML m a -> WithHTML y m () htmlHeader = CGI.htmlHeader html :: (Monad m, AdmitChildHTML y) => WithHTML HTML m a -> WithHTML y m () html = CGI.html cssHeader :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML HTML m a -> WithHTML y m () cssHeader = CGI.cssHeader cssPage :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML BODY m a -> WithHTML y m () cssPage = CGI.cssPage -- module Style using :: (AdmitAttrSTYLE x, Monad m) => Style -> (WithHTML x m b -> c) -- ^a field constructor, typically 'HTMLField' -> WithHTML x m b -> c -- ^styled version of this constructor using = CGI.using makeFrame :: WithHTML FRAME IO () -> CGI () -> CGI FrameSet makeFrame = CGI.makeFrame