Browse Source

Early implementation

rafalp 6 years ago
parent
commit
b06d6efcd3

+ 35 - 0
misago/admin/templatetags/misago_admin_form.py

@@ -0,0 +1,35 @@
+from django import forms, template
+
+register = template.Library()
+
+
+@register.inclusion_tag("misago/admin/form/row.html")
+def admin_form_row(field, label_class, field_class):
+    return {
+        "field": field,
+        "label_class": label_class,
+        "field_class": field_class,
+    }
+
+
+@register.inclusion_tag("misago/admin/form/input.html")
+def admin_form_input(field):
+    widget_context = field.field.widget.get_context(field.html_name, field.value(), {})
+
+    return {
+        "field": field,
+        "attrs": widget_context["widget"],
+    }
+
+
+@register.filter
+def is_select_field(field):
+    return isinstance(field.field.widget, forms.Select)
+
+
+@register.filter
+def extract_choices_from_attrs(attrs):
+    """Filter that extracts field choices into easily iterable list"""
+    if attrs.get("optgroups"):
+        return [i[1][0] for i in attrs["optgroups"]]
+    return []

+ 13 - 0
misago/templates/misago/admin/form/input.html

@@ -0,0 +1,13 @@
+{% load misago_admin_form misago_shorthands %}
+{{ attrs }}
+{% if field|is_select_field %}
+  <select class="form-control" id="{{ field.id_for_label }}" name="{{ field.html_name }}"{{ attrs.required|iftrue:" required" }}>
+    {% for option in attrs|extract_choices_from_attrs %}
+      <option{% if option.value %} value="{{ option.value }}"{% endif %}{{ option.selected|iftrue:" selected" }}>
+        {{ option.label }}
+      </option>
+    {% endfor %}
+  </select>
+{% else %}
+  <input class="form-control" id="{{ field.id_for_label }}" name="{{ field.html_name }}" type="{{ attrs.type }}"{% if attrs.value is not None %} value="{{ attrs.value }}"{% endif %}{{ attrs.required|iftrue:" required" }}>
+{% endif %}

+ 17 - 0
misago/templates/misago/admin/form/row.html

@@ -0,0 +1,17 @@
+{% load misago_admin_form %}
+<div class="form-group{% if field.errors %} has-error{% endif %}">
+  <label for="{{ field.id_for_label }}" class="{% if label_class %}{{ label_class }} {% endif %}control-label">
+    {{ field.label }}:
+  </label>
+  <div class="{{ field_class }}">
+    {% admin_form_input field %}
+    {% for error in field.errors %}
+      <div class="text-danger">
+        <strong>{{ error }}</strong>
+      </div>
+    {% endfor %}
+    {% if field.help_text %}
+      <div class="help-block">{{ field.help_text }}</div>
+    {% endif %}
+  </div>
+</div>

+ 8 - 8
misago/templates/misago/admin/users/new.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_admin_forms %}
+{% load i18n misago_admin_form %}
 
 
 {% block title %}
@@ -30,25 +30,25 @@ class="form-horizontal"
   <fieldset>
     <legend>{% trans "Basic account settings" %}</legend>
 
-    {% form_row form.username label_class field_class %}
+    {% admin_form_row form.username label_class field_class %}
 
     {% if 'rank' in form.fields %}
-    {% form_row form.rank label_class field_class %}
+      {% admin_form_row form.rank label_class field_class %}
     {% endif %}
 
-    {% form_row form.title label_class field_class %}
-    {% form_row form.roles label_class field_class %}
+    {% admin_form_row form.title label_class field_class %}
+    {% admin_form_row form.roles label_class field_class %}
 
     {% if 'staff_level' in form.fields %}
-    {% form_row form.staff_level label_class field_class %}
+      {% admin_form_row form.staff_level label_class field_class %}
     {% endif %}
 
   </fieldset>
   <fieldset>
     <legend>{% trans "Sign-in credentials" %}</legend>
 
-    {% form_row form.email label_class field_class %}
-    {% form_row form.new_password label_class field_class %}
+    {% admin_form_row form.email label_class field_class %}
+    {% admin_form_row form.new_password label_class field_class %}
 
   </fieldset>
   {% endwith %}