diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index 8173e789..da9a02ec 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -4,6 +4,11 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE CPP #-} +-- | Field functions allow you to easily create and validate forms, cleanly handling the uncertainty of parsing user input. +-- +-- When possible, the field functions use a specific input type (e.g. "number"), allowing supporting browsers to validate the input before form submission. Browsers can also improve usability with this information; for example, mobile browsers might present a specialized keyboard for an input of type "email" or "number". +-- +-- See the Yesod book for a broader overview of forms in Yesod. module Yesod.Form.Fields ( -- * i18n FormMessage (..) @@ -99,7 +104,7 @@ import Yesod.Persist.Core defaultFormMessage :: FormMessage -> Text defaultFormMessage = englishFormMessage - +-- | Creates a input with @type="number"@ and @step=1@. intField :: (Monad m, Integral i, RenderMessage (HandlerSite m) FormMessage) => Field m i intField = Field { fieldParse = parseHelper $ \s -> @@ -117,6 +122,7 @@ $newline never showVal = either id (pack . showI) showI x = show (fromIntegral x :: Integer) +-- | Creates a input with @type="number"@ and @step=any@. doubleField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Double doubleField = Field { fieldParse = parseHelper $ \s -> @@ -132,6 +138,9 @@ $newline never } where showVal = either id (pack . show) +-- | Creates an input with @type="date"@, validating the input using the 'parseDate' function. +-- +-- Add the @time@ package and import the "Data.Time.Calendar" module to use this function. dayField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Day dayField = Field { fieldParse = parseHelper $ parseDate . unpack @@ -143,6 +152,9 @@ $newline never } where showVal = either id (pack . show) +-- | Parses time from a [H]H:MM[:SS] format, with an optional AM or PM (if not given, AM is assumed for compatibility with a 24 hour clock system). MTODO: should this use input type="time" ? +-- +-- Add the @time@ package and import the "Data.Time.LocalTime" module to use this function. timeField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay timeField = Field { fieldParse = parseHelper parseTime @@ -159,6 +171,7 @@ $newline never where fullSec = fromInteger $ floor $ todSec tod +-- | Creates a @\