%for i, field in enumerate(schema.form_order):
<%
props = schema.fields[field]
field_id_name = "{}.{}".format(schema.form_id, field)
%>
%if props.repeating == True and isinstance(props, formencode.ForEach):
${self.buildListSubforms(field_id_name, field, props, values, errors)}
%elif props.repeating == False and isinstance(props, formencode.Schema):
${self.buildSubform(field_id_name, props, values.get(field, dict()), errors.get(field, dict()))}
%else:
${self.renderFormLine(field_id_name, field, props, values, errors)}
%endif
%endfor
%def>
<%def name="buildform(schema, values, errors)">
<%
values = values[schema.form_id]
errors = errors[schema.form_id]
%>
%def>
<%def name="buildValidators(root, success=True, expanding_list = False, with_custom_select = False)">
%if "de" in request._LOCALE_.lower():
$.validator.methods.range = function (value, element, param) {
var globalizedValue = value.replace(",", ".");
return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}
$.validator.methods.number = function (value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
}
%endif
${root}.find("form.form-validated").each(function(index, form){
var validator = $(form).validate({
errorClass: "help-inline"
,errorElement: "span"
,highlight: function (element, errorClass, validClass) {
$(element).closest(".control-group").addClass("error").removeClass(validClass);
}
, unhighlight: function (element, errorClass, validClass) {
$(element).closest(".control-group").removeClass("error").addClass(validClass);
}
});
$(form).find("input[type=reset], button[type=reset]").click(function(e) {
validator.resetForm();
$(form).find(".error").removeClass("error");
});
});
%if with_custom_select:
var checkSelectedOption = function(selectInput){
var selected = selectInput.find("option:selected")
if(selected.attr("data-entity-custom")){
selectInput.parent().find(".select-option-custom").show();
} else {
selectInput.parent().find(".select-option-custom").hide();
selectInput.closest(".control-group").removeClass("error").find("[generated]").remove();
}
};
${root}.find("form.form-validated").on({change:function(e){checkSelectedOption($(e.target));}}, "select");
${root}.find("form.form-validated").find("select").each(function(idx, selectInput){checkSelectedOption($(selectInput))});
%endif
%if expanding_list:
${root}.on({click:function(e){
var $target = $(e.target)
, $embeddedForm = $target.closest(".form-embedded")
, refLink = $target.closest(".form-embedded-wrapper").find(".add-more-listitem")
, delLink = $target.remove();
refLink.attr("_field_position", parseInt(refLink.attr("_field_position"), 10) - 1);
if($embeddedForm.prevAll(".form-embedded").length>1){
$embeddedForm.prev().prepend(delLink);
}
$embeddedForm.remove();
}
}, ".add-more-delete-link");
${root}.on({
click : function(e){
var $target = $(e.target)
, $form = $target.closest("form")
, templ = $("#template-"+$target.attr("_field_key"))
, new_node = templ.clone().removeAttr("id")
, new_position = parseInt($target.attr("_field_position"), 10) + 1
, inc = function(elem, attr){
elem.attr(attr, elem.attr(attr).replace(/-[0-9]+\./g, "-"+new_position+"."))
};
new_node.find("input[type=hidden]").remove();
new_node.find("label").each(function(index, elem){
elem = $(elem); inc(elem, "for");
});
new_node.find("input,select,textarea").each(function(index, elem){
elem = $(elem);
inc(elem, "id");
inc(elem, "name");
elem.val("");
});
new_node.find(".control-number").html(new_position+1);
$target.attr("_field_position", new_position);
$target.closest(".add-more").before(new_node);
var delete_link = $form.find(".add-more-delete-link").remove();
if(delete_link.length === 0){
delete_link = $('
×')
}
new_node.prepend(delete_link);
new_node.find("[generated]").remove();
new_node.find(".error").removeClass("error");
new_node.find(".valid").removeClass("valid");
}
}, ".add-more-listitem");
%endif
%def>
<% modal_id = "confirmSubmit-{}".format(randint(0, 100000)) %>