summaryrefslogtreecommitdiff
path: root/chimere/widgets.py
diff options
context:
space:
mode:
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
commitea65e5512c236b81e7f4b8757521facadae4b3b8 (patch)
tree739cdf40fb6a89de90c4189936d695288a82849f /chimere/widgets.py
parent4b0f0777c434f5fa1366ca408c34d257d4833fad (diff)
parenta55f77a246f99764ff6289686f80825526654e2b (diff)
downloadChimè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.py64
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):