summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commitf18b08183858a6330f1138e5b619ea886317bed8 (patch)
tree7067ea9075a131f90c55c1952a9a0d64a5bf0b66
parente01b6a270a4c5a790ef70b799e404fe062c1b0de (diff)
downloadChimère-f18b08183858a6330f1138e5b619ea886317bed8.tar.bz2
Chimère-f18b08183858a6330f1138e5b619ea886317bed8.zip
Improve area management
-rw-r--r--chimere/admin.py6
-rw-r--r--chimere/models.py4
-rw-r--r--chimere/static/chimere/css/styles.css8
-rw-r--r--chimere/templates/chimere/blocks/areas.html30
-rw-r--r--chimere/templates/chimere/blocks/areas_alternative.html21
-rw-r--r--chimere/templates/chimere/blocks/map_params.html4
-rw-r--r--chimere/templates/chimere/main_map.html7
-rw-r--r--chimere/templatetags/chimere_tags.py16
-rw-r--r--chimere/urls.py7
-rw-r--r--chimere/views.py22
-rw-r--r--chimere/widgets.py2
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: