Fixed name clashes when using more than one instance of a multi-field
This commit is contained in:
parent
2eec150289
commit
91c1a7fac7
@ -29,6 +29,7 @@ import qualified Data.Map as Map
|
|||||||
import Data.Maybe (fromJust, listToMaybe, fromMaybe, isJust)
|
import Data.Maybe (fromJust, listToMaybe, fromMaybe, isJust)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import Text.Julius (rawJS)
|
||||||
import Yesod.Core
|
import Yesod.Core
|
||||||
import Yesod.Form.Fields (intField)
|
import Yesod.Form.Fields (intField)
|
||||||
import Yesod.Form.Functions
|
import Yesod.Form.Functions
|
||||||
@ -221,7 +222,7 @@ mmulti :: (site ~ HandlerSite m, MonadHandler m, RenderMessage site FormMessage)
|
|||||||
-> MultiSettings site
|
-> MultiSettings site
|
||||||
-> MForm m (FormResult [a], MultiView site)
|
-> MForm m (FormResult [a], MultiView site)
|
||||||
mmulti field fs defs minVals' ms = do
|
mmulti field fs defs minVals' ms = do
|
||||||
wrapperClass <- newFormIdent
|
wrapperClass <- lift newIdent
|
||||||
let minVals = if minVals' < 0 then 0 else minVals'
|
let minVals = if minVals' < 0 then 0 else minVals'
|
||||||
mhelperMulti field fs wrapperClass defs minVals ms
|
mhelperMulti field fs wrapperClass defs minVals ms
|
||||||
|
|
||||||
@ -238,11 +239,11 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu
|
|||||||
mp <- askParams
|
mp <- askParams
|
||||||
(_, site, langs) <- ask
|
(_, site, langs) <- ask
|
||||||
name <- maybe newFormIdent return fsName
|
name <- maybe newFormIdent return fsName
|
||||||
theId <- maybe newFormIdent return fsId
|
theId <- lift $ maybe newIdent return fsId
|
||||||
cName <- newFormIdent
|
cName <- newFormIdent
|
||||||
cid <- newFormIdent
|
cid <- lift newIdent
|
||||||
addBtnId <- newFormIdent
|
addBtnId <- lift newIdent
|
||||||
delBtnPrefix <- newFormIdent
|
delBtnPrefix <- lift newIdent
|
||||||
|
|
||||||
let mr2 = renderMessage site langs
|
let mr2 = renderMessage site langs
|
||||||
cDef = length defs
|
cDef = length defs
|
||||||
@ -286,7 +287,7 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu
|
|||||||
-- each delete button to ensure that the function only gets included once.
|
-- each delete button to ensure that the function only gets included once.
|
||||||
let delFunction = toWidget
|
let delFunction = toWidget
|
||||||
[julius|
|
[julius|
|
||||||
function deleteField(wrapper) {
|
function deleteField_#{rawJS theId}(wrapper) {
|
||||||
var numFields = $("." + #{wrapperClass}).length;
|
var numFields = $("." + #{wrapperClass}).length;
|
||||||
|
|
||||||
if (numFields == 1)
|
if (numFields == 1)
|
||||||
@ -327,7 +328,7 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu
|
|||||||
[julius|
|
[julius|
|
||||||
$("#" + #{delBtnId}).click(function() {
|
$("#" + #{delBtnId}).click(function() {
|
||||||
var field = $("#" + #{fieldId});
|
var field = $("#" + #{fieldId});
|
||||||
deleteField(field.parents("." + #{wrapperClass}));
|
deleteField_#{rawJS theId}(field.parents("." + #{wrapperClass}));
|
||||||
});
|
});
|
||||||
|]
|
|]
|
||||||
|
|
||||||
@ -380,10 +381,10 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu
|
|||||||
delFunction -- function used by delete buttons, included here so that it only gets included once
|
delFunction -- function used by delete buttons, included here so that it only gets included once
|
||||||
toWidget
|
toWidget
|
||||||
[julius|
|
[julius|
|
||||||
var extraFields = 0;
|
var extraFields_#{rawJS theId} = 0;
|
||||||
$("#" + #{addBtnId}).click(function() {
|
$("#" + #{addBtnId}).click(function() {
|
||||||
extraFields++;
|
extraFields_#{rawJS theId}++;
|
||||||
var newNumber = parseInt(#{show counter}) + extraFields;
|
var newNumber = parseInt(#{show counter}) + extraFields_#{rawJS theId};
|
||||||
$("#" + #{cid}).val(newNumber);
|
$("#" + #{cid}).val(newNumber);
|
||||||
var newName = #{name} + "-" + newNumber;
|
var newName = #{name} + "-" + newNumber;
|
||||||
var newId = #{theId} + "-" + newNumber;
|
var newId = #{theId} + "-" + newNumber;
|
||||||
@ -425,7 +426,7 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu
|
|||||||
|
|
||||||
var newDelBtn = newWrapper.find("[id^=" + #{delBtnPrefix} + "]");
|
var newDelBtn = newWrapper.find("[id^=" + #{delBtnPrefix} + "]");
|
||||||
newDelBtn.prop('id', newDelId);
|
newDelBtn.prop('id', newDelId);
|
||||||
newDelBtn.click(() => deleteField(newWrapper));
|
newDelBtn.click(() => deleteField_#{rawJS theId}(newWrapper));
|
||||||
|
|
||||||
newWrapper.insertBefore("#" + #{addBtnId});
|
newWrapper.insertBefore("#" + #{addBtnId});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user