create nodes in graph view

This commit is contained in:
Laura Klünder 2017-07-26 13:52:23 +02:00
parent ef7af700dc
commit 1c1227c361
3 changed files with 32 additions and 11 deletions

View file

@ -5,8 +5,8 @@ from functools import reduce
from django.conf import settings from django.conf import settings
from django.core.exceptions import FieldDoesNotExist from django.core.exceptions import FieldDoesNotExist
from django.forms import BooleanField, CharField, ChoiceField, Form, ModelForm, MultipleChoiceField, ValidationError, \ from django.forms import (BooleanField, CharField, ChoiceField, Form, ModelChoiceField, ModelForm, MultipleChoiceField,
ModelChoiceField ValidationError)
from django.forms.widgets import HiddenInput from django.forms.widgets import HiddenInput
from django.utils.text import format_lazy from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -15,7 +15,7 @@ from shapely.geometry.geo import mapping
from c3nav.editor.models import ChangeSet, ChangeSetUpdate from c3nav.editor.models import ChangeSet, ChangeSetUpdate
from c3nav.mapdata.fields import GeometryField from c3nav.mapdata.fields import GeometryField
from c3nav.mapdata.models import GraphNode, GraphEdge from c3nav.mapdata.models import GraphEdge, GraphNode
class EditorFormBase(ModelForm): class EditorFormBase(ModelForm):

View file

@ -17,13 +17,13 @@
</small> </small>
</h3> </h3>
<a href="{% url 'editor.graph.settings' %}" class="btn btn-default btn-xs pull-right" data-graph-editing="{{ graph_editing }}">{% trans 'Settings' %}</a> <a href="{% url 'editor.graph.settings' %}" class="btn btn-default btn-xs pull-right">{% trans 'Settings' %}</a>
<p> <p>
<a href="{{ back_url }}">&laquo; {{ back_title }}</a> <a href="{{ back_url }}">&laquo; {{ back_title }}</a>
</p> </p>
{% bootstrap_messages %} {% bootstrap_messages %}
<form action="{{ request.path }}" method="post"> <form action="{{ request.path }}" method="post" data-graph-editing="{{ graph_editing }}" {% if nozoom %}data-nozoom {% endif %}>
{% csrf_token %} {% csrf_token %}
<h4>{% trans 'Default node properties' %}</h4> <h4>{% trans 'Default node properties' %}</h4>

View file

@ -8,8 +8,8 @@ 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 _
from c3nav.editor.forms import GraphEditorSettingsForm, GraphEdgeSettingsForm, GraphNodeSettingsForm, \ from c3nav.editor.forms import (GraphEdgeSettingsForm, GraphEditorActionForm, GraphEditorSettingsForm,
GraphEditorActionForm GraphNodeSettingsForm)
from c3nav.editor.views.base import sidebar_view from c3nav.editor.views.base import sidebar_view
@ -379,16 +379,37 @@ def graph_edit(request, level=None, space=None):
allow_clicked_position = True allow_clicked_position = True
if request.method == 'POST': if request.method == 'POST':
node_settings_form = GraphNodeSettingsForm(data=request.POST) node_settings_form = GraphNodeSettingsForm(instance=GraphNode(), data=request.POST)
edge_settings_form = GraphEdgeSettingsForm(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=allow_clicked_position, graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position,
data=request.POST) data=request.POST)
if node_settings_form.is_valid() and edge_settings_form.is_valid() and graph_action_form.is_valid(): if node_settings_form.is_valid() and edge_settings_form.is_valid() and graph_action_form.is_valid():
messages.success(request, _('Forms valid!')) active_node = graph_action_form.cleaned_data['active_node']
clicked_node = graph_action_form.cleaned_data['clicked_node']
clicked_position = graph_action_form.cleaned_data.get('clicked_position')
if clicked_node is not None and clicked_position is None:
raise NotImplementedError
elif clicked_node is None and clicked_position is not None:
click_anywhere_setting = graph_editing_settings['click_anywhere']
if click_anywhere_setting != 'create_node_if_none_active' or active_node is None:
node = node_settings_form.instance
node.space = space
node.geometry = clicked_position
if space.geometry.contains(clicked_position):
with request.changeset.lock_to_edit(request) as changeset:
if changeset.can_edit(request):
node.save()
else:
messages.error(request, _('You can not edit changes on this changeset.'))
messages.success(request, _('New graph node created!'))
ctx.update({
'nozoom': True,
})
else: else:
node_settings_form = GraphNodeSettingsForm() node_settings_form = GraphNodeSettingsForm()
edge_settings_form = GraphEdgeSettingsForm(request=request) edge_settings_form = GraphEdgeSettingsForm(request=request)
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position) graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position)
ctx.update({ ctx.update({
'node_settings_form': node_settings_form, 'node_settings_form': node_settings_form,