From 07090ccb7e25bdda5b8d792893cea16d2bbdf446 Mon Sep 17 00:00:00 2001 From: Maximilian Tagher Date: Mon, 24 Nov 2014 14:11:25 -0500 Subject: [PATCH] Document Fields.hs WIP --- yesod-form/Yesod/Form/Fields.hs | 39 ++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index 8173e789..6d470135 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -4,6 +4,9 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE CPP #-} +-- | Functions for creating inputs +-- +-- 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". module Yesod.Form.Fields ( -- * i18n FormMessage (..) @@ -99,7 +102,7 @@ import Yesod.Persist.Core defaultFormMessage :: FormMessage -> Text defaultFormMessage = englishFormMessage - +-- | Creates a input with @type="number"@ to accept integers. intField :: (Monad m, Integral i, RenderMessage (HandlerSite m) FormMessage) => Field m i intField = Field { fieldParse = parseHelper $ \s -> @@ -117,6 +120,7 @@ $newline never showVal = either id (pack . showI) showI x = show (fromIntegral x :: Integer) +-- | Creates a input with @type="number"@ to accept any number. doubleField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Double doubleField = Field { fieldParse = parseHelper $ \s -> @@ -132,6 +136,8 @@ $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 +149,9 @@ $newline never } where showVal = either id (pack . show) +-- | MTODO: 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). +-- | Creates an input with 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 +168,7 @@ $newline never where fullSec = fromInteger $ floor $ todSec tod +-- | Creates a @\