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