Moving form rendering tags to a dedicated file.

see #585
This commit is contained in:
Antoine Nguyen
2014-08-27 21:28:30 +02:00
parent 845e6d2efd
commit f58c002251
25 changed files with 195 additions and 150 deletions
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}{% load url from future %}
{% load i18n form_tags %}{% load url from future %}
<h2>{% trans "Profile" %} <small>{% trans "Update your personal information" %}</small></h2>
<hr>
<form class="form-horizontal" method="POST" action="{% url 'modoboa.core.views.user.profile' %}"
+8 -6
View File
@@ -23,8 +23,7 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
help_text=ugettext_lazy(
"Default quota in MB applied to mailboxes. Leave empty to use the "
"default value."
),
widget=forms.TextInput(attrs={"class": "col-md-1 form-control"})
)
)
aliases = DomainNameField(
label=ugettext_lazy("Alias(es)"),
@@ -32,12 +31,11 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
help_text=ugettext_lazy(
"Alias(es) of this domain. Indicate only one name per input, "
"press ENTER to add a new input."
),
widget=forms.TextInput(attrs={"class": "col-md-1 form-control"})
)
)
name = DomainNameField(
widget=forms.TextInput(attrs={"class": "col-md-1 form-control"})
)
widget=forms.TextInput()
)
class Meta:
model = Domain
@@ -49,6 +47,10 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
self.oldname = kwargs["instance"].name
super(DomainFormGeneral, self).__init__(*args, **kwargs)
self.field_widths = {
"quota": 3
}
if len(args) and isinstance(args[0], QueryDict):
self._load_from_qdict(args[0], "aliases", DomainNameField)
elif "instance" in kwargs:
@@ -1,4 +1,4 @@
{% load lib_tags %}
{% load form_tags %}
{% render_field form.role %}
{% render_field form.username %}
{% render_field form.first_name %}
@@ -1,4 +1,4 @@
{% extends "common/generic_modal_form.html" %}{% load lib_tags %}
{% extends "common/generic_modal_form.html" %}{% load form_tags %}
{% block formbody %}
{% render_field form.email %}
{% render_fields_group form "recipients" %}
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}
{% load i18n form_tags %}
{% render_field form.name %}
{% render_field_appended form.quota _("MB") %}
{% render_fields_group form "aliases" %}
@@ -1,5 +1,8 @@
{% load i18n lib_tags %}{% if form.fields %}
{% load i18n form_tags %}
{% if form.fields %}
{% render_field form.create_dom_admin %}
{% render_field_appended form.dom_admin_username "@" %}
{% render_field form.create_aliases %}
{% else %}<div class="alert alert-warning">{% trans "You can't create a new domain administrator" %}</div>{% endif %}
{% else %}
<div class="alert alert-warning">{% trans "You can't create a new domain administrator" %}</div>
{% endif %}
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}{% load url from future %}
{% load i18n form_tags %}{% load url from future %}
<h2>{% trans "Forward" %} <small>{% trans "Automatically forward emails to another address" %}</small></h2>
<hr>
<form class="form-horizontal" method="POST" action="{% url 'modoboa.extensions.admin.views.user.forward' %}"
@@ -1,5 +1,5 @@
{% extends "common/generic_modal_form.html" %}
{% load lib_tags i18n %}
{% load form_tags i18n %}
{% block formbody %}
<div class="alert alert-info">
<h4>{% trans "Help" %}</h4>
@@ -1,4 +1,4 @@
{% load lib_tags %}
{% load form_tags %}
{% render_field form.email %}
{% include "common/generic_field.html" with field=form.quota help_display_mode="tooltip" appended_text=_("MB") activator=True activator_value=form.quota_act.value deactivate_if_empty=False activator_label=_("Use domain default value") %}
{% render_extra_fields form %}
@@ -1,4 +1,4 @@
{% extends "common/generic_modal_form.html" %}{% load lib_tags %}{% block formbody %}
{% extends "common/generic_modal_form.html" %}{% load form_tags %}{% block formbody %}
{% render_field form.name %}
{% render_field_appended form.quota _("MB") %}
{% render_fields_group form "aliases" %}
@@ -1,2 +1,2 @@
{% load lib_tags %}
{% load form_tags %}
{% render_fields_group form "domains" %}
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}
{% load i18n form_tags %}
{% render_field form.bypass_virus_checks %}
{% render_field form.bypass_spam_checks %}
<div class="input-group">
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}{% load url from future %}
{% load i18n form_tags %}{% load url from future %}
<h2>{% trans "Auto-reply message" %} <small>{% trans "Define a message to automatically send when you are off" %}</small></h2>
<hr>
<form class="form-horizontal" method="POST"
@@ -1,4 +1,4 @@
{% load lib_tags %}
{% load form_tags %}
{% render_field form.name %}
{% render_field form.target_host %}
{% include "postfix_relay_domains/service_field.html" with field=form.service %}
@@ -1,5 +1,5 @@
{% extends "common/generic_modal_form.html" %}
{% load i18n lib_tags sfilters_tags %}
{% load i18n form_tags sfilters_tags %}
{% block formbody %}
{% if oldname %}<input type="hidden" name="oldname" value="{{ oldname }}" />{% endif %}
{% render_field form.name %}
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}{% load url from future %}
{% load i18n form_tags %}{% load url from future %}
<form class="form-horizontal" method="POST" action="{{ posturl }}" id="composemail">{% csrf_token %}
<div id="compose-container" class="col-lg-12">
<div id="mailheader" class="well">
+116
View File
@@ -0,0 +1,116 @@
"""
Form rendering tags.
"""
from django import forms
from django import template
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy
from modoboa.lib.formutils import SeparatorField
register = template.Library()
@register.simple_tag
def render_form(form, tpl=None):
"""Render a form."""
if tpl is not None:
return render_to_string(tpl, dict(form=form))
ret = ""
for field in form:
ret += "%s\n" % render_field(field)
return ret
def configure_field_classes(field):
"""Add required CSS classes to field."""
if isinstance(field.field.widget, forms.CheckboxInput) or \
isinstance(field.field.widget, forms.RadioSelect):
return
if "class" in field.field.widget.attrs:
field.field.widget.attrs["class"] += " form-control"
else:
field.field.widget.attrs["class"] = "form-control"
@register.simple_tag
def render_field(field, help_display_mode="tooltip"):
"""Render a field."""
from modoboa.core.templatetags.core_tags import visirule
if type(field.field) is SeparatorField:
return "<h5%s>%s</h5>" % (visirule(field), unicode(field.label))
configure_field_classes(field)
return render_to_string("common/generic_field.html", dict(
field=field, help_display_mode=help_display_mode
))
@register.simple_tag
def render_field_appended(field, text):
configure_field_classes(field)
return render_to_string("common/generic_field.html", dict(
field=field, help_display_mode="tooltip", appended_text=text
))
@register.simple_tag
def render_field_with_activator(field, activator_label=ugettext_lazy("activate")):
return render_to_string("common/generic_field.html", {
"field": field, "help_display_mode": "tooltip", "activator": True,
"activator_label": activator_label, "deactivate_if_empty": True
})
@register.simple_tag
def render_and_hide_field(field):
return render_to_string("common/generic_field.html", dict(
field=field, hidden=True
))
@register.simple_tag
def render_fields_group(form, pattern):
first = forms.BoundField(form, form.fields[pattern], pattern)
configure_field_classes(first)
label = first.label
group = [first]
cpt = 1
haserror = len(first.errors) != 0
while True:
fname = "%s_%d" % (pattern, cpt)
if not fname in form.fields:
break
bfield = forms.BoundField(form, form.fields[fname], fname)
if len(bfield.errors):
haserror = True
configure_field_classes(bfield)
group += [bfield]
cpt += 1
return render_to_string("common/generic_fields_group.html", dict(
label=label, help_text=first.help_text, group=group, haserror=haserror
))
@register.simple_tag
def render_extra_fields(form):
result = ''
for fname in form.extra_fields:
result += render_to_string("common/generic_field.html", {
'field': form[fname], 'help_display_mode': 'tooltip'
})
return result
@register.simple_tag
def render_field_width(field):
"""."""
form = field.form
if hasattr(form, "field_widths") and field.name in form.field_widths:
width = form.field_widths[field.name]
else:
width = 5
return "col-lg-{0} col-md-{0} col-sm-{0}".format(width)
+2 -81
View File
@@ -1,11 +1,11 @@
# coding: utf-8
from datetime import datetime
from django import template
from django.template import Template, Context
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy
from modoboa.lib import events
from modoboa.lib.formutils import SeparatorField
register = template.Library()
@@ -25,85 +25,6 @@ def tolist(values):
return "[%s]" % ",".join(['"%s"' % v for v in values])
@register.simple_tag
def render_form(form, tpl=None):
if tpl is not None:
return render_to_string(tpl, dict(form=form))
ret = ""
for field in form:
ret += "%s\n" % render_field(field)
return ret
@register.simple_tag
def render_field(field, help_display_mode="tooltip"):
from modoboa.core.templatetags.core_tags import visirule
if type(field.form.fields[field.name]) is SeparatorField:
return "<h5%s>%s</h5>" % (visirule(field), unicode(field.label))
return render_to_string("common/generic_field.html", dict(
field=field, help_display_mode=help_display_mode
))
@register.simple_tag
def render_field_appended(field, text):
return render_to_string("common/generic_field.html", dict(
field=field, help_display_mode="tooltip", appended_text=text
))
@register.simple_tag
def render_field_with_activator(field, activator_label=ugettext_lazy("activate")):
return render_to_string("common/generic_field.html", {
"field": field, "help_display_mode": "tooltip", "activator": True,
"activator_label": activator_label, "deactivate_if_empty": True
})
@register.simple_tag
def render_and_hide_field(field):
return render_to_string("common/generic_field.html", dict(
field=field, hidden=True
))
@register.simple_tag
def render_fields_group(form, pattern):
from django.forms import forms
first = forms.BoundField(form, form.fields[pattern], pattern)
label = first.label
group = [first]
cpt = 1
haserror = len(first.errors) != 0
while True:
fname = "%s_%d" % (pattern, cpt)
if not fname in form.fields:
break
bfield = forms.BoundField(form, form.fields[fname], fname)
if len(bfield.errors):
haserror = True
group += [bfield]
cpt += 1
return render_to_string("common/generic_fields_group.html", dict(
label=label, help_text=first.help_text, group=group, haserror=haserror
))
@register.simple_tag
def render_extra_fields(form):
result = ''
for fname in form.extra_fields:
result += render_to_string("common/generic_field.html", {
'field': form[fname], 'help_display_mode': 'tooltip'
})
return result
@register.simple_tag
def pagination_bar(page):
return render_to_string("common/pagination_bar.html", dict(
+40 -39
View File
@@ -1,54 +1,55 @@
{% load i18n core_tags lib_tags %}
{% load i18n core_tags form_tags %}
<div class="form-group
{% if field.errors %}error{% endif %}
{{ extra_classes }}"{% visirule field %}
{% if hidden %}style="display: none"{% endif %}
>
{% if field.label %}
<label class="control-label col-lg-4 col-md-4 col-sm-4" for="id_{{ field.html_name }}">{{ field.label }}
{% if help_display_mode == "tooltip" and field.help_text %}
<a href="#" class="help" data-original-title="{% trans 'Help:' %} {{ field.label }}" data-content="{{ field.help_text }}" rel="popover">?</a>
{% if field.label %}
<label class="control-label col-lg-4 col-md-4 col-sm-4" for="id_{{ field.html_name }}">{{ field.label }}
{% if help_display_mode == "tooltip" and field.help_text %}
<a href="#" class="help" data-original-title="{% trans 'Help:' %} {{ field.label }}" data-content="{{ field.help_text }}" rel="popover">?</a>
{% endif %}
</label>
{% endif %}
<div class="{% render_field_width field %}">
{% if appended_text %}
<div class="input-group">
{% endif %}
</label>
{% endif %}
<div class="col-lg-5 col-md-5 col-sm-5">
{% if appended_text %}
<div class="input-group">
{% endif %}
{{ field }}
{% if appended_text %}
<span class="input-group-addon">{{ appended_text }}</span></div>
{{ field }}
{% if appended_text %}
<span class="input-group-addon">{{ appended_text }}</span>
</div>
{% endif %}
{% if help_display_mode == "inline" and field.help_text %}
<span class="help-block pull-right">{{ field.help_text }}</span>
<span class="help-block pull-right">{{ field.help_text }}</span>
{% endif %}
{% if inline_message %}
<span class="help-block pull-right">{{ inline_message }}</span>
<span class="help-block pull-right">{{ inline_message }}</span>
{% endif %}
{% if activator %}
<div class="checkbox">
<label class="checkbox-inline" for="id_{{ field.name }}_act">
<input type="checkbox" class="activator" id="id_{{ field.name }}_act" name="{{ field.name }}_act"
{% if activator_value %}checked='checked'
{% else %}
{% if deactivate_if_empty and field.value == None %}
checked='checked'
{% endif %}
{% endif %}/>
{{ activator_label }}
</label>
</div>
{% endif %}
{% if field.errors %}
<p class="help-block">
{% for error in field.errors %}
{{ error|safe }}
{% endfor %}
</p>
{% endif %}
{% block extra_controls %}
{% endblock %}
<div class="checkbox">
<label class="checkbox-inline" for="id_{{ field.name }}_act">
<input type="checkbox" class="activator" id="id_{{ field.name }}_act" name="{{ field.name }}_act"
{% if activator_value %}checked='checked'
{% else %}
{% if deactivate_if_empty and field.value == None %}
checked='checked'
{% endif %}
{% endif %}/>
{{ activator_label }}
</label>
</div>
{% endif %}
{% if field.errors %}
<p class="help-block">
{% for error in field.errors %}
{{ error|safe }}
{% endfor %}
</p>
{% endif %}
{% block extra_controls %}
{% endblock %}
</div>
</div>
@@ -1,10 +1,13 @@
{% extends "common/generic_modal.html" %}
{% load lib_tags %}
{% load form_tags %}
{% block modalbody %}
{% if error %}<div class="alert alert-danger">{{ error }}</div>{% endif %}
{% if error %}<div class="alert alert-danger">{{ error }}</div>{% endif %}
<form class="form-horizontal" action="{{ action }}" enctype="{{ enctype }}"
method="POST" id="{{ formid }}" name="{{ formid }}"
target="{{ target }}">{% csrf_token %}
target="{{ target }}">
{% csrf_token %}
{% block formbody %}
{% render_form form %}
{% block extrafields %}{% endblock %}
+1 -1
View File
@@ -1,4 +1,4 @@
{% load lib_tags %}
{% load form_tags %}
<div class="tabbable">
<ul class="nav nav-tabs">
{% for form in forms %}<li{% if forloop.first %} class="active"{% endif %}><a href="#{{ forloop.counter }}" data-toggle="tab">{{ form.label }}</a></li>
+1 -1
View File
@@ -1,5 +1,5 @@
{% extends "common/generic_modal.html" %}
{% load i18n lib_tags %}
{% load i18n form_tags %}
{% block modalbody %}
<form id="{{ formid }}" class="form-horizontal" action="{{ action }}" method="POST">{% csrf_token %}
<ul class="nav nav-pills">{% for tab in tabs %}
+1 -1
View File
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}
{% load i18n form_tags %}
<div class="modal-dialog">
<div class="modal-content">
-1
View File
@@ -6,7 +6,6 @@
<title>{% block pagetitle %}{% endblock %}</title>
<link rel="icon" type="image/png" href="{{ STATIC_URL }}css/logo-icon.png" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-responsive.css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-datetimepicker.css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-select.min.css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/custom.css" />
+1 -1
View File
@@ -1,4 +1,4 @@
<!DOCTYPE html>{% load i18n core_tags lib_tags %}{% load url from future %}
<!DOCTYPE html>{% load i18n core_tags lib_tags form_tags %}{% load url from future %}
<html lang="{{ LANGUAGE_CODE }}">
<head>
<meta charset="utf-8" />