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) | 
