%else:
<%
html_type = props.html_type
classes = getattr(props, 'classes', default_classes)
if getattr(props, "is_number_validator", False):
html_type = 'text'
classes+= " number"
maxpropname = 'max'
minpropname = 'min'
extras = [("step", props.step)]
else:
maxpropname = 'maxlength'
minpropname = 'minlength'
extras = []
%>
%if hasattr(props, 'html_append'):
%elif hasattr(props, 'html_prepend'):
${_(props.html_prepend)|n} \
%endif
${_(props.html_append)|n}
%else:
>
%endif
%if hasattr(props, 'html_append') or hasattr(props, 'html_prepend'):
%endif
%endif
%if getattr(props, 'html_help', False):
${_(props.html_help)|n}
%endif
%def>
<%def name="buildLabel(widget, classes = 'control-label', field_id_name = None)">
<% label = getattr(widget, "html_label", " ") %>
%if callable(label):
${label(request, widget)|n}
%else:
${_(label)|n}
%endif
%def>
<%def name="renderFormLine(field_id_name, field, props, values, errors, default_classes = 'span3')">
%if props.html_type == 'hidden':
%else:
%if not getattr(props, "suppress_label", False):
${self.buildLabel(props, 'control-label', field_id_name)}
%endif
%if hasattr(props, 'widget'):
<%doc> Try determine caller with the widget definition%doc>
%for callItem in filter(None, caller):
%if hasattr(callItem, props.widget):
${getattr(callItem, props.widget)(field_id_name, values.get(field), props, values, errors, default_classes)|n}
<% break %>
%endif
%endfor
%else:
${self.renderControl(id_name = field_id_name, value=values.get(field), props = props, default_classes = default_classes)}
%endif
%if field in errors:
${errors[field]}
%endif
%endif
%def>
<%def name="buildLayoutElement(field, values)">
<${field.tag} ${'class="{}"'.format(field.classes) if field.classes else ''|n}>${_(field.getLabel(values))|n}${field.tag}>
%def>
<%def name="buildCombinedFormLine(key, schema, widget, values, errors)">
<%
fields, local_errors = widget.getFields(schema), widget.getErrors(errors)
%>
%def>
<%def name="buildListItemSubform(key, position, schema, values, errors, id_key = None, default_classes = 'span3', props = None)">
<${schema.html_tag} class="form-embedded ${schema.html_classes}" ${'id="template-{}"'.format(key.replace(".","-")) if position == 0 else ""|n}>
%if position > 0:
checkbox
%endif
${position+1}
%if id_key:
%endif
%for i, field in enumerate(schema.form_order):
<%
props = schema.fields[field]
field_id_name = "{}-{}.{}".format(key, position, field)
%>
${self.renderFormLine(field_id_name, field, props, values, getattr(errors, "error_dict", dict()), default_classes = getattr(schema, "default_classes", default_classes))}
%endfor
${schema.html_tag}>
%def>
<%def name="buildListSubforms(field_id_name, field, props, values, errors, id_key = None)">
%def>
<%def name="buildSubform(key, schema, values, errors, default_classes = 'span3')">
<${schema.html_tag} class="${schema.html_classes}">
%for i, field in enumerate(schema.form_order):
%if schema.fields.get(field):
<%
props = schema.fields[field]
field_id_name = "{}.{}".format(key, field)
%>
${self.renderFormLine(field_id_name, field, props, values, getattr(errors, "error_dict", dict()), default_classes = default_classes)}
%elif hasattr(field, "elements"):
${self.buildCombinedFormLine(key, schema, field, values, errors)}
%else:
${self.buildLayoutElement(field, values)}
%endif
%endfor
${schema.html_tag}>
%def>
<%def name="prelims(schema)">
%def>
<%def name="buildFormFields(schema, form_order, values, errors)">
%for i, field in enumerate(form_order):
%if hasattr(field, "structure"):
%if hasattr(field, "form_order"):
<${field.tag} ${'class="{}"'.format(field.classes) if field.classes else ''|n}">
${self.buildFormFields(schema, field.form_order, values, errors)}
${field.tag}>
%elif hasattr(field, "widget"):
<%doc> Try determine caller with the widget definition%doc>
%for callItem in filter(None, caller):
%if hasattr(callItem, field.widget):
${getattr(callItem, field.widget)()|n}
<% break %>
%endif
%endfor
%elif hasattr(field, "elements"):
${self.buildCombinedFormLine(schema.form_id, schema, field, values, errors)}
%else:
${self.buildLayoutElement(field, values)}
%endif
%elif schema.fields.get(field):
<%
props = schema.fields[field]
field_id_name = "{}.{}".format(schema.form_id, field)
%>
%if props.repeating == True and isinstance(props, formencode.ForEach) and not hasattr(props, "html_type"):
${self.buildListSubforms(field_id_name, field, props, values, errors)}
%elif props.repeating == False and isinstance(props, formencode.Schema) and not hasattr(props, "html_type"):
${self.buildSubform(field_id_name, props, values.get(field, dict()), errors.get(field, dict()))}
%else:
${self.renderFormLine(field_id_name, field, props, values, errors, default_classes = getattr(schema, "default_classes", "span3"))}
%endif
%endif
%endfor
<%doc> Try determine caller with the appendix definition%doc>
%for callItem in caller:
%if callItem and hasattr(callItem, 'appendix'):
${callItem.appendix()}
<% break %>
%endif
%endfor
%def>
<%def name="buildFormContent(schema, values, errors)">
${self.prelims(schema)}
${self.buildFormFields(schema, schema.form_order, values, errors)}
%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)) %>