diff --git a/modoboa/core/templates/core/user_profile.html b/modoboa/core/templates/core/user_profile.html index dcf0f473f..60face325 100644 --- a/modoboa/core/templates/core/user_profile.html +++ b/modoboa/core/templates/core/user_profile.html @@ -1,4 +1,4 @@ -{% load i18n lib_tags %}{% load url from future %} +{% load i18n form_tags %}{% load url from future %}

{% trans "Profile" %} {% trans "Update your personal information" %}


{% trans "You can't create a new domain administrator" %}{% endif %} +{% else %} +
{% trans "You can't create a new domain administrator" %}
+{% endif %} diff --git a/modoboa/extensions/admin/templates/admin/forward.html b/modoboa/extensions/admin/templates/admin/forward.html index dae315d71..432dff59e 100644 --- a/modoboa/extensions/admin/templates/admin/forward.html +++ b/modoboa/extensions/admin/templates/admin/forward.html @@ -1,4 +1,4 @@ -{% load i18n lib_tags %}{% load url from future %} +{% load i18n form_tags %}{% load url from future %}

{% trans "Forward" %} {% trans "Automatically forward emails to another address" %}


{% trans "Help" %}

diff --git a/modoboa/extensions/admin/templates/admin/mailform.html b/modoboa/extensions/admin/templates/admin/mailform.html index 8660bee27..2d0d48c28 100644 --- a/modoboa/extensions/admin/templates/admin/mailform.html +++ b/modoboa/extensions/admin/templates/admin/mailform.html @@ -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 %} diff --git a/modoboa/extensions/admin/templates/admin/newdomainform.html b/modoboa/extensions/admin/templates/admin/newdomainform.html index 31021f1dc..b8743c9ed 100644 --- a/modoboa/extensions/admin/templates/admin/newdomainform.html +++ b/modoboa/extensions/admin/templates/admin/newdomainform.html @@ -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" %} diff --git a/modoboa/extensions/admin/templates/admin/permsform.html b/modoboa/extensions/admin/templates/admin/permsform.html index e0f6954e9..b1856a04e 100644 --- a/modoboa/extensions/admin/templates/admin/permsform.html +++ b/modoboa/extensions/admin/templates/admin/permsform.html @@ -1,2 +1,2 @@ -{% load lib_tags %} +{% load form_tags %} {% render_fields_group form "domains" %} diff --git a/modoboa/extensions/amavis/templates/amavis/domain_content_filter.html b/modoboa/extensions/amavis/templates/amavis/domain_content_filter.html index f5680dcdc..49cee4ad6 100644 --- a/modoboa/extensions/amavis/templates/amavis/domain_content_filter.html +++ b/modoboa/extensions/amavis/templates/amavis/domain_content_filter.html @@ -1,4 +1,4 @@ -{% load i18n lib_tags %} +{% load i18n form_tags %} {% render_field form.bypass_virus_checks %} {% render_field form.bypass_spam_checks %}
diff --git a/modoboa/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html b/modoboa/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html index ff477da2a..99f7ef54a 100644 --- a/modoboa/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html +++ b/modoboa/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html @@ -1,4 +1,4 @@ -{% load i18n lib_tags %}{% load url from future %} +{% load i18n form_tags %}{% load url from future %}

{% trans "Auto-reply message" %} {% trans "Define a message to automatically send when you are off" %}


{% endif %} {% render_field form.name %} diff --git a/modoboa/extensions/webmail/templates/webmail/compose.html b/modoboa/extensions/webmail/templates/webmail/compose.html index c8aafa45a..1ccea4a29 100644 --- a/modoboa/extensions/webmail/templates/webmail/compose.html +++ b/modoboa/extensions/webmail/templates/webmail/compose.html @@ -1,4 +1,4 @@ -{% load i18n lib_tags %}{% load url from future %} +{% load i18n form_tags %}{% load url from future %} {% csrf_token %}
diff --git a/modoboa/lib/templatetags/form_tags.py b/modoboa/lib/templatetags/form_tags.py new file mode 100644 index 000000000..dcd3796e6 --- /dev/null +++ b/modoboa/lib/templatetags/form_tags.py @@ -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 "%s" % (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) diff --git a/modoboa/lib/templatetags/lib_tags.py b/modoboa/lib/templatetags/lib_tags.py index 63e84a14f..f8cd51d13 100644 --- a/modoboa/lib/templatetags/lib_tags.py +++ b/modoboa/lib/templatetags/lib_tags.py @@ -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 "%s" % (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( diff --git a/modoboa/templates/common/generic_field.html b/modoboa/templates/common/generic_field.html index c83878e6c..a2243461e 100644 --- a/modoboa/templates/common/generic_field.html +++ b/modoboa/templates/common/generic_field.html @@ -1,54 +1,55 @@ -{% load i18n core_tags lib_tags %} +{% load i18n core_tags form_tags %}