From ea38ee422f9eb7e7e42c001218c62275659727c6 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 22 Apr 2019 12:48:40 +0200 Subject: [PATCH 01/17] Basic short-circuit support for mass-input --- src/Handler/Utils/Form/MassInput.hs | 8 ++++++++ src/Utils.hs | 2 +- .../widgets/massinput/massinput-standalone-wrapper.hamlet | 8 ++++++++ templates/widgets/massinput/massinput-standalone.hamlet | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 templates/widgets/massinput/massinput-standalone-wrapper.hamlet create mode 100644 templates/widgets/massinput/massinput-standalone.hamlet diff --git a/src/Handler/Utils/Form/MassInput.hs b/src/Handler/Utils/Form/MassInput.hs index b89799f9a..6cd67ccc5 100644 --- a/src/Handler/Utils/Form/MassInput.hs +++ b/src/Handler/Utils/Form/MassInput.hs @@ -36,6 +36,8 @@ import qualified Data.Foldable as Fold import Control.Monad.Reader.Class (MonadReader(local)) +import Text.Hamlet (hamletFile) + $(mapM tupleBoxCoord [2..4]) @@ -409,6 +411,12 @@ massInput MassInput{..} FieldSettings{..} fvRequired initialResult csrf = do MsgRenderer mr <- getMsgRenderer + whenM (hasCustomHeader HeaderMassInputShortcircuit) . liftHandlerT $ do + PageContent{..} <- widgetToPageContent $(widgetFile "widgets/massinput/massinput-standalone") + ur <- getUrlRenderParams + + sendResponse $ $(hamletFile "templates/widgets/massinput/massinput-standalone-wrapper.hamlet") ur + let fvLabel = toHtml $ mr fsLabel fvTooltip = toHtml . mr <$> fsTooltip diff --git a/src/Utils.hs b/src/Utils.hs index 40fa580ee..4310da38d 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -645,7 +645,7 @@ takeSessionJson key = lookupSessionJson key <* deleteSession (toPathPiece key) -- Custom HTTP Request-Headers -- --------------------------------- -data CustomHeader = HeaderIsModal | HeaderDBTableShortcircuit +data CustomHeader = HeaderIsModal | HeaderDBTableShortcircuit | HeaderMassInputShortcircuit deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic) instance Universe CustomHeader diff --git a/templates/widgets/massinput/massinput-standalone-wrapper.hamlet b/templates/widgets/massinput/massinput-standalone-wrapper.hamlet new file mode 100644 index 000000000..f6cfbcf2a --- /dev/null +++ b/templates/widgets/massinput/massinput-standalone-wrapper.hamlet @@ -0,0 +1,8 @@ +$newline never +$# Wrapper around massinput-standalone +$# pageTitle :: Html +$# pageHead :: HtmlUrl url +$# pageBody :: HtmlUrl url +$# +$# Probably only `pageBody` is relevant +^{pageBody} diff --git a/templates/widgets/massinput/massinput-standalone.hamlet b/templates/widgets/massinput/massinput-standalone.hamlet new file mode 100644 index 000000000..6fef23b58 --- /dev/null +++ b/templates/widgets/massinput/massinput-standalone.hamlet @@ -0,0 +1,6 @@ +$newline never +$# Version of `widgets/massinput/massinput` for when short-circuiting happens +$# i.e. the response is only this widget wrapped in `massinput-standalone-wrapper.hamlet` +#{csrf} +^{shapeInput} +^{miWidget} From 484b5916c0f8cbea925e58079197ddedaa7832f2 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Tue, 23 Apr 2019 13:37:25 +0200 Subject: [PATCH 02/17] remove implicit submit js util for mass-input --- templates/widgets/massinput/massinput.julius | 37 -------------------- 1 file changed, 37 deletions(-) delete mode 100644 templates/widgets/massinput/massinput.julius diff --git a/templates/widgets/massinput/massinput.julius b/templates/widgets/massinput/massinput.julius deleted file mode 100644 index 3c6c2a25b..000000000 --- a/templates/widgets/massinput/massinput.julius +++ /dev/null @@ -1,37 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - var form = document.getElementById(#{String fvId}).closest('form'); - - - var formSubmit = form.querySelector('input[type=submit], button[type=submit]:not(.btn-mass-input-add):not(.btn-mass-input-delete)'); - var cellInputs = Array.from(form.querySelectorAll('.massinput--cell input:not([type=hidden])')); - - cellInputs.forEach(function(input) { - makeImplicitSubmit(input, formSubmit); - }); - - - Array.from(form.querySelectorAll('.massinput--add')).forEach(function(wrapper) { - var addSubmit = wrapper.querySelector('.btn-mass-input-add'); - var addInputs = Array.from(wrapper.querySelectorAll('input:not([type=hidden]):not(.btn-mass-input-add)')); - - addInputs.forEach(function(input) { - makeImplicitSubmit(input, addSubmit); - }); - }); - - // Override implicit submit (pressing enter) behaviour to trigger a specified submit button instead of the default - function makeImplicitSubmit(input, submit) { - if (!submit) { - throw new Error('implicitSubmit(input, options) needs to be passed a submit element via options'); - } - - var doSubmit = function(event) { - if (event.keyCode == 13) { - event.preventDefault(); - submit.click(); - } - }; - - input.addEventListener('keypress', doSubmit); - } -}); From c01bfd4fb374519184feaa7a50d6a4bb51786c44 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Tue, 23 Apr 2019 13:38:08 +0200 Subject: [PATCH 03/17] wrap recipient form categories in wrapper and only show when necessary --- .../communication/recipientLayout.hamlet | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/templates/widgets/communication/recipientLayout.hamlet b/templates/widgets/communication/recipientLayout.hamlet index c52ff534d..f3f759de1 100644 --- a/templates/widgets/communication/recipientLayout.hamlet +++ b/templates/widgets/communication/recipientLayout.hamlet @@ -1,14 +1,16 @@ $newline never -$forall category <- activeCategories -
- -