From 109b62c28aa97eccf5d61f724ef42510adb19a8e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 18 Aug 2011 10:48:06 -0400 Subject: [PATCH] Improved the metadata type and metadata set selection widget --- apps/common/widgets.py | 31 +++++++++++++++++++++++++++++++ apps/metadata/forms.py | 8 ++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/apps/common/widgets.py b/apps/common/widgets.py index 9ad951c52e..dcbdd69149 100644 --- a/apps/common/widgets.py +++ b/apps/common/widgets.py @@ -1,4 +1,5 @@ import os +from itertools import chain from django.utils.translation import ugettext_lazy as _ from django.utils.safestring import mark_safe @@ -97,3 +98,33 @@ class EmailInput(forms.widgets.Input): autocapitalize='off', spellcheck='false')) return super(EmailInput, self).render(name, value, attrs=attrs) + + +class ScrollableCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): + def render(self, name, value, attrs=None, choices=()): + if value is None: value = [] + has_id = attrs and 'id' in attrs + final_attrs = self.build_attrs(attrs, name=name) + output = [u'') + #return mark_safe(u'\n'.join(output)) + result = u'\n'.join(output) + + #result = super(ScrollableCheckboxSelectMultiple, self).render(name, value, attrs=None, choices=()) + return mark_safe(u'
%s
' % result) diff --git a/apps/metadata/forms.py b/apps/metadata/forms.py index 4b663392d5..ce921ee47c 100644 --- a/apps/metadata/forms.py +++ b/apps/metadata/forms.py @@ -2,6 +2,8 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from django.forms.formsets import formset_factory +from common.widgets import ScrollableCheckboxSelectMultiple + from metadata.conf.settings import AVAILABLE_MODELS from metadata.conf.settings import AVAILABLE_FUNCTIONS from metadata.models import MetadataSet, MetadataType, \ @@ -83,14 +85,16 @@ class MetadataSelectionForm(forms.Form): queryset=MetadataSet.objects.all(), label=_(u'Metadata sets'), required=False, - widget=forms.widgets.SelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) + #widget=forms.widgets.SelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) + widget=ScrollableCheckboxSelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) ) metadata_types = forms.ModelMultipleChoiceField( queryset=MetadataType.objects.all(), label=_(u'Metadata'), required=False, - widget=forms.widgets.SelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) + #widget=forms.widgets.SelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) + widget=ScrollableCheckboxSelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) ) MetadataRemoveFormSet = formset_factory(MetadataRemoveForm, extra=0)