Add support for descriptive texts over m2m checkboxes
authorMagnus Hagander <magnus@hagander.net>
Mon, 11 Dec 2017 14:30:50 +0000 (15:30 +0100)
committerMagnus Hagander <magnus@hagander.net>
Mon, 11 Dec 2017 14:30:50 +0000 (15:30 +0100)
This allows the assignment of "hover mouse to show"-descriptions for m2m
fields with multiple checkboxes.

pgweb/util/helpers.py
templates/base/form.html

index b24885bfba6590cfb2ff0c10496eab9f4ec0e54f..f553e79bc5268da111350baaa33b2814cb151f36 100644 (file)
@@ -58,10 +58,16 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for
        else:
                markdownfields = None
 
+       if hasattr(form, 'described_checkboxes'):
+               described_checkboxes = form.described_checkboxes
+       else:
+               described_checkboxes = None
+
        return render_to_response(formtemplate, {
                'form': form,
                'formitemtype': instance._meta.verbose_name,
                'markdownfields': markdownfields,
+               'described_checkboxes': described_checkboxes,
                'form_intro': hasattr(form, 'form_intro') and form.form_intro or None,
                'toggle_fields': hasattr(form, 'toggle_fields') and form.toggle_fields or None,
                'jquery': hasattr(form, 'jquery') and form.jquery or None,
index 87f1c6e49763c9ac877dfe2683e2398d7b8a98ef..6ec2315ef286d2a8c295bf8bab3b8a0d65ece558 100644 (file)
@@ -44,7 +44,7 @@
 
 {% block extrahead %}
 {{ block.super }}
-{%if toggle_fields or jquery %}
+{%if toggle_fields or described_checkboxes or jquery %}
 <script type="text/javascript" src="/media/js/jquery.min.js"></script>
 {%endif%}
 {%if markdownfields%}
       {%for mdf in markdownfields %}
          attach_showdown_preview('id_{{mdf}}', 0);
       {%endfor%}
+      {%for cbf, descs in described_checkboxes.items%}
+{%comment%}more than a little ugly, but django uses a sequence and not the id for the labels{%endcomment%}
+       var descs={
+{%for k,v in descs %}
+         '{{k}}': '{{v|escapejs}}',
+{%endfor%}
+       };
+       $('ul#id_{{cbf}} li').each(function (i,e) {
+          var id = $(e).find('input[type=checkbox]')[0].value;
+          e.title=descs[id];
+       });
+      {%endfor%}
    }
 </script>
 {%if toggle_fields %}