diff options
Diffstat (limited to 'chimere/widgets.py')
| -rw-r--r-- | chimere/widgets.py | 64 | 
1 files changed, 49 insertions, 15 deletions
| diff --git a/chimere/widgets.py b/chimere/widgets.py index 01a4bdb..41b2f92 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -22,13 +22,14 @@ Extra widgets and fields  """  from django import conf  from django import forms -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.core.exceptions import ObjectDoesNotExist +from django.core.urlresolvers import reverse  from django.forms.widgets import RadioInput, RadioFieldRenderer  from django.utils.encoding import force_unicode +from django.utils.html import conditional_escape  from django.utils.safestring import mark_safe  from django.utils.translation import ugettext as _ @@ -143,13 +144,10 @@ class ButtonSelectWidget(forms.RadioSelect):          u"</script>\n</div>\n" % kwargs['attrs']['id']          return mark_safe(rendered) -class TextareaWidget(forms.Textarea): +class TextareaWidgetBase(forms.Textarea):      """      Manage the edition of a text using TinyMCE      """ -    class Media: -        js = ["%stiny_mce.js" % settings.TINYMCE_URL] -      def render(self, *args, **kwargs):          if 'attrs' not in kwargs:              kwargs['attrs'] = {} @@ -173,7 +171,7 @@ tinyMCE.init({  """          return mark_safe(rendered) -class FullTextareaWidget(forms.Textarea): +class FullTextareaWidget(TextareaWidgetBase):      """      Manage the edition of a text using TinyMCE      """ @@ -200,6 +198,19 @@ tinyMCE.init({  """          return mark_safe(rendered) +class TextareaWidget(TextareaWidgetBase): +    """ +    Manage the edition of a text using TinyMCE +    """ +    class Media: +        js = ["%stiny_mce.js" % settings.TINYMCE_URL, +              "%schimere/js/textareas.js" % settings.STATIC_URL,] + +class TextareaAdminWidget(TextareaWidgetBase): +    class Media: +        js = ["%stiny_mce.js" % settings.TINYMCE_URL, +              "%schimere/js/textareas_admin.js" % settings.STATIC_URL,] +  class DatePickerWidget(forms.TextInput):      """      Manage the edition of dates. @@ -347,6 +358,7 @@ class RouteChooserWidget(forms.TextInput):          map_layers, default_area = get_map_layers(area_name)          map_layers = [js for name, js, default in map_layers]          js = """ +        var extra_url = "%s";          OpenLayers.ImgPath = '%schimere/img/';          var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s');          var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:%s'); @@ -358,7 +370,8 @@ class RouteChooserWidget(forms.TextInput):          chimere_init_options['edition'] = true;          chimere_init_options['edition_type_is_route'] = true;          chimere_init_options["checked_categories"] = []; -        """ % (settings.STATIC_URL, settings.CHIMERE_EPSG_DISPLAY_PROJECTION, +        """ % ( reverse("chimere:index"), settings.STATIC_URL, +              settings.CHIMERE_EPSG_DISPLAY_PROJECTION,                settings.CHIMERE_EPSG_PROJECTION, settings.CHIMERE_DEFAULT_CENTER,                settings.CHIMERE_DEFAULT_ZOOM, ", ".join(map_layers))          if default_area: @@ -463,9 +476,11 @@ class AreaWidget(forms.TextInput):      """      class Media:          css = { -            "all": settings.OSM_CSS_URLS + ["%schimere/css/forms.css" % settings.STATIC_URL,] +            "all": settings.OSM_CSS_URLS + \ +                   ["%schimere/css/forms.css" % settings.STATIC_URL,]          } -        js = settings.OSM_JS_URLS + ["%schimere/js/edit_area.js" % settings.STATIC_URL, +        js = settings.OSM_JS_URLS + [ +              "%schimere/js/edit_area.js" % settings.STATIC_URL,                "%schimere/js/base.js" % settings.STATIC_URL,]      def render(self, name, value, attrs=None): @@ -480,11 +495,24 @@ class AreaWidget(forms.TextInput):                  lower_right = value[1]                  if hasattr(upper_left, 'x') and hasattr(upper_left, 'y'):                      upper_left_lon, upper_left_lat = upper_left.x, upper_left.y +                elif len(upper_left) == 2: +                    try: +                        upper_left_lon = float(upper_left[0]) +                        upper_left_lat = float(upper_left[1]) +                    except ValueError: +                        pass                  if hasattr(lower_right, 'x') and hasattr(lower_right, 'y'):                      lower_right_lon, lower_right_lat = lower_right.x, \                                                         lower_right.y +                elif len(lower_right) == 2: +                    lower_right_lon, lower_right_lat = lower_right +                    try: +                        lower_right_lon = float(lower_right[0]) +                        lower_right_lat = float(lower_right[1]) +                    except ValueError: +                        pass          tpl = getMapJS() -        tpl += u"<div id='map_edit'></div>\n"\ +        tpl += u"</div>\n"\          u"<input type='hidden' name='upper_left_lat' id='upper_left_lat' "\          u"value='%f'/>\n"\          u"<input type='hidden' name='upper_left_lon' id='upper_left_lon' "\ @@ -494,13 +522,19 @@ class AreaWidget(forms.TextInput):          u"<input type='hidden' name='lower_right_lon' id='lower_right_lon' "\          u"value='%f'/>\n" % (              upper_left_lat, upper_left_lon, lower_right_lat, lower_right_lon) -        tpl += u"<script type='text/javascript'>\ninit();" +        help_msg = _(u"Hold CTRL, click and drag to select area on the map") +        tpl += u"<p>%s</p>\n" % help_msg +        tpl += u"<script type='text/javascript'>\n" +        tpl += u"$(document).ready(function($) {\ninit();\n"          if value:              tpl += u"var extent = new OpenLayers.Bounds(%f, %f, %f, %f);\n"\              u"extent.transform(epsg_display_projection, epsg_projection);\n"\ -            u"map.zoomToExtent(extent, true);""" % (upper_left_lon, -                    upper_left_lat, lower_right_lon, lower_right_lat) -        tpl += u"</script>\n<hr class='spacer'/>\n" +            u"updateForm(extent);\n"\ +            u"map.zoomToExtent(extent, true);\n"\ +            u"map.zoomOut();" % (upper_left_lon, upper_left_lat, +                                 lower_right_lon, lower_right_lat) +        tpl += u"});\n</script>\n<hr class='spacer'/>\n" +        tpl += u"<div id='map_edit'>\n"          return mark_safe(tpl)      def value_from_datadict(self, data, files, name): | 
