summaryrefslogtreecommitdiff
path: root/chimere/main/widgets.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/main/widgets.py')
-rw-r--r--chimere/main/widgets.py44
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)