diff options
Diffstat (limited to 'chimere/widgets.py')
-rw-r--r-- | chimere/widgets.py | 61 |
1 files changed, 40 insertions, 21 deletions
diff --git a/chimere/widgets.py b/chimere/widgets.py index 467909d..78d7508 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -59,7 +59,7 @@ def getMapJS(area_name=''): return js -def get_map_layers(area_name=''): +def get_map_layers(area_name='', get_area_zoom=False): from chimere.models import Area area = None if area_name: @@ -75,7 +75,7 @@ def get_map_layers(area_name=''): map_layers, default = [], None if area and area.layers.count(): map_layers = [ - [layer.name, layer.layer_code, False] + [layer.name, layer.layer_code, False, layer.extra_js_code or ''] for layer in area.layers.order_by('arealayers__order').all()] def_layer = area.layers.filter(arealayers__default=True) if def_layer.count(): @@ -88,13 +88,18 @@ def get_map_layers(area_name=''): map_layers[0][2] = True elif settings.CHIMERE_DEFAULT_MAP_LAYER: map_layers = [(_(u"Default layer"), settings.CHIMERE_DEFAULT_MAP_LAYER, - True)] + True, '')] else: map_layers = [(u"Mapquest", """new ol.layer.Tile({ style: 'Road', source: new ol.source.MapQuest({layer: 'osm'}) -})""", True)] - return map_layers, default +})""", True, '')] + if not get_area_zoom: + return map_layers, default + if not area: + return map_layers, default, settings.CHIMERE_DEFAULT_ZOOM + zoom = "[%s]" % ",".join(area.getExtent()) + return map_layers, default, zoom class ChosenSelectWidget(forms.Select): @@ -313,8 +318,11 @@ class PointChooserWidget(forms.TextInput): value = None else: value = None - map_layers, default_area = get_map_layers(area_name) - map_layers = [js for n, js, default in map_layers if js] + map_layers, default_area, zoom = get_map_layers(area_name, + get_area_zoom=True) + extra_js = [extra_js for n, js, default, extra_js in map_layers + if extra_js] + map_layers = [js for n, js, default, xtra_js in map_layers if js] # TODO: manage area return mark_safe( render_to_string('chimere/blocks/live_coordinates.html', @@ -325,6 +333,7 @@ class PointChooserWidget(forms.TextInput): 'name': name, 'val': val, 'initialized': initialized, + 'extra_js': "\n".join(extra_js), 'isvalue': bool(value), 'default_area': "true" if default_area else "false", @@ -336,7 +345,8 @@ class PointChooserWidget(forms.TextInput): settings.CHIMERE_DEFAULT_CENTER[1]), settings.CHIMERE_DEFAULT_ZOOM, settings.STATIC_URL, - ", ".join(map_layers) + ", ".join(map_layers), + zoom ) ) @@ -391,8 +401,10 @@ class RouteChooserWidget(forms.TextInput): ''' tpl = getMapJS(area_name) map_layers, default_area = get_map_layers(area_name) - map_layers = [js for nm, js, default in map_layers] - js = """ + extra_js = [extra_js for n, js, default, extra_js in map_layers + if extra_js] + map_layers = [js for nm, js, default, ext_js in map_layers] + js = u""" var resolutions; var zoomOffset; @@ -406,6 +418,7 @@ class RouteChooserWidget(forms.TextInput): var CENTER_LONLAT = centerLonLat; var DEFAULT_ZOOM = %s; var chimere_init_options = {}; + %s chimere_init_options["map_layers"] = [%s]; chimere_init_options['dynamic_categories'] = false; chimere_init_options['edition'] = true; @@ -416,9 +429,11 @@ class RouteChooserWidget(forms.TextInput): settings.CHIMERE_EPSG_PROJECTION, settings.CHIMERE_DEFAULT_CENTER[0], settings.CHIMERE_DEFAULT_CENTER[1], - settings.CHIMERE_DEFAULT_ZOOM, ", ".join(map_layers)) + settings.CHIMERE_DEFAULT_ZOOM, + u"\n".join(extra_js), + u", ".join(map_layers)) if default_area: - js += "chimere_init_options['selected_map_layer'] = %d;\n" % \ + js += u"chimere_init_options['selected_map_layer'] = %d;\n" % \ default_area tpl = u"<script type='text/javascript'><!--\n"\ u"%s// !--></script>\n" % js @@ -481,7 +496,7 @@ class RouteChooserWidget(forms.TextInput): tpl += "\n<div class='help-route' id='help-route-create'>%s</div>"\ % help_create tpl += \ - u"\n<div id='map_edit'>\n"\ + u"\n<div id='layerSwitcher'></div>\n<div id='map_edit'>\n"\ u" <div class='map_button'>\n"\ u" <a href='#' id='button-move-map' class='toggle-button "\ u"toggle-button-active' "\ @@ -632,24 +647,28 @@ class PolygonChooserWidget(forms.TextInput): val = '' if value: val = str(value) - map_layers, default_area = get_map_layers(area_name) - map_layers = [js for n, js, default in map_layers + map_layers, default_area, zoom = get_map_layers(area_name, + get_area_zoom=True) + extra_js = [extra_js for n, js, default, extra_js in map_layers + if extra_js] + map_layers = [js for n, js, default, ext_js in map_layers if 'OpenLayers' not in js] tpl = render_to_string( 'chimere/blocks/polygon_edit.html', {'name': name, 'val': val, 'initialized': initialized, 'isvalue': bool(value), 'default_area': "true" if default_area else "false", - 'value': value} + 'value': value + } ) - # TODO: manage area return mark_safe(tpl.format( static_url=settings.STATIC_URL, display_projection=settings.CHIMERE_EPSG_DISPLAY_PROJECTION, projection=settings.CHIMERE_EPSG_PROJECTION, center=list(settings.CHIMERE_DEFAULT_CENTER), - zoom=settings.CHIMERE_DEFAULT_ZOOM, - map_layers=", ".join(map_layers) + zoom=zoom, + map_layers=u", ".join(map_layers), + extra_js=u"\n".join(extra_js), )) @@ -726,8 +745,8 @@ class ImportFiltrWidget(AreaWidget): tpl += u"<p class='help-kml'>%s</p>\n" % help_msg if not value: value = '' - tpl += u"<div><input type='text' id='id_%s' name='id_%s' "\ - u"value=\"%s\"/> <input type='button' id='id_refresh_%s' "\ + tpl += u"<div><textarea id='id_%s' name='id_%s' "\ + u">%s</textarea> <input type='button' id='id_refresh_%s' "\ u"value='%s' class='input-osm'/>" % (name, name, value, name, _(u"Refresh")) return mark_safe(tpl) |