From 9eef4829ad2e00cb6b23bbf979aac731d204dd05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Buckwalter?= Date: Sat, 10 Sep 2011 22:48:32 +0800 Subject: [PATCH 1/3] Factor out English FormMessage rendering. --- yesod-form/Yesod/Form/Fields.hs | 42 ++------------------------- yesod-form/Yesod/Form/Functions.hs | 1 - yesod-form/Yesod/Form/I18n/English.hs | 26 +++++++++++++++++ yesod-form/Yesod/Form/Input.hs | 1 - yesod-form/Yesod/Form/MassInput.hs | 2 +- yesod-form/Yesod/Form/Types.hs | 20 +++++++++++++ yesod-form/yesod-form.cabal | 1 + 7 files changed, 51 insertions(+), 42 deletions(-) create mode 100644 yesod-form/Yesod/Form/I18n/English.hs diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index a4146d33..10b7ad06 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -4,8 +4,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} module Yesod.Form.Fields - ( FormMessage (..) - , defaultFormMessage + ( defaultFormMessage , textField , passwordField , textareaField @@ -29,6 +28,7 @@ module Yesod.Form.Fields ) where import Yesod.Form.Types +import Yesod.Form.I18n.English import Yesod.Widget import Yesod.Message (RenderMessage, SomeMessage (..)) import Text.Hamlet @@ -53,7 +53,6 @@ import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L import Data.Text (Text, unpack, pack) import qualified Data.Text.Read -import Data.Monoid (mappend) #if __GLASGOW_HASKELL__ >= 700 #define WHAMLET whamlet @@ -69,44 +68,9 @@ import Data.Monoid (mappend) #define HTML $html #endif -data FormMessage = MsgInvalidInteger Text - | MsgInvalidNumber Text - | MsgInvalidEntry Text - | MsgInvalidUrl Text - | MsgInvalidEmail Text - | MsgInvalidTimeFormat - | MsgInvalidHour Text - | MsgInvalidMinute Text - | MsgInvalidSecond Text - | MsgInvalidDay - | MsgCsrfWarning - | MsgValueRequired - | MsgInputNotFound Text - | MsgSelectNone - | MsgInvalidBool Text - | MsgBoolYes - | MsgBoolNo - | MsgDelete defaultFormMessage :: FormMessage -> Text -defaultFormMessage (MsgInvalidInteger t) = "Invalid integer: " `mappend` t -defaultFormMessage (MsgInvalidNumber t) = "Invalid number: " `mappend` t -defaultFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t -defaultFormMessage MsgInvalidTimeFormat = "Invalid time, must be in HH:MM[:SS] format" -defaultFormMessage MsgInvalidDay = "Invalid day, must be in YYYY-MM-DD format" -defaultFormMessage (MsgInvalidUrl t) = "Invalid URL: " `mappend` t -defaultFormMessage (MsgInvalidEmail t) = "Invalid e-mail address: " `mappend` t -defaultFormMessage (MsgInvalidHour t) = "Invalid hour: " `mappend` t -defaultFormMessage (MsgInvalidMinute t) = "Invalid minute: " `mappend` t -defaultFormMessage (MsgInvalidSecond t) = "Invalid second: " `mappend` t -defaultFormMessage MsgCsrfWarning = "As a protection against cross-site request forgery attacks, please confirm your form submission." -defaultFormMessage MsgValueRequired = "Value is required" -defaultFormMessage (MsgInputNotFound t) = "Input not found: " `mappend` t -defaultFormMessage MsgSelectNone = "" -defaultFormMessage (MsgInvalidBool t) = "Invalid boolean: " `mappend` t -defaultFormMessage MsgBoolYes = "Yes" -defaultFormMessage MsgBoolNo = "No" -defaultFormMessage MsgDelete = "Delete?" +defaultFormMessage = englishFormMessage blank :: (Monad m, RenderMessage master FormMessage) => (Text -> Either FormMessage a) -> [Text] -> m (Either (SomeMessage master) (Maybe a)) diff --git a/yesod-form/Yesod/Form/Functions.hs b/yesod-form/Yesod/Form/Functions.hs index f1904f92..3c51c81a 100644 --- a/yesod-form/Yesod/Form/Functions.hs +++ b/yesod-form/Yesod/Form/Functions.hs @@ -34,7 +34,6 @@ module Yesod.Form.Functions ) where import Yesod.Form.Types -import Yesod.Form.Fields (FormMessage (MsgCsrfWarning, MsgValueRequired)) import Data.Text (Text, pack) import Control.Monad.Trans.RWS (ask, get, put, runRWST, tell, evalRWST) import Control.Monad.Trans.Class (lift) diff --git a/yesod-form/Yesod/Form/I18n/English.hs b/yesod-form/Yesod/Form/I18n/English.hs new file mode 100644 index 00000000..f13ca683 --- /dev/null +++ b/yesod-form/Yesod/Form/I18n/English.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE OverloadedStrings #-} +module Yesod.Form.I18n.English where + +import Yesod.Form.Types (FormMessage (..)) +import Data.Monoid (mappend) +import Data.Text (Text) + +englishFormMessage :: FormMessage -> Text +englishFormMessage (MsgInvalidInteger t) = "Invalid integer: " `mappend` t +englishFormMessage (MsgInvalidNumber t) = "Invalid number: " `mappend` t +englishFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t +englishFormMessage MsgInvalidTimeFormat = "Invalid time, must be in HH:MM[:SS] format" +englishFormMessage MsgInvalidDay = "Invalid day, must be in YYYY-MM-DD format" +englishFormMessage (MsgInvalidUrl t) = "Invalid URL: " `mappend` t +englishFormMessage (MsgInvalidEmail t) = "Invalid e-mail address: " `mappend` t +englishFormMessage (MsgInvalidHour t) = "Invalid hour: " `mappend` t +englishFormMessage (MsgInvalidMinute t) = "Invalid minute: " `mappend` t +englishFormMessage (MsgInvalidSecond t) = "Invalid second: " `mappend` t +englishFormMessage MsgCsrfWarning = "As a protection against cross-site request forgery attacks, please confirm your form submission." +englishFormMessage MsgValueRequired = "Value is required" +englishFormMessage (MsgInputNotFound t) = "Input not found: " `mappend` t +englishFormMessage MsgSelectNone = "" +englishFormMessage (MsgInvalidBool t) = "Invalid boolean: " `mappend` t +englishFormMessage MsgBoolYes = "Yes" +englishFormMessage MsgBoolNo = "No" +englishFormMessage MsgDelete = "Delete?" diff --git a/yesod-form/Yesod/Form/Input.hs b/yesod-form/Yesod/Form/Input.hs index 45c742c4..34abd57a 100644 --- a/yesod-form/Yesod/Form/Input.hs +++ b/yesod-form/Yesod/Form/Input.hs @@ -9,7 +9,6 @@ module Yesod.Form.Input ) where import Yesod.Form.Types -import Yesod.Form.Fields (FormMessage (MsgInputNotFound)) import Data.Text (Text) import Control.Applicative (Applicative (..)) import Yesod.Handler (GHandler, GGHandler, invalidArgs, runRequestBody, getRequest, getYesod, liftIOHandler) diff --git a/yesod-form/Yesod/Form/MassInput.hs b/yesod-form/Yesod/Form/MassInput.hs index f15bac0c..3a3eae40 100644 --- a/yesod-form/Yesod/Form/MassInput.hs +++ b/yesod-form/Yesod/Form/MassInput.hs @@ -11,7 +11,7 @@ module Yesod.Form.MassInput import Yesod.Form.Types import Yesod.Form.Functions -import Yesod.Form.Fields (boolField, FormMessage (MsgDelete)) +import Yesod.Form.Fields (boolField) import Yesod.Widget (GWidget, whamlet) import Yesod.Message (RenderMessage) import Yesod.Handler (newIdent, GGHandler) diff --git a/yesod-form/Yesod/Form/Types.hs b/yesod-form/Yesod/Form/Types.hs index f5f87345..c84743fd 100644 --- a/yesod-form/Yesod/Form/Types.hs +++ b/yesod-form/Yesod/Form/Types.hs @@ -5,6 +5,7 @@ module Yesod.Form.Types ( -- * Helpers Enctype (..) , FormResult (..) + , FormMessage (..) , Env , FileEnv , Ints (..) @@ -121,3 +122,22 @@ data Field sub master a = Field -> Bool -> GWidget sub master () } + +data FormMessage = MsgInvalidInteger Text + | MsgInvalidNumber Text + | MsgInvalidEntry Text + | MsgInvalidUrl Text + | MsgInvalidEmail Text + | MsgInvalidTimeFormat + | MsgInvalidHour Text + | MsgInvalidMinute Text + | MsgInvalidSecond Text + | MsgInvalidDay + | MsgCsrfWarning + | MsgValueRequired + | MsgInputNotFound Text + | MsgSelectNone + | MsgInvalidBool Text + | MsgBoolYes + | MsgBoolNo + | MsgDelete diff --git a/yesod-form/yesod-form.cabal b/yesod-form/yesod-form.cabal index b3257ffb..c726c62e 100644 --- a/yesod-form/yesod-form.cabal +++ b/yesod-form/yesod-form.cabal @@ -42,6 +42,7 @@ library Yesod.Form.Jquery Yesod.Form.Nic Yesod.Form.MassInput + Yesod.Form.I18n.English -- FIXME Yesod.Helpers.Crud ghc-options: -Wall From 392e47e1aae39f332b46ba2eb06563f47bf8b727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Buckwalter?= Date: Sat, 10 Sep 2011 23:06:57 +0800 Subject: [PATCH 2/3] Swedish FormMessages. --- yesod-form/Yesod/Form/I18n/Swedish.hs | 26 ++++++++++++++++++++++++++ yesod-form/yesod-form.cabal | 1 + 2 files changed, 27 insertions(+) create mode 100644 yesod-form/Yesod/Form/I18n/Swedish.hs diff --git a/yesod-form/Yesod/Form/I18n/Swedish.hs b/yesod-form/Yesod/Form/I18n/Swedish.hs new file mode 100644 index 00000000..48d59aca --- /dev/null +++ b/yesod-form/Yesod/Form/I18n/Swedish.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE OverloadedStrings #-} +module Yesod.Form.I18n.Swedish where + +import Yesod.Form.Types (FormMessage (..)) +import Data.Monoid (mappend) +import Data.Text (Text) + +swedishFormMessage :: FormMessage -> Text +swedishFormMessage (MsgInvalidInteger t) = "Ogiltigt antal: " `mappend` t +swedishFormMessage (MsgInvalidNumber t) = "Ogiltigt nummer: " `mappend` t +swedishFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t +swedishFormMessage MsgInvalidTimeFormat = "Ogiltigt klockslag, måste vara på formatet HH:MM[:SS]" +swedishFormMessage MsgInvalidDay = "Ogiltigt datum, måste vara på formatet ÅÅÅÅ-MM-DD" +swedishFormMessage (MsgInvalidUrl t) = "Ogiltig URL: " `mappend` t +swedishFormMessage (MsgInvalidEmail t) = "Ogiltig epostadress: " `mappend` t +swedishFormMessage (MsgInvalidHour t) = "Ogiltig timme: " `mappend` t +swedishFormMessage (MsgInvalidMinute t) = "Ogiltig minut: " `mappend` t +swedishFormMessage (MsgInvalidSecond t) = "Ogiltig sekund: " `mappend` t +swedishFormMessage MsgValueRequired = "Fältet är obligatoriskt" +swedishFormMessage (MsgInputNotFound t) = "Fältet hittades ej: " `mappend` t +swedishFormMessage MsgSelectNone = "" +swedishFormMessage (MsgInvalidBool t) = "Ogiltig boolesk: " `mappend` t +swedishFormMessage MsgBoolYes = "Ja" +swedishFormMessage MsgBoolNo = "Nej" +swedishFormMessage MsgDelete = "Radera?" +swedishFormMessage MsgCsrfWarning = "Som skydd mot \"cross-site request forgery\" attacker, vänligen bekräfta skickandet av formuläret." diff --git a/yesod-form/yesod-form.cabal b/yesod-form/yesod-form.cabal index c726c62e..8da5c05e 100644 --- a/yesod-form/yesod-form.cabal +++ b/yesod-form/yesod-form.cabal @@ -43,6 +43,7 @@ library Yesod.Form.Nic Yesod.Form.MassInput Yesod.Form.I18n.English + Yesod.Form.I18n.Swedish -- FIXME Yesod.Helpers.Crud ghc-options: -Wall From 9158931915a4f86411541f65d0c608d913540bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Buckwalter?= Date: Sun, 11 Sep 2011 11:45:24 +0800 Subject: [PATCH 3/3] Reexport FormMessage (..) from Yesod.Form.Fields. This amendment should make commit 9eef4829ad2e00cb6b23bbf979aac731d204dd05 a non-breaking change, except possibly causing some warnings about duplicate exports with Yesod.Form.Types. --- yesod-form/Yesod/Form.hs | 2 +- yesod-form/Yesod/Form/Fields.hs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/yesod-form/Yesod/Form.hs b/yesod-form/Yesod/Form.hs index 4345e7da..e2f09afc 100644 --- a/yesod-form/Yesod/Form.hs +++ b/yesod-form/Yesod/Form.hs @@ -9,6 +9,6 @@ module Yesod.Form import Yesod.Form.Types import Yesod.Form.Functions -import Yesod.Form.Fields +import Yesod.Form.Fields hiding (FormMessage (..)) import Yesod.Form.Class import Yesod.Form.Input diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index 10b7ad06..c7d3871d 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -4,7 +4,8 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} module Yesod.Form.Fields - ( defaultFormMessage + ( FormMessage (..) + , defaultFormMessage , textField , passwordField , textareaField