diff options
Diffstat (limited to 'chimere/widgets.py')
-rw-r--r-- | chimere/widgets.py | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/chimere/widgets.py b/chimere/widgets.py index 4f09c62..69ba8f5 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -255,7 +255,8 @@ class PointChooserWidget(forms.TextInput): js = settings.OSM_JS_URLS + list(settings.JQUERY_JS_URLS) + \ ["%schimere/js/jquery.chimere.js" % settings.STATIC_URL] - def render(self, name, value, attrs=None, area_name=''): + + def render(self, name, value, attrs=None, area_name='', initialized=True): ''' Render a map and latitude, longitude information field ''' @@ -284,6 +285,7 @@ class PointChooserWidget(forms.TextInput): 'value_x': value_x, 'name': name, 'val': val, + 'initialized': initialized, 'isvalue': bool(value), 'default_area': "true" if default_area else "false", }) % \ @@ -297,12 +299,25 @@ class PointChooserWidget(forms.TextInput): ) ) +class HiddenPointChooserWidget(PointChooserWidget): + """ + OpenLayers doesn't initialize well on an hidden field so specific JS + must be loaded. + """ + def render(self, *args, **kwargs): + kwargs['initialized'] = False + return super(HiddenPointChooserWidget, self).render(*args, **kwargs) + class PointField(models.PointField): ''' Set the widget for the form field ''' + def __init__(self, *args, **kwargs): + self.widget = kwargs.pop('widget') if 'widget' in kwargs else PointChooserWidget + return super(PointField, self).__init__(*args, **kwargs) + def formfield(self, **keys): - defaults = {'widget': PointChooserWidget} + defaults = {'widget': self.widget} keys.update(defaults) return super(PointField, self).formfield(**keys) @@ -512,19 +527,19 @@ class AreaWidget(forms.TextInput): help_msg = _(u"Hold CTRL, click and drag to select area on the map") tpl += u"<p class='help-osm'>%s</p>\n" % help_msg tpl += u"<script type='text/javascript'>\n" - tpl += u"function init_map_form (){\ninit();\n" + tpl += u"function init_map_form (){\ninit('map_edit_area');\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"updateForm(extent);\n"\ - u"map.zoomToExtent(extent, true);\n"\ - u"map.zoomOut();" % (upper_left_lon, upper_left_lat, + u"area_map.zoomToExtent(extent, true);\n"\ + u"area_map.zoomOut();" % (upper_left_lon, upper_left_lat, lower_right_lon, lower_right_lat) tpl += u"}\n" if initialized: tpl += u"$(document).ready(function($) {init_map_form()});\n" tpl += u"</script>\n" - tpl += u"<div id='map_edit'>\n" + tpl += u"<div id='map_edit_area'>\n" return mark_safe(tpl) def value_from_datadict(self, data, files, name): |