diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-05-06 01:55:25 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-05-06 01:55:25 +0200 | 
| commit | f18b08183858a6330f1138e5b619ea886317bed8 (patch) | |
| tree | 7067ea9075a131f90c55c1952a9a0d64a5bf0b66 | |
| parent | e01b6a270a4c5a790ef70b799e404fe062c1b0de (diff) | |
| download | Chimère-f18b08183858a6330f1138e5b619ea886317bed8.tar.bz2 Chimère-f18b08183858a6330f1138e5b619ea886317bed8.zip | |
Improve area management
| -rw-r--r-- | chimere/admin.py | 6 | ||||
| -rw-r--r-- | chimere/models.py | 4 | ||||
| -rw-r--r-- | chimere/static/chimere/css/styles.css | 8 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/areas.html | 30 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/areas_alternative.html | 21 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/map_params.html | 4 | ||||
| -rw-r--r-- | chimere/templates/chimere/main_map.html | 7 | ||||
| -rw-r--r-- | chimere/templatetags/chimere_tags.py | 16 | ||||
| -rw-r--r-- | chimere/urls.py | 7 | ||||
| -rw-r--r-- | chimere/views.py | 22 | ||||
| -rw-r--r-- | chimere/widgets.py | 2 | 
11 files changed, 80 insertions, 47 deletions
| diff --git a/chimere/admin.py b/chimere/admin.py index bfa90c5..9c6e1ac 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -146,13 +146,17 @@ class LayerInline(admin.TabularInline):      model = AreaLayers      extra = 1 +class SubcategoryInline(admin.StackedInline): +    model = SubCategory.areas.through +    extra = 1 +  class AreaAdmin(admin.ModelAdmin):      """      Specialized the area field.      """      form = AreaAdminForm      exclude = ['upper_left_corner', 'lower_right_corner'] -    inlines = [LayerInline] +    inlines = [LayerInline, SubcategoryInline]  class SubCategoryAdmin(admin.ModelAdmin):      """ diff --git a/chimere/models.py b/chimere/models.py index 565cdd7..1c7db0d 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -177,8 +177,8 @@ class SubCategory(models.Model):          if area_name:              area = Area.objects.get(urn=area_name)              # if there some restrictions with categories limit them -            if area.subcategory_set.count(): -                sub_ids = [sub.id for sub in area.subcategory_set.all()] +            if area.subcategories.count(): +                sub_ids = [sub.id for sub in area.subcategories.all()]                  # if no area is defined for a category don't filter it                  sub_ids += [sub.id for sub in subcategories                              if not sub.areas.count()] diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css index 3eb81c1..1906536 100644 --- a/chimere/static/chimere/css/styles.css +++ b/chimere/static/chimere/css/styles.css @@ -253,14 +253,15 @@ ul#action-2 {      top:5px;  } -#areas, #areas-select{ +#areas, #areas-select-div{      position:absolute;      z-index:5;  } -#areas-select{ +#areas-select-div{      left:28px;      bottom:65px; +    padding:0.3em;  }  #areas{ @@ -591,6 +592,9 @@ table.inline-table td input[type=file]{      padding-right: 0px !important;      width: 100%;      height: auto !important; +    -webkit-border-radius: 10px; +    -moz-border-radius: 10px; +    border-radius: 10px;  }  #content .olControlLayerSwitcher .layersDiv .baseLayersDiv, diff --git a/chimere/templates/chimere/blocks/areas.html b/chimere/templates/chimere/blocks/areas.html index 837bf45..4133ac1 100644 --- a/chimere/templates/chimere/blocks/areas.html +++ b/chimere/templates/chimere/blocks/areas.html @@ -1,11 +1,25 @@ -{% load i18n unlocalize_point %} +{% load i18n %}  {% if areas %} -    <div id='areas'> -        <h2>{% trans "Shortcuts"%}</h2> -        <ul> -            {% for area in areas %} -                <li><img class="zoom_image" alt="{% trans 'Zoom to' %} {{area.name}}" src="{{ STATIC_URL }}chimere/img/zoom.png" onclick="$('#maps').chimere('zoom', {'area': [{{area.upper_left_corner.x|unlocalize_point}}, {{area.upper_left_corner.y|unlocalize_point}}, {{area.lower_right_corner.x|unlocalize_point }}, {{area.lower_right_corner.y|unlocalize_point}}]});" /> {{area.name}}</li> -            {% endfor %} -        </ul> +    <div id='areas-select-div' class='ui-widget ui-button ui-state-default ui-corner-all'> +    <label for='areas-select'>{% trans "Areas" %}</label> +    <select id='areas-select'> +    {% for area in areas %} +        <option value='{{area.urn}}'{% if area_name and area.urn == area_name %} selected='selected'{% endif %}{% if not area_name and area.default %} selected='selected'{% endif %}>{{area.name}}</option> +    {% endfor %} +    </select>      </div> +    <script language='javascript' type='text/javascript'> +    jQuery('#areas-select').change( +        function (){ +            val = jQuery(this).val(); +            if(val){ +                window.location = "{{ base_url }}" + jQuery(this).val() +                                  + "/zoomout"; +            } +            else{ +                window.location = "{{ base_url }}"; +            } +        } +    ); +    </script>  {% endif %} diff --git a/chimere/templates/chimere/blocks/areas_alternative.html b/chimere/templates/chimere/blocks/areas_alternative.html index ec62a18..837bf45 100644 --- a/chimere/templates/chimere/blocks/areas_alternative.html +++ b/chimere/templates/chimere/blocks/areas_alternative.html @@ -1,16 +1,11 @@  {% load i18n unlocalize_point %}  {% if areas %} -    <select id='areas-select'> -        <option value=''>--</option> -    {% for area in areas %} -        <option value='[{{area.upper_left_corner.x|unlocalize_point}}, {{area.upper_left_corner.y|unlocalize_point}}, {{area.lower_right_corner.x|unlocalize_point }}, {{area.lower_right_corner.y|unlocalize_point}}]'>{{area.name}}</option> -    {% endfor %} -    </select> -    <script language='javascript' type='text/javascript'> -    jQuery('#areas-select').change( -        function (){ -            $('#maps').chimere('zoom', {'area':eval(jQuery(this).val())}); -        } -    ); -    </script> +    <div id='areas'> +        <h2>{% trans "Shortcuts"%}</h2> +        <ul> +            {% for area in areas %} +                <li><img class="zoom_image" alt="{% trans 'Zoom to' %} {{area.name}}" src="{{ STATIC_URL }}chimere/img/zoom.png" onclick="$('#maps').chimere('zoom', {'area': [{{area.upper_left_corner.x|unlocalize_point}}, {{area.upper_left_corner.y|unlocalize_point}}, {{area.lower_right_corner.x|unlocalize_point }}, {{area.lower_right_corner.y|unlocalize_point}}]});" /> {{area.name}}</li> +            {% endfor %} +        </ul> +    </div>  {% endif %} diff --git a/chimere/templates/chimere/blocks/map_params.html b/chimere/templates/chimere/blocks/map_params.html index 84b365e..c4c279c 100644 --- a/chimere/templates/chimere/blocks/map_params.html +++ b/chimere/templates/chimere/blocks/map_params.html @@ -16,5 +16,9 @@      {% if p_display_submited %}chimere_init_options["display_submited"] = {{ p_display_submited }};{% endif %}      chimere_init_options["checked_categories"] = {% if p_checked_categories %}[{{p_checked_categories}}]{% else %} {{ CHIMERE_DEFAULT_CATEGORIES }}{% endif %};      var p_current_feature{% if p_current_feature %} = {{ p_current_feature }}{% endif %}; +    $("#map").chimere(chimere_init_options); +    {% if zoom %} +    $('#maps').chimere('zoom', {'area':{{zoom}} }); +    {% endif %}  </script> diff --git a/chimere/templates/chimere/main_map.html b/chimere/templates/chimere/main_map.html index 8d996a5..10635bd 100644 --- a/chimere/templates/chimere/main_map.html +++ b/chimere/templates/chimere/main_map.html @@ -29,11 +29,10 @@      <div id='map'>          <p id='no-js' class='warning'>{% trans "You must enable JavaScript in your browser to display Chimère."%}</p>      </div> +<script type="text/javascript"> +    $("#no-js").hide(); +</script>      {% map_params %} -    <script type='text/javascript'><!-- -        $("#no-js").hide(); -        $("#map").chimere(chimere_init_options); -    // --></script>  {% endblock %}  {% block footer %}      <p class='map-footer'>{% include "chimere/blocks/footer.html" %}</p> diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py index 14d58ec..a75d9d6 100644 --- a/chimere/templatetags/chimere_tags.py +++ b/chimere/templatetags/chimere_tags.py @@ -5,6 +5,7 @@ from logging import getLogger  from django import template  from django.conf import settings +from django.core.exceptions import ObjectDoesNotExist  from django.core.urlresolvers import reverse  from chimere.models import Marker, Area, News @@ -20,7 +21,10 @@ def display_areas(context):      Display available areas.      """      context_data = {"areas": Area.getAvailable(), -                    "STATIC_URL": context["STATIC_URL"]} +                    "base_url": reverse('chimere:index') +                    } +    if "area_name" in context: +        context_data['area_name'] = context["area_name"]      return context_data  @register.inclusion_tag('chimere/blocks/submited.html', takes_context=True) @@ -101,6 +105,16 @@ def map_params(context):      context_data['icon_height'] = settings.CHIMERE_ICON_HEIGHT      area_name = context['area_name'] if 'area_name' in context else 'area_name'      context_data['map_layers'] = ", ".join(get_map_layers(area_name)) +    if area_name and 'zoomout' in context and context['zoomout']: +        try: +            area = Area.objects.get(urn=area_name) +            context_data['zoom'] = "[%s]" % ",".join(( +                unicode(area.upper_left_corner.x), +                unicode(area.upper_left_corner.y), +                unicode(area.lower_right_corner.x), +                unicode(area.lower_right_corner.y))) +        except ObjectDoesNotExist: +            pass      if 'request' not in context:          return context_data      request = context['request'] diff --git a/chimere/urls.py b/chimere/urls.py index f4d6157..d7c4463 100644 --- a/chimere/urls.py +++ b/chimere/urls.py @@ -59,9 +59,6 @@ urlpatterns += patterns('chimere.views',                          'uploadFile', name='upload_file'),      url(r'^(?P<area_name>\w+)?/?process_route_file/(?P<file_id>\d+)/$',                          'processRouteFile', name='process_route_file'), -) - -# At the end, because it catches large -urlpatterns += patterns('chimere.views', -    url(r'^(?P<area_name>\w+)?', 'index', name="index"), +    # At the end, because it catches large +    url(r'^(?P<area_name>\w+)?(/(?P<zoomout>\w+))?', 'index', name="index"),  ) diff --git a/chimere/views.py b/chimere/views.py index 489d235..8c1250d 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -66,7 +66,8 @@ def get_base_response(area_name=""):      base_response_dct['JQUERY_CSS_URLS'] = settings.JQUERY_CSS_URLS      return base_response_dct -def index(request, area_name=None, default_area=None, simple=False): +def index(request, area_name=None, default_area=None, simple=False, +          zoomout=None):      """      Main page      """ @@ -85,15 +86,16 @@ def index(request, area_name=None, default_area=None, simple=False):          try:              default_area = Area.objects.get(urn=area_name)          except Area.DoesNotExist: -            # Do not return an error -            pass -    response_dct.update({'actions':actions, 'action_selected':('view',), -                         'error_message':'', 'default_area':default_area, -                         'news_visible': news_visible, -                         'areas_visible': settings.CHIMERE_DISPLAY_AREAS, -                         'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, -                         'dynamic_categories':settings.CHIMERE_DYNAMIC_CATEGORIES, -                        }) +            return redirect(reverse('chimere:index')) +    response_dct.update({ +        'actions':actions, 'action_selected':('view',), +         'error_message':'', 'default_area':default_area, +         'news_visible': news_visible, +         'areas_visible': settings.CHIMERE_DISPLAY_AREAS, +         'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, +         'dynamic_categories':settings.CHIMERE_DYNAMIC_CATEGORIES, +         'zoomout':zoomout +        })      tpl = 'chimere/main_map.html'      if simple:          tpl = 'chimere/main_map_simple.html' diff --git a/chimere/widgets.py b/chimere/widgets.py index 2637145..8c0cfcd 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -62,7 +62,7 @@ def get_map_layers(area_name=''):      area = None      if area_name:          try: -            area = Area.objects.get(name=area_name) +            area = Area.objects.get(urn=area_name)          except ObjectDoesNotExist:              pass      else: | 
