diff --git a/src/c3nav/editor/templates/editor/graph.html b/src/c3nav/editor/templates/editor/graph.html
index cad93e75..0567796c 100644
--- a/src/c3nav/editor/templates/editor/graph.html
+++ b/src/c3nav/editor/templates/editor/graph.html
@@ -2,16 +2,21 @@
{% load i18n %}
{% include 'editor/fragment_levels.html' %}
-
{{ space.title }}
+
+ {% trans 'Graph' %}
+
+ {% if space %}
+ {% with space.title as space_title %}
+ {% blocktrans %}in space {{ space_title }}{% endblocktrans %}
+ {% endwith %}
+ {% else %}
+ {% with level.title as level_title %}
+ {% blocktrans %}on level {{ level_title }}{% endblocktrans %}
+ {% endwith %}
+ {% endif %}
+
+
-
- {% trans 'Space' as model_title %}
- {% blocktrans %}Edit {{ model_title }}{% endblocktrans %}
-
-
-
- « {% trans 'back to overview' %}
+ « {{ back_title }}
{% bootstrap_messages %}
-
-{% include 'editor/fragment_child_models.html' %}
diff --git a/src/c3nav/editor/urls.py b/src/c3nav/editor/urls.py
index 4d1a1e92..aa88f848 100644
--- a/src/c3nav/editor/urls.py
+++ b/src/c3nav/editor/urls.py
@@ -2,7 +2,7 @@ from django.apps import apps
from django.conf.urls import url
from c3nav.editor.views.changes import changeset_detail, changeset_edit
-from c3nav.editor.views.edit import edit, level_detail, list_objects, main_index, space_detail
+from c3nav.editor.views.edit import edit, graph_edit, level_detail, list_objects, main_index, space_detail
from c3nav.editor.views.login import login_view, logout_view
from c3nav.editor.views.users import user_detail
@@ -37,6 +37,8 @@ urlpatterns = [
url(r'^levels/(?Pc?[0-9]+)/spaces/(?Pc?[0-9]+)/$', space_detail, name='editor.spaces.detail'),
url(r'^levels/(?Pc?[0-9]+)/levels_on_top/create$', edit, name='editor.levels_on_top.create',
kwargs={'model': 'Level'}),
+ url(r'^levels/(?Pc?[0-9]+)/graph/$', graph_edit, name='editor.levels.graph'),
+ url(r'^spaces/(?Pc?[0-9]+)/graph/$', graph_edit, name='editor.spaces.graph'),
url(r'^changesets/(?P[0-9]+)/$', changeset_detail, name='editor.changesets.detail'),
url(r'^changesets/(?P[0-9]+)/edit$', changeset_edit, name='editor.changesets.edit'),
url(r'^users/(?P[0-9]+)/$', user_detail, name='editor.users.detail'),
diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py
index ed838dd0..42491552 100644
--- a/src/c3nav/editor/views/edit.py
+++ b/src/c3nav/editor/views/edit.py
@@ -291,8 +291,8 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
if level is not None:
reverse_kwargs['level'] = level
- level = get_object_or_404(Level, pk=level)
- queryset = queryset.filter(Level.q_for_request(request), level=level).defer('geometry')
+ level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level)
+ queryset = queryset.filter(level=level).defer('geometry')
ctx.update({
'back_url': reverse('editor.levels.detail', kwargs={'pk': level.pk}),
'back_title': _('back to level'),
@@ -330,3 +330,39 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
})
return render(request, 'editor/list.html', ctx)
+
+
+@sidebar_view
+def graph_edit(request, level=None, space=None):
+ Level = request.changeset.wrap_model('Level')
+ Space = request.changeset.wrap_model('Space')
+
+ can_edit = request.changeset.can_edit(request)
+
+ ctx = {
+ 'path': request.path,
+ 'can_edit': can_edit,
+ }
+
+ if level is not None:
+ level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level)
+ ctx.update({
+ 'back_url': reverse('editor.levels.detail', kwargs={'pk': level.pk}),
+ 'back_title': _('back to level'),
+ 'levels': Level.objects.filter(Level.q_for_request(request), on_top_of__isnull=True),
+ 'level': level,
+ 'level_url': request.resolver_match.url_name,
+ 'geometry_url': '/api/editor/geometries/?level='+str(level.primary_level_pk),
+ })
+ elif space is not None:
+ queryset = Space.objects.filter(Space.q_for_request(request)).select_related('level').defer('geometry')
+ space = get_object_or_404(queryset, pk=space)
+ ctx.update({
+ 'space': space,
+ 'level': space.level,
+ 'back_url': reverse('editor.spaces.detail', kwargs={'level': space.level.pk, 'pk': space.pk}),
+ 'back_title': _('back to space'),
+ 'geometry_url': '/api/editor/geometries/?space='+str(space.pk),
+ })
+
+ return render(request, 'editor/graph.html', ctx)