code cleanups
[qcg-portal.git] / qcg / templatetags / qcg_utils.py
index 33dd748..cb4e694 100644 (file)
@@ -1,7 +1,11 @@
 from datetime import datetime, timedelta
+from pyexpat import ExpatError
+from xml.dom import minidom
 
 from django import template
-from django.utils.html import format_html
+from django.conf import settings
+from django.forms.utils import flatatt
+from django.utils.html import format_html, format_html_join, conditional_escape
 from django.utils.timesince import timesince
 from django.utils.timezone import now
 
@@ -9,6 +13,7 @@ from qcg.utils import localtime_str
 
 
 register = template.Library()
+register.filter('flatatt', flatatt)
 
 
 @register.simple_tag
@@ -27,3 +32,31 @@ def display_attribute(label, value):
                        u'   <div class="col-sm-3 text-right text-muted">{}</div>'
                        u'   <div class="col-sm-9">{}</div>'
                        u'</div>', label, value)
+
+
+@register.simple_tag(takes_context=True)
+def get_params_as_hidden(context, *params):
+    return format_html_join('\n', u'<input type="hidden" name="{}" value="{}">',
+                            ((param, v) for param in params for v in context['request'].GET.getlist(param, [])))
+
+
+@register.inclusion_tag('qcg/tags/bootstrap_checkbox.html')
+def bootstrap_checkbox(field, label_class=settings.BOOTSTRAP3['horizontal_label_class'],
+                       field_class=settings.BOOTSTRAP3['horizontal_field_class']):
+    return {'field': field, 'attrs': flatatt(field.field.widget.attrs),
+            'label_class': label_class, 'field_class': field_class}
+
+
+@register.inclusion_tag('qcg/tags/bootstrap_button_group.html')
+def bootstrap_button_group(field, label_class=settings.BOOTSTRAP3['horizontal_label_class'],
+                           field_class=settings.BOOTSTRAP3['horizontal_field_class']):
+    return {'field': field, 'label_class': label_class, 'field_class': field_class}
+
+
+@register.filter(needs_autoescape=True)
+def format_xml(string, autoescape=None):
+    esc = conditional_escape if autoescape else lambda x: x
+    try:
+        return esc(minidom.parseString(string).toprettyxml(indent='    '))
+    except ExpatError:
+        return string