ToForm and ToField

This commit is contained in:
Michael Snoyman 2011-05-09 22:07:56 +03:00
parent 122f7f85a6
commit 0fa08a7355
3 changed files with 53 additions and 48 deletions

View File

@ -10,10 +10,10 @@ module Yesod.Form
( module Yesod.Form.Types ( module Yesod.Form.Types
, module Yesod.Form.Functions , module Yesod.Form.Functions
, module Yesod.Form.Fields , module Yesod.Form.Fields
-- FIXME , module Yesod.Form.Class , module Yesod.Form.Class
) where ) where
import Yesod.Form.Types import Yesod.Form.Types
import Yesod.Form.Functions import Yesod.Form.Functions
import Yesod.Form.Fields import Yesod.Form.Fields
-- FIXME import Yesod.Form.Class import Yesod.Form.Class

View File

@ -2,24 +2,25 @@
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE TypeSynonymInstances #-}
module Yesod.Form.Class module Yesod.Form.Class
() where
{- FIXME Maybe we should remove this module entirely...
( ToForm (..) ( ToForm (..)
, ToFormField (..) , ToField (..)
) where ) where
import Text.Hamlet import Text.Hamlet
import Yesod.Widget (GGWidget)
import Yesod.Form.Fields import Yesod.Form.Fields
import Yesod.Form.Core import Yesod.Form.Types
import Yesod.Form.Profiles (Textarea) import Yesod.Form.Functions (areq, aopt)
import Data.Int (Int64) import Data.Int (Int64)
import Data.Time (Day, TimeOfDay) import Data.Time (Day, TimeOfDay)
import Data.Text (Text) import Data.Text (Text)
import Yesod.Handler (GGHandler)
class ToForm a y where class ToForm a master monad where
toForm :: Formlet sub y a toForm :: AForm ([FieldView (GGWidget master monad ())] -> [FieldView (GGWidget master monad ())]) monad a
class ToFormField a y where
toFormField :: FormFieldSettings -> FormletField sub y a class ToField a master monad where
toField :: FieldSettings -> Maybe a -> AForm ([FieldView (GGWidget master monad ())] -> [FieldView (GGWidget master monad ())]) monad a
{- FIXME {- FIXME
instance ToFormField String y where instance ToFormField String y where
@ -28,45 +29,47 @@ instance ToFormField (Maybe String) y where
toFormField = maybeStringField toFormField = maybeStringField
-} -}
instance ToFormField Text y where instance Monad m => ToField Text master (GGHandler sub master m) where
toFormField = stringField toField = areq textField
instance ToFormField (Maybe Text) y where instance Monad m => ToField (Maybe Text) master (GGHandler sub master m) where
toFormField = maybeStringField toField = aopt textField
instance ToFormField Int y where instance Monad m => ToField Int master (GGHandler sub master m) where
toFormField = intField toField = areq intField
instance ToFormField (Maybe Int) y where instance Monad m => ToField (Maybe Int) master (GGHandler sub master m) where
toFormField = maybeIntField toField = aopt intField
instance ToFormField Int64 y where
toFormField = intField
instance ToFormField (Maybe Int64) y where
toFormField = maybeIntField
instance ToFormField Double y where instance Monad m => ToField Int64 master (GGHandler sub master m) where
toFormField = doubleField toField = areq intField
instance ToFormField (Maybe Double) y where instance Monad m => ToField (Maybe Int64) master (GGHandler sub master m) where
toFormField = maybeDoubleField toField = aopt intField
instance ToFormField Day y where instance Monad m => ToField Double master (GGHandler sub master m) where
toFormField = dayField toField = areq doubleField
instance ToFormField (Maybe Day) y where instance Monad m => ToField (Maybe Double) master (GGHandler sub master m) where
toFormField = maybeDayField toField = aopt doubleField
instance ToFormField TimeOfDay y where instance Monad m => ToField Day master (GGHandler sub master m) where
toFormField = timeField toField = areq dayField
instance ToFormField (Maybe TimeOfDay) y where instance Monad m => ToField (Maybe Day) master (GGHandler sub master m) where
toFormField = maybeTimeField toField = aopt dayField
instance Monad m => ToField TimeOfDay master (GGHandler sub master m) where
toField = areq timeField
instance Monad m => ToField (Maybe TimeOfDay) master (GGHandler sub master m) where
toField = aopt timeField
instance Monad m => ToField Html master (GGHandler sub master m) where
toField = areq htmlField
instance Monad m => ToField (Maybe Html) master (GGHandler sub master m) where
toField = aopt htmlField
instance Monad m => ToField Textarea master (GGHandler sub master m) where
toField = areq textareaField
instance Monad m => ToField (Maybe Textarea) master (GGHandler sub master m) where
toField = aopt textareaField
{- FIXME
instance ToFormField Bool y where instance ToFormField Bool y where
toFormField = boolField toFormField = boolField
instance ToFormField Html y where
toFormField = htmlField
instance ToFormField (Maybe Html) y where
toFormField = maybeHtmlField
instance ToFormField Textarea y where
toFormField = textareaField
instance ToFormField (Maybe Textarea) y where
toFormField = maybeTextareaField
-} -}

View File

@ -43,10 +43,12 @@ import qualified Data.ByteString.Lazy as L
import Data.Text (Text, unpack, pack) import Data.Text (Text, unpack, pack)
#if __GLASGOW_HASKELL__ >= 700 #if __GLASGOW_HASKELL__ >= 700
#define WHAMLET whamlet
#define HAMLET hamlet #define HAMLET hamlet
#define CASSIUS cassius #define CASSIUS cassius
#define JULIUS julius #define JULIUS julius
#else #else
#define WHAMLET $whamlet
#define HAMLET $hamlet #define HAMLET $hamlet
#define CASSIUS $cassius #define CASSIUS $cassius
#define JULIUS $julius #define JULIUS $julius
@ -154,9 +156,9 @@ textField :: Monad monad => Field (GGWidget master monad ()) Text
textField = Field textField = Field
{ fieldParse = Right { fieldParse = Right
, fieldRender = id , fieldRender = id
, fieldView = \theId name val isReq -> addHamlet , fieldView = \theId name val isReq ->
[HAMLET|\ [WHAMLET|
<input id="#{theId}" name="#{name}" type="text" :isReq:required="" value="#{val}"> <input id="#{theId}" name="#{name}" type="text" :isReq:required value="#{val}">
|] |]
} }