diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-14 16:55:22 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-14 16:55:22 +0200 |
commit | ea65e5512c236b81e7f4b8757521facadae4b3b8 (patch) | |
tree | 739cdf40fb6a89de90c4189936d695288a82849f /chimere/widgets.py | |
parent | 4b0f0777c434f5fa1366ca408c34d257d4833fad (diff) | |
parent | a55f77a246f99764ff6289686f80825526654e2b (diff) | |
download | Chimère-ea65e5512c236b81e7f4b8757521facadae4b3b8.tar.bz2 Chimère-ea65e5512c236b81e7f4b8757521facadae4b3b8.zip |
Merge branch 'master' into saclay
Conflicts:
chimere/admin.py
chimere/fixtures/initial_data.json
chimere/forms.py
chimere/locale/fr/LC_MESSAGES/django.po
chimere/models.py
chimere/static/chimere/css/styles.css
chimere/templates/chimere/detail.html
chimere/templatetags/chimere_tags.py
chimere/views.py
chimere/widgets.py
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): |