diff options
Diffstat (limited to 'chimere/main/widgets.py')
| -rw-r--r-- | chimere/main/widgets.py | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/chimere/main/widgets.py b/chimere/main/widgets.py index 4ad6475..64893ab 100644 --- a/chimere/main/widgets.py +++ b/chimere/main/widgets.py @@ -33,11 +33,6 @@ URL_OSM_CSS = ["http://www.openlayers.org/api/theme/default/style.css"] URL_OSM_JS = ["http://www.openlayers.org/api/OpenLayers.js", "http://www.openstreetmap.org/openlayers/OpenStreetMap.js"] -class ManyToManyField_NoSyncdb(models.ManyToManyField): - def __init__(self, *args, **kwargs): - super(ManyToManyField_NoSyncdb, self).__init__(*args, **kwargs) - self.creates_table = False - def getMapJS(area_name=''): '''Variable initialization for drawing the map ''' @@ -136,7 +131,7 @@ class PointField(models.PointField): keys.update(defaults) return super(PointField, self).formfield(**keys) - def clean(self, value): + def clean(self, value, instance=None): if len(value) != 2 and self.required: raise ValidationError(_("Invalid point")) return value @@ -299,3 +294,40 @@ class AreaField(forms.MultiValueField): if not data_list: return None return data_list + +class MultiSelectWidget(forms.SelectMultiple): + class Media: + css = {'all': ( + settings.MEDIA_URL + 'jquery/bsmSelect/css/jquery.bsmselect.css', + settings.MEDIA_URL + 'jquery/css/jquery.bsmselect.custom.css', + ) + } + js = ( + settings.MEDIA_URL + 'jquery/jquery-1.4.4.min.js', + settings.MEDIA_URL + 'jquery/bsmSelect/js/jquery.bsmselect.js', + settings.MEDIA_URL + 'jquery/bsmSelect/js/jquery.bsmselect.compatibility.js', + ) + + def render(self, name, value, attrs=None): + rendered = super(MultiSelectWidget, self).render(name, value, attrs) + return mark_safe(rendered + u'''<hr class='spacer'/><script type="text/javascript"> +$.bsmSelect.conf['title'] = "%(title)s"; +$("#id_%(name)s").bsmSelect({ + removeLabel: '<strong>X</strong>', + containerClass: 'bsmContainer', + listClass: 'bsmList-custom', + listItemClass: 'bsmListItem-custom', + listItemLabelClass: 'bsmListItemLabel-custom', + removeClass: 'bsmListItemRemove-custom' +}); +</script>''' % {'name':name, 'title':_("Select...")}) + +class SelectMultipleField(models.ManyToManyField): + ''' + Set the widget for the category field + ''' + def formfield(self, **keys): + self.help_text = "" + defaults = {'widget': MultiSelectWidget} + keys.update(defaults) + return super(SelectMultipleField, self).formfield(**keys) |
