draw new geometries

This commit is contained in:
Laura Klünder 2017-05-26 19:58:04 +02:00
parent c2e59c2b94
commit 3206ca50a4
4 changed files with 48 additions and 25 deletions

View file

@ -61,7 +61,7 @@ class MapitemFormMixin(ModelForm):
def create_editor_form(editor_model):
possible_fields = ['section', 'space', 'name', 'altitude', 'can_search', 'can_describe', 'color', 'public',
possible_fields = ['name', 'altitude', 'can_search', 'can_describe', 'color', 'public',
'groups', 'geometry', 'level', 'category', 'outside', 'stuffed', 'width']
existing_fields = [field.name for field in editor_model._meta.get_fields() if field.name in possible_fields]

View file

@ -144,7 +144,6 @@ editor = {
$('body').removeClass('map-enabled').removeClass('show-map');
editor._section_control.hide();
}
editor._check_start_editing();
},
_sidebar_error: function(data) {
$('#sidebar').removeClass('loading').find('.content').html('<h3>Error '+data.status+'</h3>'+data.statusText);
@ -227,9 +226,7 @@ editor = {
editor._geometries_layer.addTo(editor.map);
editor._highlight_layer.addTo(editor.map);
editor._loading_geometry = false;
if (editor._editing_layer !== null) {
editor._editing_layer.enableEdit();
}
editor._check_start_editing();
});
},
_line_draw_geometry_style: function(style) {
@ -346,30 +343,37 @@ editor = {
// edit and create geometries
_check_start_editing: function() {
// called on sidebar load. start editing or creating depending on how the sidebar may require it
var sidebarcontent = $('#sidebar').find('.content');
var geometry_field = sidebarcontent.find('input[name=geometry]');
if (geometry_field.length) {
var form = geometry_field.closest('form');
var mapitem_type = form.attr('data-mapitem-type');
if (geometry_field.val() !== '') {
} else if (form.is('[data-geomtype]')) {
var mapitem_type = form.attr('data-new');
if (editor._editing_layer !== null) {
editor._editing_layer.enableEdit();
} else if (form.is('[data-new]')) {
// create new geometry
form.addClass('creation-lock');
var geomtype = form.attr('data-geomtype');
var options = editor._get_mapitem_type_style(mapitem_type);
if (geomtype === 'polygon') {
editor.map.editTools.startPolygon(null, options);
} else if (geomtype === 'polyline') {
options = editor._line_draw_geometry_style(options);
editor.map.editTools.startPolyline(null, options);
if (geometry_field.val() === '') {
form.addClass('creation-lock');
var geomtype = form.attr('data-geomtype');
if (geomtype === 'polygon') {
editor.map.editTools.startPolygon(null, options);
} else if (geomtype === 'polyline') {
options = editor._line_draw_geometry_style(options);
editor.map.editTools.startPolyline(null, options);
}
editor._creating = true;
} else {
editor._editing_layer = L.geoJSON({
"type": "Feature",
"geometry": JSON.parse(geometry_field.val())
}, {
style: function() {
return options;
}
}).getLayers()[0].addTo(editor.map);
editor._editing_layer.enableEdit();
}
editor._creating = true;
$('#id_level').val(editor._level);
$('#id_levels').find('option[value='+editor._level+']').prop('selected', true);
}
}
},
@ -379,6 +383,10 @@ editor = {
editor._creating = false;
editor.map.editTools.stopDrawing();
}
if (editor._editing_layer !== null) {
editor._editing_layer.remove();
editor._editing_layer = null;
}
},
_canceled_creating: function (e) {
// called after we canceled creating so we can remove the temporary layer.

View file

@ -11,7 +11,7 @@
{% else %}
<h3>{% blocktrans %}Edit {{ model_title }}{% endblocktrans %}</h3>
{% endif %}
<form action="{{ path }}" method="post" data-onbeforeunload data-editing="{{ model_name }}-{{ pk }}">
<form action="{{ path }}" method="post" data-onbeforeunload {% if new %}data-new="{{ model_name }}" data-geomtype="{{ geomtype }}"{% else %}data-editing="{{ model_name }}-{{ pk }}"{% endif %}>
{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}

View file

@ -102,6 +102,7 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F
'pk': pk,
'model_name': model.__name__.lower(),
'model_title': model._meta.verbose_name,
'geomtype': model._meta.get_field('geometry').geomtype,
'new': new,
'title': obj.title if obj else None,
}
@ -118,6 +119,12 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F
'back_url': reverse('editor.spaces.detail', kwargs={'section': obj.section.pk, 'pk': pk}),
'geometry_url': '/api/editor/geometries/?space='+pk,
})
elif model == Space and new:
ctx.update({
'section': section,
'back_url': reverse('editor.spaces.list', kwargs={'section': section.pk}),
'geometry_url': '/api/editor/geometries/?section='+str(section.pk),
})
elif hasattr(model, 'section'):
if obj:
section = obj.section
@ -154,8 +161,10 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F
raise NotImplementedError
obj.delete()
if model == Section:
ctx.update({'target': reverse('editor.index')})
return redirect(reverse('editor.index') if model == Section else ctx['back_url'])
return redirect(reverse('editor.index'))
elif model == Space:
return redirect(reverse('editor.spaces.list', kwargs={'section': obj.section.pk}))
return redirect(ctx['back_url'])
return render(request, 'editor/delete.html', ctx)
form = model.EditorForm(instance=obj, data=request.POST, request=request)
@ -173,6 +182,12 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F
# todo: suggest changes
raise NotImplementedError
if section is not None:
obj.section = section
if space is not None:
obj.space = space
obj.save()
form.save_m2m()