diff options
Diffstat (limited to 'chimere/widgets.py')
-rw-r--r-- | chimere/widgets.py | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/chimere/widgets.py b/chimere/widgets.py index d5e502e..e357268 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -243,11 +243,11 @@ class PointChooserWidget(forms.TextInput): js = list(settings.JQUERY_JS_URLS) + \ settings.MAP_JS_URLS[settings.CHIMERE_EDIT_RENDERER] - def render(self, name, value, attrs=None, map_name=''): + def render(self, name, value, attrs=None, area_name='', initialized=True): ''' Render a map and latitude, longitude information field ''' - val = '0' + val = '' value_x, value_y = 0, 0 if value: val = str(value) @@ -275,6 +275,7 @@ class PointChooserWidget(forms.TextInput): 'value_x': value_x, 'name': name, 'val': val, + 'initialized': initialized, 'isvalue': bool(value), 'default_map': "true" if default_map else "false", }) % \ @@ -288,12 +289,26 @@ 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) @@ -504,19 +519,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): |