show graph node connections in editor
This commit is contained in:
parent
20cacfa507
commit
94445edfc0
2 changed files with 58 additions and 8 deletions
|
@ -28,16 +28,43 @@
|
|||
|
||||
{% if set_active_node %}
|
||||
<div data-active-node="{% if active_node %}{{ active_node.pk }}{% else %}null{% endif %}" class="well well-sm">
|
||||
<strong>{% trans 'Active node:' %} {{ active_node.pk }}</strong><br>
|
||||
{% with space_title=active_node.space.title level_title=active_node.space.level.title %}
|
||||
{% blocktrans %}in space {{ space_title }}{% endblocktrans %}<br>
|
||||
{% blocktrans %}on level {{ level_title }}{% endblocktrans %}
|
||||
{% endwith %}
|
||||
<p>
|
||||
<strong>{% trans 'Active node:' %} {{ active_node.pk }}</strong><br>
|
||||
{% with space_title=active_node.space.title level_title=active_node.space.level.title %}
|
||||
{% blocktrans %}in space {{ space_title }}{% endblocktrans %}<br>
|
||||
{% blocktrans %}on level {{ level_title }}{% endblocktrans %}
|
||||
{% endwith %}
|
||||
</p>
|
||||
<form action="{{ request.path }}" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="pk" value="{{ active_node.pk }}">
|
||||
<button type="submit" class="btn btn-danger btn-xs" name="delete" value="1">{% trans 'Delete Node' %}</button>
|
||||
</form>
|
||||
</form><br>
|
||||
<strong>{% trans 'Connections:' %}</strong><br>
|
||||
{% for connections in active_node_connections %}
|
||||
<small>
|
||||
<strong>
|
||||
{% with space_title=connections.0.other_node.space.title level_title=connections.0.other_node.space.level.title %}
|
||||
{% blocktrans %}Space {{ space_title }}{% endblocktrans %}<br>
|
||||
{% blocktrans %}on level {{ level_title }}{% endblocktrans %}
|
||||
{% endwith %}
|
||||
</strong>
|
||||
<br>
|
||||
→
|
||||
{% for connection in connections %}
|
||||
{% if connection.from_node_id == active_node.pk %}
|
||||
{{ connection.other_node.pk }}{% if connection.waytype %}{{ connection.waytype.title }}{% endif %},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<br>
|
||||
←
|
||||
{% for connection in connections %}
|
||||
{% if connection.from_node_id != active_node.pk %}
|
||||
{{ connection.other_node.pk }}{% if connection.waytype %}{{ connection.waytype.title }}{% endif %},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</small><br><br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div data-active-node class="well well-sm"></div>
|
||||
|
|
|
@ -4,6 +4,7 @@ from contextlib import suppress
|
|||
from django.contrib import messages
|
||||
from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
@ -11,6 +12,7 @@ from django.views.decorators.http import etag
|
|||
|
||||
from c3nav.editor.forms import GraphEdgeSettingsForm, GraphEditorActionForm
|
||||
from c3nav.editor.views.base import etag_func, sidebar_view
|
||||
from c3nav.mapdata.models.access import AccessPermission
|
||||
|
||||
|
||||
def child_model(request, model: typing.Union[str, models.Model], kwargs=None, parent=None):
|
||||
|
@ -407,12 +409,13 @@ def graph_edit(request, level=None, space=None):
|
|||
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)
|
||||
level = space.level
|
||||
ctx.update({
|
||||
'space': space,
|
||||
'level': space.level,
|
||||
'back_url': reverse('editor.spaces.detail', kwargs={'level': space.level.pk, 'pk': space.pk}),
|
||||
'back_url': reverse('editor.spaces.detail', kwargs={'level': level.pk, 'pk': space.pk}),
|
||||
'back_title': _('back to space'),
|
||||
'parent_url': reverse('editor.levels.graph', kwargs={'level': space.level.pk}),
|
||||
'parent_url': reverse('editor.levels.graph', kwargs={'level': level.pk}),
|
||||
'parent_title': _('to level graph'),
|
||||
'geometry_url': '/api/editor/geometries/?space='+str(space.pk),
|
||||
})
|
||||
|
@ -440,6 +443,7 @@ def graph_edit(request, level=None, space=None):
|
|||
'obj_title': node.title
|
||||
})
|
||||
|
||||
permissions = AccessPermission.get_for_request(request) | set([None])
|
||||
edge_settings_form = GraphEdgeSettingsForm(instance=GraphEdge(), request=request, data=request.POST)
|
||||
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=create_nodes,
|
||||
data=request.POST)
|
||||
|
@ -482,9 +486,28 @@ def graph_edit(request, level=None, space=None):
|
|||
messages.error(request, _('You can not edit changes on this changeset.'))
|
||||
|
||||
if set_active_node:
|
||||
if active_node:
|
||||
connections = {}
|
||||
for self_node, other_node in (('from_node', 'to_node'), ('to_node', 'from_node')):
|
||||
conn_qs = GraphEdge.objects.filter(Q(**{self_node+'__pk': active_node.pk}))
|
||||
conn_qs = conn_qs.select_related(other_node+'__space', other_node+'__space__level', 'waytype')
|
||||
|
||||
for edge in conn_qs:
|
||||
edge.other_node = getattr(edge, other_node)
|
||||
if (edge.other_node.space.access_restriction_id not in permissions
|
||||
or edge.other_node.space.level.access_restriction_id not in permissions):
|
||||
continue
|
||||
connections.setdefault(edge.other_node.space_id, []).append(edge)
|
||||
connections = sorted(
|
||||
connections.values(),
|
||||
key=lambda c: (c[0].other_node.space.level == level,
|
||||
c[0].other_node.space == space,
|
||||
c[0].other_node.space.level.base_altitude)
|
||||
)
|
||||
ctx.update({
|
||||
'set_active_node': set_active_node,
|
||||
'active_node': active_node,
|
||||
'active_node_connections': connections,
|
||||
})
|
||||
else:
|
||||
edge_settings_form = GraphEdgeSettingsForm(request=request)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue