summaryrefslogtreecommitdiff
path: root/chimere/widgets.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/widgets.py')
-rw-r--r--chimere/widgets.py61
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)