diff --git a/Yesod.hs b/Yesod.hs index 71d156ea..b1f16f4f 100644 --- a/Yesod.hs +++ b/Yesod.hs @@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-} +-- | This module simply re-exports from other modules for your convenience. module Yesod ( module Yesod.Request , module Yesod.Content diff --git a/Yesod/Form.hs b/Yesod/Form.hs index 4f85368e..3c4fe99c 100644 --- a/Yesod/Form.hs +++ b/Yesod/Form.hs @@ -30,11 +30,11 @@ module Yesod.Form , fieldsToDivs , fieldsToPlain , checkForm + -- * Type classes + , module Yesod.Form.Class -- * Template Haskell , mkToForm - -- * Re-exports , module Yesod.Form.Fields - , module Yesod.Form.Class ) where import Yesod.Form.Core diff --git a/Yesod/Form/Core.hs b/Yesod/Form/Core.hs index cbacbcbf..be5fcbe0 100644 --- a/Yesod/Form/Core.hs +++ b/Yesod/Form/Core.hs @@ -2,6 +2,8 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeSynonymInstances #-} +-- | Users of the forms library should not need to use this module in general. +-- It is intended only for writing custom forms and form fields. module Yesod.Form.Core ( FormResult (..) , GForm (..) diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs index aee21f69..defb1754 100644 --- a/Yesod/Form/Jquery.hs +++ b/Yesod/Form/Jquery.hs @@ -1,4 +1,7 @@ {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE FlexibleContexts #-} +-- | Some fields spiced up with jQuery UI. module Yesod.Form.Jquery ( YesodJquery (..) , jqueryDayField @@ -47,16 +50,19 @@ class YesodJquery a where urlJqueryUiDateTimePicker :: a -> Either (Route a) String urlJqueryUiDateTimePicker _ = Right "http://github.com/gregwebs/jquery.ui.datetimepicker/raw/master/jquery.ui.datetimepicker.js" -jqueryDayField :: YesodJquery y +jqueryDayField :: (IsForm f, FormType f ~ Day, YesodJquery (FormMaster f)) => JqueryDaySettings -> FormFieldSettings - -> FormletField sub y Day + -> Maybe (FormType f) + -> f jqueryDayField = requiredFieldHelper . jqueryDayFieldProfile -maybeJqueryDayField :: YesodJquery y - => JqueryDaySettings - -> FormFieldSettings - -> FormletField sub y (Maybe Day) +maybeJqueryDayField + :: (IsForm f, FormType f ~ Maybe Day, YesodJquery (FormMaster f)) + => JqueryDaySettings + -> FormFieldSettings + -> Maybe (FormType f) + -> f maybeJqueryDayField = optionalFieldHelper . jqueryDayFieldProfile jqueryDayFieldProfile :: YesodJquery y @@ -104,7 +110,11 @@ ifRight e f = case e of showLeadingZero :: (Show a) => a -> String showLeadingZero time = let t = show time in if length t == 1 then "0" ++ t else t -jqueryDayTimeField :: YesodJquery y => FormFieldSettings -> FormletField sub y UTCTime +jqueryDayTimeField + :: (IsForm f, FormType f ~ UTCTime, YesodJquery (FormMaster f)) + => FormFieldSettings + -> Maybe (FormType f) + -> f jqueryDayTimeField = requiredFieldHelper jqueryDayTimeFieldProfile -- use A.M/P.M and drop seconds and "UTC" (as opposed to normal UTCTime show) @@ -144,12 +154,20 @@ parseUTCTime s = ifRight (parseTime timeS) (UTCTime date . timeOfDayToTime) -jqueryAutocompleteField :: YesodJquery y => - Route y -> FormFieldSettings -> FormletField sub y String +jqueryAutocompleteField + :: (IsForm f, FormType f ~ String, YesodJquery (FormMaster f)) + => Route (FormMaster f) + -> FormFieldSettings + -> Maybe (FormType f) + -> f jqueryAutocompleteField = requiredFieldHelper . jqueryAutocompleteFieldProfile -maybeJqueryAutocompleteField :: YesodJquery y => - Route y -> FormFieldSettings -> FormletField sub y (Maybe String) +maybeJqueryAutocompleteField + :: (IsForm f, FormType f ~ Maybe String, YesodJquery (FormMaster f)) + => Route (FormMaster f) + -> FormFieldSettings + -> Maybe (FormType f) + -> f maybeJqueryAutocompleteField src = optionalFieldHelper $ jqueryAutocompleteFieldProfile src diff --git a/Yesod/Form/Nic.hs b/Yesod/Form/Nic.hs index e8a5bc91..a3256d45 100644 --- a/Yesod/Form/Nic.hs +++ b/Yesod/Form/Nic.hs @@ -1,4 +1,7 @@ {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE FlexibleContexts #-} +-- | Provide the user with a rich text editor. module Yesod.Form.Nic ( YesodNic (..) , nicHtmlField @@ -14,14 +17,17 @@ import Text.HTML.SanitizeXSS (sanitizeXSS) import Yesod.Internal (lbsToChars) class YesodNic a where - -- | NIC Editor. + -- | NIC Editor Javascript file. urlNicEdit :: a -> Either (Route a) String urlNicEdit _ = Right "http://js.nicedit.com/nicEdit-latest.js" -nicHtmlField :: YesodNic y => FormFieldSettings -> FormletField sub y Html +nicHtmlField :: (IsForm f, FormType f ~ Html, YesodNic (FormMaster f)) + => FormFieldSettings -> Maybe Html -> f nicHtmlField = requiredFieldHelper nicHtmlFieldProfile -maybeNicHtmlField :: YesodNic y => FormFieldSettings -> FormletField sub y (Maybe Html) +maybeNicHtmlField + :: (IsForm f, FormType f ~ Maybe Html, YesodNic (FormMaster f)) + => FormFieldSettings -> Maybe (FormType f) -> f maybeNicHtmlField = optionalFieldHelper nicHtmlFieldProfile nicHtmlFieldProfile :: YesodNic y => FieldProfile sub y Html diff --git a/yesod.cabal b/yesod.cabal index 7dec6e7a..02a0e416 100644 --- a/yesod.cabal +++ b/yesod.cabal @@ -52,15 +52,11 @@ library Yesod.Content Yesod.Dispatch Yesod.Form - Yesod.Form.Class Yesod.Form.Core - Yesod.Form.Fields - Yesod.Form.Profiles Yesod.Form.Jquery Yesod.Form.Nic Yesod.Hamlet Yesod.Handler - Yesod.Internal Yesod.Json Yesod.Request Yesod.Widget @@ -70,6 +66,10 @@ library Yesod.Helpers.Sitemap Yesod.Helpers.Static Yesod.WebRoutes + other-modules: Yesod.Form.Class + Yesod.Internal + Yesod.Form.Fields + Yesod.Form.Profiles ghc-options: -Wall executable yesod