diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-17 13:13:15 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-22 02:08:33 +0200 |
commit | 1091d481584af4662488ee83d7fa1421f8d1700c (patch) | |
tree | 0fb060c8cc3c7280a4f9d643db34216597a0b302 /chimere/widgets.py | |
parent | 232a1de132fa75431b45c008b72dafbcc6130b14 (diff) | |
download | Chimère-1091d481584af4662488ee83d7fa1421f8d1700c.tar.bz2 Chimère-1091d481584af4662488ee83d7fa1421f8d1700c.zip |
Improve routing interface and functionalities
* fix POI clicking
* create a nominatim widget to get coordinates from text
* create a JQuery UI button select widget
* create a routing form to get itinerary from a textual form
* CSS for the routing form
* Reverse nominatim: when a point is get for routing on the map
label for this point is get from nominatim
* Add transport management by user choice
* Update french translation
Diffstat (limited to 'chimere/widgets.py')
-rw-r--r-- | chimere/widgets.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/chimere/widgets.py b/chimere/widgets.py index 8e2b8ad..b520fcd 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -26,6 +26,9 @@ from django.core.exceptions import ObjectDoesNotExist from django.conf import settings from django.contrib.gis.db import models from django.contrib.gis.geos import fromstr +from django.utils.html import conditional_escape +from django.forms.widgets import RadioInput, RadioFieldRenderer +from django.utils.encoding import force_unicode from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ @@ -100,6 +103,41 @@ class ChosenSelectWidget(forms.Select): u"</script>\n" % kwargs['attrs']['id'] return mark_safe(rendered) +""" +JQuery UI button select widget. +""" +class ButtonRadioInput(RadioInput): + def render(self, name=None, value=None, attrs=None, choices=()): + name = name or self.name + value = value or self.value + attrs = attrs or self.attrs + if 'id' in self.attrs: + label_for = ' for="%s_%s"' % (self.attrs['id'], self.index) + else: + label_for = '' + choice_label = conditional_escape(force_unicode(self.choice_label)) + return mark_safe(u'%s <label%s>%s</label>' % (self.tag(), label_for, + choice_label)) +class ButtonRadioFieldRenderer(RadioFieldRenderer): + def __iter__(self): + for i, choice in enumerate(self.choices): + yield ButtonRadioInput(self.name, self.value, self.attrs.copy(), + choice, i) + def render(self): + return mark_safe(u'\n'.join([force_unicode(w) for w in self])) +class ButtonSelectWidget(forms.RadioSelect): + def __init__(self, *args, **kwargs): + self.renderer = ButtonRadioFieldRenderer + super(ButtonSelectWidget, self).__init__(*args, **kwargs) + + def render(self, *args, **kwargs): + rendered = "<div id='%s'>\n" % kwargs['attrs']['id'] + rendered += super(ButtonSelectWidget, self).render(*args, **kwargs) + rendered += u"\n<script type='text/javascript'>\n"\ + u" $('#%s').buttonset();\n"\ + u"</script>\n</div>\n" % kwargs['attrs']['id'] + return mark_safe(rendered) + class TextareaWidget(forms.Textarea): """ Manage the edition of a text using TinyMCE @@ -121,6 +159,21 @@ class DatePickerWidget(forms.TextInput): u"</script>\n" % kwargs['attrs']['id'] return mark_safe(rendered) +class NominatimWidget(forms.TextInput): + class Media: + js = ["%schimere/js/nominatim-widget.js" % settings.STATIC_URL] + def render(self, name, value, attrs=None, area_name=''): + tpl = u""" +<input type='hidden' name='nominatim_%(id)s_lat' id='nominatim_%(id)s_lat'/> +<input type='hidden' name='nominatim_%(id)s_lon' id='nominatim_%(id)s_lon'/> +<input type='text' class='nominatim-widget' name='nominatim_%(id)s' id='nominatim_%(id)s'/> +<label class='nominatim-label' id='nominatim_%(id)s_label'> </label> +<script type='text/javascript'> +var nominatim_url = "%(nominatim_url)s"; +</script> +""" % {'id':name, 'nominatim_url':settings.NOMINATIM_URL} + return mark_safe(tpl) + class PointChooserWidget(forms.TextInput): """ Manage the edition of point on a map |