{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PackageImports #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE CPP #-} -- | Parse forms (and query strings). module Yesod.Form ( -- * Data types GForm , FormResult (..) , Enctype (..) , FormFieldSettings (..) , Textarea (..) , FieldInfo (..) -- ** Utilities , formFailures -- * Type synonyms , Form , Formlet , FormField , FormletField , FormInput -- * Unwrapping functions , generateForm , runFormGet , runFormMonadGet , runFormPost , runFormPostNoNonce , runFormMonadPost , runFormGet' , runFormPost' -- ** High-level form post unwrappers , runFormTable , runFormDivs -- * Field/form helpers , fieldsToTable , fieldsToDivs , fieldsToPlain , checkForm -- * Type classes , module Yesod.Form.Class -- * Template Haskell , mkToForm , module Yesod.Form.Fields ) where import Yesod.Form.Core import Yesod.Form.Fields import Yesod.Form.Class import Yesod.Form.Profiles (Textarea (..)) import Yesod.Widget (GWidget) import Text.Hamlet import Yesod.Request import Yesod.Handler import Control.Applicative hiding (optional) import Data.Maybe (fromMaybe, mapMaybe) import Control.Monad ((<=<)) import Language.Haskell.TH.Syntax hiding (lift) import Database.Persist.Base (EntityDef (..), PersistEntity (entityDef)) import Data.Char (toUpper, isUpper) import Control.Arrow ((&&&)) import Data.List (group, sort) import Data.Monoid (mempty) #if __GLASGOW_HASKELL__ >= 700 #define HAMLET hamlet #else #define HAMLET $hamlet #endif -- | Display only the actual input widget code, without any decoration. fieldsToPlain :: FormField sub y a -> Form sub y a fieldsToPlain = mapFormXml $ mapM_ fiInput -- | Display the label, tooltip, input code and errors in a single row of a -- table. fieldsToTable :: FormField sub y a -> Form sub y a fieldsToTable = mapFormXml $ mapM_ go where go fi = [HAMLET|