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 %}
|
{% if set_active_node %}
|
||||||
<div data-active-node="{% if active_node %}{{ active_node.pk }}{% else %}null{% endif %}" class="well well-sm">
|
<div data-active-node="{% if active_node %}{{ active_node.pk }}{% else %}null{% endif %}" class="well well-sm">
|
||||||
|
<p>
|
||||||
<strong>{% trans 'Active node:' %} {{ active_node.pk }}</strong><br>
|
<strong>{% trans 'Active node:' %} {{ active_node.pk }}</strong><br>
|
||||||
{% with space_title=active_node.space.title level_title=active_node.space.level.title %}
|
{% with space_title=active_node.space.title level_title=active_node.space.level.title %}
|
||||||
{% blocktrans %}in space {{ space_title }}{% endblocktrans %}<br>
|
{% blocktrans %}in space {{ space_title }}{% endblocktrans %}<br>
|
||||||
{% blocktrans %}on level {{ level_title }}{% endblocktrans %}
|
{% blocktrans %}on level {{ level_title }}{% endblocktrans %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
</p>
|
||||||
<form action="{{ request.path }}" method="post">
|
<form action="{{ request.path }}" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="pk" value="{{ active_node.pk }}">
|
<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>
|
<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>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div data-active-node class="well well-sm"></div>
|
<div data-active-node class="well well-sm"></div>
|
||||||
|
|
|
@ -4,6 +4,7 @@ from contextlib import suppress
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
|
from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models import Q
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
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.forms import GraphEdgeSettingsForm, GraphEditorActionForm
|
||||||
from c3nav.editor.views.base import etag_func, sidebar_view
|
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):
|
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:
|
elif space is not None:
|
||||||
queryset = Space.objects.filter(Space.q_for_request(request)).select_related('level').defer('geometry')
|
queryset = Space.objects.filter(Space.q_for_request(request)).select_related('level').defer('geometry')
|
||||||
space = get_object_or_404(queryset, pk=space)
|
space = get_object_or_404(queryset, pk=space)
|
||||||
|
level = space.level
|
||||||
ctx.update({
|
ctx.update({
|
||||||
'space': space,
|
'space': space,
|
||||||
'level': space.level,
|
'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'),
|
'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'),
|
'parent_title': _('to level graph'),
|
||||||
'geometry_url': '/api/editor/geometries/?space='+str(space.pk),
|
'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
|
'obj_title': node.title
|
||||||
})
|
})
|
||||||
|
|
||||||
|
permissions = AccessPermission.get_for_request(request) | set([None])
|
||||||
edge_settings_form = GraphEdgeSettingsForm(instance=GraphEdge(), request=request, data=request.POST)
|
edge_settings_form = GraphEdgeSettingsForm(instance=GraphEdge(), request=request, data=request.POST)
|
||||||
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=create_nodes,
|
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=create_nodes,
|
||||||
data=request.POST)
|
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.'))
|
messages.error(request, _('You can not edit changes on this changeset.'))
|
||||||
|
|
||||||
if set_active_node:
|
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({
|
ctx.update({
|
||||||
'set_active_node': set_active_node,
|
'set_active_node': set_active_node,
|
||||||
'active_node': active_node,
|
'active_node': active_node,
|
||||||
|
'active_node_connections': connections,
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
edge_settings_form = GraphEdgeSettingsForm(request=request)
|
edge_settings_form = GraphEdgeSettingsForm(request=request)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue