yesod-form-multi 1.7.0.2 → 1.7.0.3
raw patch · 3 files changed
+38/−30 lines, 3 filesdep ~yesod-corenew-uploaderPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: yesod-core
API changes (from Hackage documentation)
- Yesod.Form.MultiInput: amulti :: (site ~ HandlerSite m, MonadHandler m, RenderMessage site FormMessage) => Field m a -> FieldSettings site -> [a] -> Int -> MultiSettings site -> AForm m [a]
+ Yesod.Form.MultiInput: amulti :: forall site (m :: Type -> Type) a. (site ~ HandlerSite m, MonadHandler m, RenderMessage site FormMessage) => Field m a -> FieldSettings site -> [a] -> Int -> MultiSettings site -> AForm m [a]
- Yesod.Form.MultiInput: mmulti :: (site ~ HandlerSite m, MonadHandler m, RenderMessage site FormMessage) => Field m a -> FieldSettings site -> [a] -> Int -> MultiSettings site -> MForm m (FormResult [a], MultiView site)
+ Yesod.Form.MultiInput: mmulti :: forall site (m :: Type -> Type) a. (site ~ HandlerSite m, MonadHandler m, RenderMessage site FormMessage) => Field m a -> FieldSettings site -> [a] -> Int -> MultiSettings site -> MForm m (FormResult [a], MultiView site)
Files
- ChangeLog.md +4/−0
- Yesod/Form/MultiInput.hs +32/−28
- yesod-form-multi.cabal +2/−2
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog +## 1.7.0.3++* Support `yesod-core` 1.7+ ## 1.7.0.2 * Allow yesod-form 1.7
Yesod/Form/MultiInput.hs view
@@ -1,12 +1,16 @@-{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE CPP #-}+{-# LANGUAGE TypeOperators #-}+#if !MIN_VERSION_shakespeare(2,0,18)+{-# OPTIONS_GHC -Wno-orphans #-}+#endif -- | A module providing a means of creating multiple input forms without -- the need to submit the form to generate a new input field unlike@@ -35,14 +39,11 @@ import Yesod.Form.Functions import Yesod.Form.Types -#ifdef MIN_VERSION_shakespeare(2,0,18)-#if MIN_VERSION_shakespeare(2,0,18)-#else+#if !MIN_VERSION_shakespeare(2,0,18) import Text.Julius (ToJavascript (..)) instance ToJavascript String where toJavascript = toJavascript . toJSON instance ToJavascript Text where toJavascript = toJavascript . toJSON #endif-#endif -- | By default delete buttons have a @margin-left@ property of @0.75rem@. -- You can override this by specifying an alternative value in a class@@ -65,7 +66,7 @@ -- both the field and it's corresponding delete button. -- -- The structure is illustrated by the following:--- +-- -- > <div .#{wrapperClass}> -- > <div .#{wrapperClass}-inner> -- > ^{fieldWidget}@@ -76,7 +77,7 @@ -- is returned in the 'MultiView' should you wish to change the styling. The inner wrapper -- uses the same class followed by @-inner@. By default the wrapper and inner wrapper has -- classes are as follows:--- +-- -- > .#{wrapperClass} { -- > margin-bottom: 1rem; -- > }@@ -105,7 +106,7 @@ "has-error" Nothing Nothing (Just errW) where- errW err = + errW err = [whamlet| <span .help-block>#{err} |]@@ -140,7 +141,7 @@ where addIcon = Just [shamlet|<i class="fas fa-plus">|] delIcon = Just [shamlet|<i class="fas fa-trash-alt">|]- errW err = + errW err = [whamlet| <span .help-block>#{err} |]@@ -184,7 +185,10 @@ mform = do (fr, MultiView {..}) <- mmulti field fs defs minVals ms - let (fv : _) = mvFields+ let fv =+ case mvFields of+ [] -> error "amulti: expected at least one input field"+ inputField : _ -> inputField widget = do [whamlet| $maybe tooltip <- fvTooltip fv@@ -205,7 +209,7 @@ , fvErrors = fvErrors mvAddBtn , fvRequired = False }- + return (fr, view) -- | Converts a form field into a monadic form containing an arbitrary@@ -235,7 +239,7 @@ -> Int -> MultiSettings site -> MForm m (FormResult [a], MultiView site)-mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals MultiSettings {..} = do+mhelperMulti field fs@FieldSettings{..} wrapperClass defs minVals MultiSettings{..} = do mp <- askParams (_, site, langs) <- ask name <- maybe newFormIdent return fsName@@ -258,7 +262,7 @@ _ -> False mfs <- askFiles- + -- get counter value (starts counting from 0) cr@(cRes, _) <- case mp of Nothing -> return (FormMissing, Right cDef)@@ -332,7 +336,7 @@ $('##{rawJS delBtnId}').click(function() { var field = $('##{rawJS fieldId}'); deleteField_#{rawJS theId}(field.parents('.#{rawJS wrapperClass}'));- }); + }); |] -- generate field views@@ -348,19 +352,19 @@ zs -> zs rvs <- mapM mkView' ys return $ unzip rvs- + -- check values let rs' = [ fmap fromJust r | r <- rs , not $ isSuccNothing r ] err = T.pack $ "Please enter at least " ++ show minVals ++ " values."- (res, tooFewVals) = + (res, tooFewVals) = case foldr (<*>) (FormSuccess []) (map (fmap $ (:)) rs') of FormSuccess xs -> if length xs < minVals then (FormFailure [err], True) else (FormSuccess xs, False) fRes -> (fRes, False)- + -- create add button -- also includes some styling / functions that we only want to include once btnWidget = do@@ -392,7 +396,7 @@ var newName = #{name} + "-" + newNumber; var newId = #{theId} + "-" + newNumber; var newDelId = #{delBtnPrefix} + newId;- + // get new wrapper and remove old error messages var newWrapper = $('.#{rawJS wrapperClass}').first().clone(); newWrapper.children( ':not(.#{rawJS wrapperClass}-inner)' ).remove();@@ -458,7 +462,7 @@ -> (site -> [Text] -> FormResult b) -> (a -> FormResult b) -> MForm m (FormResult b, Either Text a)-mkRes Field {..} FieldSettings {..} p mfs name onMissing onFound = do+mkRes Field{..} _ p mfs name onMissing onFound = do tell fieldEnctype (_, site, langs) <- ask let mvals = fromMaybe [] $ Map.lookup name p@@ -468,7 +472,7 @@ Left msg -> (FormFailure [renderMessage site langs msg], maybe (Left "") Left (listToMaybe mvals)) Right mx -> case mx of- Nothing -> (onMissing site langs, Left "") + Nothing -> (onMissing site langs, Left "") Just x -> (onFound x, Right x) -- Generate a FieldView for the given field with the given result.@@ -485,7 +489,7 @@ -> Text -> Bool -> MForm m (FieldView site)-mkView Field {..} FieldSettings {..} (res, val) mdel merrW errClass theId name isReq = do+mkView Field{..} FieldSettings{..} (res, val) mdel merrW errClass theId name isReq = do (_, site, langs) <- ask let mr2 = renderMessage site langs merr = case res of@@ -499,11 +503,11 @@ <div .#{wrapperClass}-inner> ^{fv'} ^{delBtn}- + $maybe err <- merr $maybe errW <- merrW ^{errW err}- + $nothing ^{fv'} |]
yesod-form-multi.cabal view
@@ -1,5 +1,5 @@ name: yesod-form-multi-version: 1.7.0.2+version: 1.7.0.3 license: MIT license-file: LICENSE author: James Burton <jamesejburton@gmail.com>@@ -25,7 +25,7 @@ , shakespeare >= 2.0 , text >= 0.9 , transformers >= 0.2.2- , yesod-core >= 1.6 && < 1.7+ , yesod-core >= 1.6 && < 1.8 , yesod-form >= 1.6 && < 1.8 if flag(network-uri)