-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Form handling support for Yesod Web Framework
--   
--   Form handling support for Yesod Web Framework
@package yesod-form
@version 1.2.1.3

module Yesod.Form.Types

-- | The encoding type required by a form. The <tt>ToHtml</tt> instance
--   produces values that can be inserted directly into HTML.
data Enctype
UrlEncoded :: Enctype
Multipart :: Enctype

-- | A form can produce three different results: there was no data
--   available, the data was invalid, or there was a successful parse.
--   
--   The <a>Applicative</a> instance will concatenate the failure messages
--   in two <a>FormResult</a>s.
data FormResult a
FormMissing :: FormResult a
FormFailure :: [Text] -> FormResult a
FormSuccess :: a -> FormResult a
data FormMessage
MsgInvalidInteger :: Text -> FormMessage
MsgInvalidNumber :: Text -> FormMessage
MsgInvalidEntry :: Text -> FormMessage
MsgInvalidUrl :: Text -> FormMessage
MsgInvalidEmail :: Text -> FormMessage
MsgInvalidTimeFormat :: FormMessage
MsgInvalidHour :: Text -> FormMessage
MsgInvalidMinute :: Text -> FormMessage
MsgInvalidSecond :: Text -> FormMessage
MsgInvalidDay :: FormMessage
MsgCsrfWarning :: FormMessage
MsgValueRequired :: FormMessage
MsgInputNotFound :: Text -> FormMessage
MsgSelectNone :: FormMessage
MsgInvalidBool :: Text -> FormMessage
MsgBoolYes :: FormMessage
MsgBoolNo :: FormMessage
MsgDelete :: FormMessage
type Env = Map Text [Text]
type FileEnv = Map Text [FileInfo]
data Ints
IntCons :: Int -> Ints -> Ints
IntSingle :: Int -> Ints
type MForm sub master a = RWST (Maybe (Env, FileEnv), master, [Lang]) Enctype Ints (GHandler sub master) a
newtype AForm sub master a
AForm :: ((master, [Text]) -> Maybe (Env, FileEnv) -> Ints -> GHandler sub master (FormResult a, [FieldView sub master] -> [FieldView sub master], Ints, Enctype)) -> AForm sub master a
unAForm :: AForm sub master a -> (master, [Text]) -> Maybe (Env, FileEnv) -> Ints -> GHandler sub master (FormResult a, [FieldView sub master] -> [FieldView sub master], Ints, Enctype)
data Field sub master a
Field :: ([Text] -> [FileInfo] -> GHandler sub master (Either (SomeMessage master) (Maybe a))) -> FieldViewFunc sub master a -> Enctype -> Field sub master a
fieldParse :: Field sub master a -> [Text] -> [FileInfo] -> GHandler sub master (Either (SomeMessage master) (Maybe a))
fieldView :: Field sub master a -> FieldViewFunc sub master a
fieldEnctype :: Field sub master a -> Enctype
data FieldSettings master
FieldSettings :: SomeMessage master -> Maybe (SomeMessage master) -> Maybe Text -> Maybe Text -> [(Text, Text)] -> FieldSettings master
fsLabel :: FieldSettings master -> SomeMessage master
fsTooltip :: FieldSettings master -> Maybe (SomeMessage master)
fsId :: FieldSettings master -> Maybe Text
fsName :: FieldSettings master -> Maybe Text
fsAttrs :: FieldSettings master -> [(Text, Text)]
data FieldView sub master
FieldView :: Markup -> Maybe Markup -> Text -> GWidget sub master () -> Maybe Markup -> Bool -> FieldView sub master
fvLabel :: FieldView sub master -> Markup
fvTooltip :: FieldView sub master -> Maybe Markup
fvId :: FieldView sub master -> Text
fvInput :: FieldView sub master -> GWidget sub master ()
fvErrors :: FieldView sub master -> Maybe Markup
fvRequired :: FieldView sub master -> Bool
type FieldViewFunc sub master a = Text -> Text -> [(Text, Text)] -> Either Text a -> Bool -> GWidget sub master ()
instance Show a => Show (FormResult a)
instance Eq Enctype
instance Enum Enctype
instance Bounded Enctype
instance Show FormMessage
instance Eq FormMessage
instance Read FormMessage
instance IsString (FieldSettings a)
instance MonadLift (GHandler sub master) (AForm sub master)
instance Monoid a => Monoid (AForm sub master a)
instance Applicative (AForm sub master)
instance Functor (AForm sub master)
instance Show Ints
instance Monoid Enctype
instance ToMarkup Enctype
instance Monoid m => Monoid (FormResult m)
instance Applicative FormResult
instance Functor FormResult

module Yesod.Form.Functions

-- | Get a unique identifier.
newFormIdent :: MForm sub master Text
askParams :: MForm sub master (Maybe Env)
askFiles :: MForm sub master (Maybe FileEnv)
formToAForm :: MForm sub master (FormResult a, [FieldView sub master]) -> AForm sub master a
aFormToForm :: AForm sub master a -> MForm sub master (FormResult a, [FieldView sub master] -> [FieldView sub master])
mreq :: RenderMessage master FormMessage => Field sub master a -> FieldSettings master -> Maybe a -> MForm sub master (FormResult a, FieldView sub master)
mopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> MForm sub master (FormResult (Maybe a), FieldView sub master)
areq :: RenderMessage master FormMessage => Field sub master a -> FieldSettings master -> Maybe a -> AForm sub master a
aopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> AForm sub master (Maybe a)

-- | This function is used to both initially render a form and to later
--   extract results from it. Note that, due to CSRF protection and a few
--   other issues, forms submitted via GET and POST are slightly different.
--   As such, be sure to call the relevant function based on how the form
--   will be submitted, <i>not</i> the current request method.
--   
--   For example, a common case is displaying a form on a GET request and
--   having the form submit to a POST page. In such a case, both the GET
--   and POST handlers should use <a>runFormPost</a>.
runFormPost :: RenderMessage master FormMessage => (Markup -> MForm sub master (FormResult a, xml)) -> GHandler sub master ((FormResult a, xml), Enctype)
runFormPostNoToken :: (Markup -> MForm sub master (FormResult a, xml)) -> GHandler sub master ((FormResult a, xml), Enctype)
runFormGet :: (Markup -> MForm sub master a) -> GHandler sub master (a, Enctype)

-- | Similar to <a>runFormPost</a>, except it always ignore the currently
--   available environment. This is necessary in cases like a wizard UI,
--   where a single page will both receive and incoming form and produce a
--   new, blank form. For general usage, you can stick with
--   <tt>runFormPost</tt>.
generateFormPost :: RenderMessage master FormMessage => (Markup -> MForm sub master (FormResult a, xml)) -> GHandler sub master (xml, Enctype)
generateFormGet :: (Markup -> MForm sub master a) -> GHandler sub master (a, Enctype)
type FormRender sub master a = AForm sub master a -> Markup -> MForm sub master (FormResult a, GWidget sub master ())
renderTable :: FormRender sub master a

-- | render a field inside a div
renderDivs :: FormRender sub master a

-- | render a field inside a div, not displaying any label
renderDivsNoLabels :: FormRender sub master a

-- | Render a form using Bootstrap-friendly shamlet syntax.
--   
--   Sample Hamlet:
--   
--   <pre>
--   &lt;form .form-horizontal method=post action=@{ActionR} enctype=#{formEnctype}&gt;
--     &lt;fieldset&gt;
--       &lt;legend&gt;_{MsgLegend}
--       $case result
--         $of FormFailure reasons
--           $forall reason &lt;- reasons
--             &lt;div .alert .alert-error&gt;#{reason}
--         $of _
--       ^{formWidget}
--       &lt;div .form-actions&gt;
--         &lt;input .btn .primary type=submit value=_{MsgSubmit}&gt;
--   </pre>
renderBootstrap :: FormRender sub master a
check :: RenderMessage master msg => (a -> Either msg a) -> Field sub master a -> Field sub master a

-- | Return the given error message if the predicate is false.
checkBool :: RenderMessage master msg => (a -> Bool) -> msg -> Field sub master a -> Field sub master a
checkM :: RenderMessage master msg => (a -> GHandler sub master (Either msg a)) -> Field sub master a -> Field sub master a

-- | Same as <a>checkM</a>, but modifies the datatype.
--   
--   In order to make this work, you must provide a function to convert
--   back from the new datatype to the old one (the second argument to this
--   function).
--   
--   Since 1.1.2
checkMMap :: RenderMessage master msg => (a -> GHandler sub master (Either msg b)) -> (b -> a) -> Field sub master a -> Field sub master b

-- | Deprecated synonym for <a>checkMMap</a>.
--   
--   Since 1.1.1

-- | <i>Deprecated: Please use checkMMap instead </i>
checkMMod :: RenderMessage master msg => (a -> GHandler sub master (Either msg b)) -> (b -> a) -> Field sub master a -> Field sub master b

-- | Allows you to overwrite the error message on parse error.
customErrorMessage :: SomeMessage master -> Field sub master a -> Field sub master a

-- | Generate a <a>FieldSettings</a> from the given label.
fieldSettingsLabel :: RenderMessage master msg => msg -> FieldSettings master

-- | Generate an <a>AForm</a> that gets its value from the given action.
aformM :: GHandler sub master a -> AForm sub master a

-- | A helper function for creating custom fields.
--   
--   This is intended to help with the common case where a single input
--   value is required, such as when parsing a text field.
--   
--   Since 1.1
parseHelper :: (Monad m, RenderMessage master FormMessage) => (Text -> Either FormMessage a) -> [Text] -> [FileInfo] -> m (Either (SomeMessage master) (Maybe a))

module Yesod.Form.Input
newtype FormInput sub master a
FormInput :: (master -> [Text] -> Env -> FileEnv -> GHandler sub master (Either DText a)) -> FormInput sub master a
unFormInput :: FormInput sub master a -> master -> [Text] -> Env -> FileEnv -> GHandler sub master (Either DText a)
runInputGet :: FormInput sub master a -> GHandler sub master a
runInputPost :: FormInput sub master a -> GHandler sub master a
ireq :: RenderMessage master FormMessage => Field sub master a -> Text -> FormInput sub master a
iopt :: Field sub master a -> Text -> FormInput sub master (Maybe a)
instance Applicative (FormInput sub master)
instance Functor (FormInput sub master)

module Yesod.Form.I18n.English
englishFormMessage :: FormMessage -> Text

module Yesod.Form.Fields
data FormMessage
MsgInvalidInteger :: Text -> FormMessage
MsgInvalidNumber :: Text -> FormMessage
MsgInvalidEntry :: Text -> FormMessage
MsgInvalidUrl :: Text -> FormMessage
MsgInvalidEmail :: Text -> FormMessage
MsgInvalidTimeFormat :: FormMessage
MsgInvalidHour :: Text -> FormMessage
MsgInvalidMinute :: Text -> FormMessage
MsgInvalidSecond :: Text -> FormMessage
MsgInvalidDay :: FormMessage
MsgCsrfWarning :: FormMessage
MsgValueRequired :: FormMessage
MsgInputNotFound :: Text -> FormMessage
MsgSelectNone :: FormMessage
MsgInvalidBool :: Text -> FormMessage
MsgBoolYes :: FormMessage
MsgBoolNo :: FormMessage
MsgDelete :: FormMessage
defaultFormMessage :: FormMessage -> Text
textField :: RenderMessage master FormMessage => Field sub master Text
passwordField :: RenderMessage master FormMessage => Field sub master Text
textareaField :: RenderMessage master FormMessage => Field sub master Textarea
hiddenField :: (PathPiece p, RenderMessage master FormMessage) => Field sub master p
intField :: (Integral i, RenderMessage master FormMessage) => Field sub master i
dayField :: RenderMessage master FormMessage => Field sub master Day
timeField :: RenderMessage master FormMessage => Field sub master TimeOfDay
htmlField :: RenderMessage master FormMessage => Field sub master Html
emailField :: RenderMessage master FormMessage => Field sub master Text
searchField :: RenderMessage master FormMessage => AutoFocus -> Field sub master Text
type AutoFocus = Bool
urlField :: RenderMessage master FormMessage => Field sub master Text
doubleField :: RenderMessage master FormMessage => Field sub master Double
parseDate :: String -> Either FormMessage Day
parseTime :: Text -> Either FormMessage TimeOfDay

-- | A newtype wrapper around a <a>Text</a> that converts newlines to HTML
--   br-tags.
newtype Textarea
Textarea :: Text -> Textarea
unTextarea :: Textarea -> Text
boolField :: RenderMessage master FormMessage => Field sub master Bool

-- | While the default <tt><a>boolField</a></tt> implements a radio button
--   so you can differentiate between an empty response (Nothing) and a no
--   response (Just False), this simpler checkbox field returns an empty
--   response as Just False.
--   
--   Note that this makes the field always optional.
checkBoxField :: RenderMessage m FormMessage => Field s m Bool
fileField :: RenderMessage master FormMessage => Field sub master FileInfo
fileAFormReq :: RenderMessage master FormMessage => FieldSettings master -> AForm sub master FileInfo
fileAFormOpt :: RenderMessage master FormMessage => FieldSettings master -> AForm sub master (Maybe FileInfo)
selectField :: (Eq a, RenderMessage master FormMessage) => GHandler sub master (OptionList a) -> Field sub master a
selectFieldList :: (Eq a, RenderMessage master FormMessage, RenderMessage master msg) => [(msg, a)] -> Field sub master a
radioField :: (Eq a, RenderMessage master FormMessage) => GHandler sub master (OptionList a) -> Field sub master a
radioFieldList :: (Eq a, RenderMessage master FormMessage, RenderMessage master msg) => [(msg, a)] -> Field sub master a
multiSelectField :: (Eq a, RenderMessage master FormMessage) => GHandler sub master (OptionList a) -> Field sub master [a]
multiSelectFieldList :: (Eq a, RenderMessage master FormMessage, RenderMessage master msg) => [(msg, a)] -> Field sub master [a]
data Option a
Option :: Text -> a -> Text -> Option a
optionDisplay :: Option a -> Text
optionInternalValue :: Option a -> a
optionExternalValue :: Option a -> Text
data OptionList a
OptionList :: [Option a] -> (Text -> Maybe a) -> OptionList a
olOptions :: OptionList a -> [Option a]
olReadExternal :: OptionList a -> Text -> Maybe a
mkOptionList :: [Option a] -> OptionList a
optionsPersist :: (YesodPersist master, PersistEntity a, PersistQuery (YesodPersistBackend master (GHandler sub master)), PathPiece (Key a), PersistEntityBackend a ~ PersistMonadBackend (YesodPersistBackend master (GHandler sub master)), RenderMessage master msg) => [Filter a] -> [SelectOpt a] -> (a -> msg) -> GHandler sub master (OptionList (Entity a))
optionsPairs :: RenderMessage master msg => [(msg, a)] -> GHandler sub master (OptionList a)
optionsEnum :: (Show a, Enum a, Bounded a) => GHandler sub master (OptionList a)
instance Show Textarea
instance Read Textarea
instance Eq Textarea
instance PersistField Textarea
instance Ord Textarea
instance ToMarkup Textarea

module Yesod.Form.Class
class ToField a master
toField :: (ToField a master, RenderMessage master FormMessage) => FieldSettings master -> Maybe a -> AForm sub master a
instance ToField (Maybe Textarea) master
instance ToField Textarea master
instance ToField (Maybe Html) master
instance ToField Html master
instance ToField (Maybe TimeOfDay) master
instance ToField TimeOfDay master
instance ToField (Maybe Day) master
instance ToField Day master
instance ToField (Maybe Double) master
instance ToField Double master
instance ToField (Maybe Int64) master
instance ToField Int64 master
instance ToField (Maybe Int) master
instance ToField Int master
instance ToField (Maybe Text) master
instance ToField Text master

module Yesod.Form.MassInput
inputList :: (m ~ GHandler sub master, xml ~ GWidget sub master (), RenderMessage master FormMessage) => Html -> ([[FieldView sub master]] -> xml) -> (Maybe a -> AForm sub master a) -> (Maybe [a] -> AForm sub master [a])
massDivs :: [[FieldView sub master]] -> GWidget sub master ()
massTable :: [[FieldView sub master]] -> GWidget sub master ()

module Yesod.Form.I18n.Portuguese
portugueseFormMessage :: FormMessage -> Text

module Yesod.Form.I18n.Swedish
swedishFormMessage :: FormMessage -> Text

module Yesod.Form.I18n.German
germanFormMessage :: FormMessage -> Text

module Yesod.Form.I18n.French
frenchFormMessage :: FormMessage -> Text

module Yesod.Form.I18n.Norwegian
norwegianBokmålFormMessage :: FormMessage -> Text

module Yesod.Form.I18n.Japanese
japaneseFormMessage :: FormMessage -> Text


-- | Parse forms (and query strings).
module Yesod.Form


-- | Some fields spiced up with jQuery UI.
module Yesod.Form.Jquery
class YesodJquery a where urlJqueryJs _ = Right "http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js" urlJqueryUiJs _ = Right "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" urlJqueryUiCss _ = Right $ googleHostedJqueryUiCss "cupertino" urlJqueryUiDateTimePicker _ = Right "http://github.com/gregwebs/jquery.ui.datetimepicker/raw/master/jquery.ui.datetimepicker.js"
urlJqueryJs :: YesodJquery a => a -> Either (Route a) Text
urlJqueryUiJs :: YesodJquery a => a -> Either (Route a) Text
urlJqueryUiCss :: YesodJquery a => a -> Either (Route a) Text
urlJqueryUiDateTimePicker :: YesodJquery a => a -> Either (Route a) Text
jqueryDayField :: (RenderMessage master FormMessage, YesodJquery master) => JqueryDaySettings -> Field sub master Day
jqueryAutocompleteField :: (RenderMessage master FormMessage, YesodJquery master) => Route master -> Field sub master Text

-- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.
googleHostedJqueryUiCss :: Text -> Text
data JqueryDaySettings
JqueryDaySettings :: Bool -> Bool -> String -> Either Int (Int, Int) -> JqueryDaySettings
jdsChangeMonth :: JqueryDaySettings -> Bool
jdsChangeYear :: JqueryDaySettings -> Bool
jdsYearRange :: JqueryDaySettings -> String
jdsNumberOfMonths :: JqueryDaySettings -> Either Int (Int, Int)

-- | A class for types with a default value.
class Default a
def :: Default a => a
instance Default JqueryDaySettings


-- | Provide the user with a rich text editor.
module Yesod.Form.Nic
class Yesod a => YesodNic a where urlNicEdit _ = Right "http://js.nicedit.com/nicEdit-latest.js"
urlNicEdit :: YesodNic a => a -> Either (Route a) Text
nicHtmlField :: YesodNic master => Field sub master Html
