From 63f6d016191fd1529ad7545b795bd4d174e6586a Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Wed, 17 Jul 2019 13:31:01 +0200 Subject: [PATCH] fix(aform): show info about required fields in all aforms info is only shown in forms that actually have required fields Closes #418 --- frontend/src/utils/inputs/inputs.scss | 8 +++----- messages/uniworx/de.msg | 1 + src/Auth/Dummy.hs | 1 + src/Auth/LDAP.hs | 3 ++- src/Auth/PWHash.hs | 1 + src/Foundation.hs | 2 ++ src/Utils/Form.hs | 11 +++++++---- templates/widgets/aform/aform.hamlet | 4 ++++ 8 files changed, 21 insertions(+), 10 deletions(-) diff --git a/frontend/src/utils/inputs/inputs.scss b/frontend/src/utils/inputs/inputs.scss index 817534357..7bd86c059 100644 --- a/frontend/src/utils/inputs/inputs.scss +++ b/frontend/src/utils/inputs/inputs.scss @@ -36,11 +36,9 @@ font-size: 0.9rem; } -.form-group--required { - .form-group-label__caption::after { - content: ' *'; - color: var(--color-error); - } +.form-group--required .form-group-label__caption::after, .form-group__required-marker::before { + content: ' *'; + color: var(--color-error); } .form-group--optional { diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index 3e89d21a4..e6081f4d2 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -523,6 +523,7 @@ NotificationSettings: Erwünschte Benachrichtigungen FormNotifications: Benachrichtigungen FormBehaviour: Verhalten FormCosmetics: Oberfläche +FormFieldRequiredTip: Gekennzeichnete Pflichtfelder sind immer auszufüllen ActiveAuthTags: Aktivierte Authorisierungsprädikate diff --git a/src/Auth/Dummy.hs b/src/Auth/Dummy.hs index 5987caa4f..9f6ad4964 100644 --- a/src/Auth/Dummy.hs +++ b/src/Auth/Dummy.hs @@ -32,6 +32,7 @@ dummyLogin :: ( YesodAuth site , YesodPersist site , SqlBackendCanRead (YesodPersistBackend site) , RenderMessage site FormMessage + , RenderMessage site AFormMessage , RenderMessage site DummyMessage , Button site ButtonSubmit ) => AuthPlugin site diff --git a/src/Auth/LDAP.hs b/src/Auth/LDAP.hs index 9ea9d02e5..4f003471a 100644 --- a/src/Auth/LDAP.hs +++ b/src/Auth/LDAP.hs @@ -73,6 +73,7 @@ campusLogin :: forall site. ( YesodAuth site , RenderMessage site FormMessage , RenderMessage site CampusMessage + , RenderMessage site AFormMessage , Button site ButtonSubmit ) => LdapConf -> LdapPool -> AuthPlugin site campusLogin conf@LdapConf{..} pool = AuthPlugin{..} @@ -91,7 +92,7 @@ campusLogin conf@LdapConf{..} pool = AuthPlugin{..} Ldap.bind ldap ldapDn ldapPassword searchResults <- findUser conf ldap campusIdent [userPrincipalName] case searchResults of - [Ldap.SearchEntry (Ldap.Dn userDN) userAttrs] + [Ldap.SearchEntry (Ldap.Dn userDN) userAttrs] | Just [principalName] <- lookup userPrincipalName userAttrs , Right credsIdent <- Text.decodeUtf8' principalName -> Right (userDN, credsIdent) <$ Ldap.bind ldap (Ldap.Dn credsIdent) (Ldap.Password $ Text.encodeUtf8 campusPassword) diff --git a/src/Auth/PWHash.hs b/src/Auth/PWHash.hs index a4eb42057..d6f5bf4e8 100644 --- a/src/Auth/PWHash.hs +++ b/src/Auth/PWHash.hs @@ -40,6 +40,7 @@ hashLogin :: ( YesodAuth site , SqlBackendCanRead (YesodPersistBackend site) , RenderMessage site FormMessage , RenderMessage site PWHashMessage + , RenderMessage site AFormMessage , Button site ButtonSubmit ) => PWHashAlgorithm -> AuthPlugin site hashLogin pwHashAlgo = AuthPlugin{..} diff --git a/src/Foundation.hs b/src/Foundation.hs index af6f3421d..8103ebfda 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -294,6 +294,8 @@ embedRenderMessage ''UniWorX ''SubmissionModeDescr in verbMap . splitCamel embedRenderMessage ''UniWorX ''UploadModeDescr id embedRenderMessage ''UniWorX ''SecretJSONFieldException id +embedRenderMessage ''UniWorX ''AFormMessage $ concat . drop 2 . splitCamel + newtype SheetTypeHeader = SheetTypeHeader SheetType embedRenderMessageVariant ''UniWorX ''SheetTypeHeader ("SheetType" <>) diff --git a/src/Utils/Form.hs b/src/Utils/Form.hs index ae9cb5325..ecbf65f1a 100644 --- a/src/Utils/Form.hs +++ b/src/Utils/Form.hs @@ -602,7 +602,7 @@ fileFieldMultiple = Field [whamlet| $newline never - |] + |] , fieldEnctype = Multipart } @@ -652,13 +652,16 @@ wrapForm' btn formWidget FormSettings{..} = do -- | Use this type to pass information to the form template data FormLayout = FormStandard | FormDBTableFilter | FormDBTablePagesize | FormDBTableCsvImport -renderAForm :: Monad m => FormLayout -> FormRender m a +data AFormMessage = MsgAFormFieldRequiredTip + +renderAForm :: (RenderMessage (HandlerSite m) AFormMessage, Monad m) => FormLayout -> FormRender m a renderAForm formLayout aform fragment = do (res, ($ []) -> fieldViews) <- aFormToForm aform - let widget = $(widgetFile "widgets/aform/aform") + let formHasRequiredFields = any fvRequired fieldViews + widget = $(widgetFile "widgets/aform/aform") return (res, widget) -renderWForm :: MonadHandler m => FormLayout -> WForm m (FormResult a) -> -- Form a -- (Synonym unavailable here) +renderWForm :: (RenderMessage (HandlerSite m) AFormMessage, MonadHandler m) => FormLayout -> WForm m (FormResult a) -> -- Form a -- (Synonym unavailable here) (Markup -> MForm m (FormResult a, WidgetT (HandlerSite m) IO ())) renderWForm formLayout = renderAForm formLayout . wFormToAForm diff --git a/templates/widgets/aform/aform.hamlet b/templates/widgets/aform/aform.hamlet index 460ca1ba7..b51adbf2c 100644 --- a/templates/widgets/aform/aform.hamlet +++ b/templates/widgets/aform/aform.hamlet @@ -22,3 +22,7 @@ $case formLayout ^{fvInput view} $maybe err <- fvErrors view
#{err} + $if formHasRequiredFields +
+ + _{MsgAFormFieldRequiredTip}