diff options
Diffstat (limited to 'chimere/main')
| -rw-r--r-- | chimere/main/views.py | 64 | ||||
| -rw-r--r-- | chimere/main/widgets.py | 21 |
2 files changed, 52 insertions, 33 deletions
diff --git a/chimere/main/views.py b/chimere/main/views.py index 86d98e7..dae5f82 100644 --- a/chimere/main/views.py +++ b/chimere/main/views.py @@ -40,10 +40,21 @@ from chimere.main.widgets import getMapJS, PointChooserWidget, \ from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \ notifySubmission, notifyStaff -base_response_dct = {'media_path':settings.MEDIA_URL, - 'extra_url':settings.EXTRA_URL,} +def get_base_response(area_name=""): + """ + Get the base url + """ + base_response_dct = {'media_path':settings.MEDIA_URL,} + base_url = settings.EXTRA_URL + if not base_url.startswith('/'): + base_url = '/' + base_url + if area_name: + base_url = '/' + area_name + base_url + base_response_dct['extra_url'] = base_url + base_response_dct['area_name'] = area_name + return base_response_dct -def index(request): +def index(request, area_name=None, default_area=None): """ Main page """ @@ -62,10 +73,10 @@ def index(request): request.session['last_visit'] != today: request.session['last_visit'] = today display_welcome = True - response_dct = base_response_dct + response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':('view',), - 'error_message':'', - 'extra_head':extra + getMapJS(), + 'error_message':'', 'default_area':default_area, + 'extra_head':extra + getMapJS(area_name), 'welcome':welcome(request, display_welcome), 'areas':Area.getAvailable(), 'map_layer':settings.MAP_LAYER, @@ -86,7 +97,7 @@ def index(request): response_dct['p_checked_categories'] = ''; return render_to_response('main_map.html', response_dct) -def edit(request): +def edit(request, area_name=""): """ Edition page """ @@ -100,13 +111,15 @@ def edit(request): marker.status = 'S' marker.save() notifySubmission(marker) - return HttpResponseRedirect('/' + settings.EXTRA_URL +'submited/edit') + response_dct = get_base_response(area_name) + return HttpResponseRedirect(response_dct['extra_url'] + \ +'submited/edit') else: # An unbound form form = MarkerForm() # get the « manualy » declared_fields. Ie: properties declared_fields = form.declared_fields.keys() - response_dct = base_response_dct + response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':('contribute', 'edit'), 'error_message':'', @@ -114,7 +127,8 @@ def edit(request): 'form':form, 'extra_head':form.media, 'sub_categories':SubCategory.getAvailable(['M', 'B']), - 'point_widget':PointChooserWidget().render('point', None), + 'point_widget':PointChooserWidget().render('point', None, + area_name=area_name), 'properties':declared_fields }) # manualy populate the custom widget @@ -122,7 +136,7 @@ def edit(request): response_dct['current_category'] = int(form.data['subcategory']) return render_to_response('edit.html', response_dct) -def editRoute(request): +def editRoute(request, area_name=""): """ Route edition page """ @@ -136,14 +150,15 @@ def editRoute(request): route.status = 'S' route.save() notifySubmission(route) - return HttpResponseRedirect('/' + settings.EXTRA_URL + \ - 'submited/edit_route') + response_dct = get_base_response(area_name) + return HttpResponseRedirect(response_dct['extra_url'] + \ +'submited/edit') else: # An unbound form form = RouteForm() # get the « manualy » declared_fields. Ie: properties declared_fields = form.declared_fields.keys() - response_dct = base_response_dct + response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':('contribute', 'edit_route'), 'error_message':'', @@ -151,7 +166,8 @@ def editRoute(request): 'form':form, 'extra_head':form.media, 'sub_categories':SubCategory.getAvailable(['R', 'B']), - 'route_widget':RouteChooserWidget().render('route', None), + 'route_widget':RouteChooserWidget().render('route', None, + area_name=area_name), 'properties':declared_fields }) # manualy populate the custom widget @@ -167,15 +183,15 @@ def welcome(request, display=None): response_dct['news_lst'] = News.objects.filter(available=True) return loader.render_to_string('welcome.html', response_dct) -def submited(request, action): +def submited(request, area_name="", action=""): """ Successful submission page """ - response_dct = base_response_dct + response_dct = get_base_response(area_name) response_dct.update({'actions':actions, 'action_selected':action,}) return render_to_response('submited.html', response_dct) -def contactus(request): +def contactus(request, area_name=""): """ Contact page """ @@ -196,9 +212,9 @@ details.") msg = _(u"Temporary error. Renew your message later.") else: form = ContactForm() - response_dct = base_response_dct - response_dct = ({'actions':actions, 'action_selected':('contact',), - 'contact_form':form, 'message':msg}) + response_dct = get_base_response(area_name) + response_dct.update({'actions':actions, 'action_selected':('contact',), + 'contact_form':form, 'message':msg}) return render_to_response('contactus.html', response_dct) def getDetail(request, marker_id): @@ -209,7 +225,7 @@ def getDetail(request, marker_id): marker = Marker.objects.filter(id=int(marker_id), status='A')[0] except (ValueError, IndexError): return HttpResponse('no results') - response_dct = base_response_dct + response_dct = get_base_response() response_dct['marker'] = marker return render_to_response('detail.html', response_dct) @@ -221,7 +237,7 @@ def getDescriptionDetail(request, category_id): category = Category.objects.filter(id=int(category_id))[0] except (ValueError, IndexError): return HttpResponse('no results') - response_dct = base_response_dct + response_dct = get_base_response() response_dct['category'] = category return render_to_response('category_detail.html', response_dct) @@ -266,7 +282,7 @@ def getAvailableCategories(request, area=None, status='A', force=None): ''' if settings.DYNAMIC_CATEGORIES and not area: return "" - response_dct = base_response_dct + response_dct = get_base_response() if not settings.DYNAMIC_CATEGORIES: subcategories = SubCategory.getAvailable() response_dct['sub_categories'] = subcategories diff --git a/chimere/main/widgets.py b/chimere/main/widgets.py index 44e8ac8..2653c19 100644 --- a/chimere/main/widgets.py +++ b/chimere/main/widgets.py @@ -38,7 +38,7 @@ class ManyToManyField_NoSyncdb(models.ManyToManyField): super(ManyToManyField_NoSyncdb, self).__init__(*args, **kwargs) self.creates_table = False -def getMapJS(): +def getMapJS(area_name=''): '''Variable initialization for drawing the map ''' # projection, center and bounds definitions @@ -52,6 +52,9 @@ def getMapJS(): js += u"var media_path = '%s';\n" % settings.MEDIA_URL js += u"var map_layer = %s;\n" % settings.MAP_LAYER js += u"var restricted_extent;\n" + + if area_name: + js += u"var area_name='%s';\n" % area_name if settings.RESTRICTED_EXTENT: restricted_extent_str = [str(coord) \ for coord in settings.RESTRICTED_EXTENT] @@ -81,7 +84,7 @@ class PointChooserWidget(forms.TextInput): js = URL_OSM_JS + ["%sedit_map.js" % settings.MEDIA_URL, "%sbase.js" % settings.MEDIA_URL,] - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, area_name=''): ''' Render a map and latitude, longitude information field ''' @@ -99,7 +102,7 @@ class PointChooserWidget(forms.TextInput): value = None else: value = None - tpl = getMapJS() + tpl = getMapJS(area_name) tpl += u'<script src="%sedit_map.js"></script>\n' % settings.MEDIA_URL tpl += u"""<div id='map_edit'></div> <div id='live_lonlat'> @@ -112,8 +115,8 @@ value='%f'/></p> </div> <input type='hidden' name='%s' id='id_%s' value="%s"/> """ % (_("Latitude"), value_y, _("Longitude"), value_x, name, name, val) - tpl += """<script type='text/javascript'><!-- -init();""" + tpl += "<script type='text/javascript'><!--\n" + tpl += "init();\n" if value: tpl += '''var mylonlat = new OpenLayers.LonLat(%f,%f); putMarker(mylonlat.transform(epsg_display_projection, @@ -149,11 +152,11 @@ class RouteChooserWidget(forms.TextInput): js = ["%sedit_route_map.js" % settings.MEDIA_URL, "%sbase.js" % settings.MEDIA_URL,] + URL_OSM_JS - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, area_name=''): ''' Render a map and latitude, longitude information field ''' - tpl = getMapJS() + tpl = getMapJS(area_name) help_create = '' if not value: help_create = """<h3>%s</h3> @@ -198,8 +201,8 @@ onclick='toggleDrawOff();'>%s</div> <hr class='spacer'/> <input type='hidden' name='%s' id='id_%s' value="%s"/> """ % (style, help_modify, name, name, value) - tpl += """<script type='text/javascript'><!-- -init();""" + tpl += "<script type='text/javascript'><!--\n" + tpl += "init();\n" if value: val = value if type(value) == unicode: |
