From 2dc3990379beea996d88737122e9eeaa00bf212f Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 6 Apr 2016 16:20:42 +0200 Subject: Manage point edition --- chimere/static/chimere/js/jquery.chimere.js | 96 +++++++++++----------- chimere/templates/chimere/blocks/head_form.html | 2 +- .../templates/chimere/blocks/live_coordinates.html | 50 ++++++----- chimere/widgets.py | 27 ++++-- 4 files changed, 95 insertions(+), 80 deletions(-) diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index 565598f..79a9e37 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -339,7 +339,7 @@ function transform(obj) { // popup management settings.popup_item = document.getElementById('popup'); settings.popup = new ol.Overlay({ - element: popup, + element: settings.popup, positioning: ol.OverlayPositioning.BOTTOM_LEFT, stopEvent: false }); @@ -407,8 +407,8 @@ function transform(obj) { source: settings.sourceVectors }); settings.map.addLayer(settings.layerVectors); - if (settings.edition && (settings.edition_type == 'polygon' - || settings.edition_type == 'route')){ + if (settings.edition){ //&& (settings.edition_type == 'polygon' + // || settings.edition_type == 'route')){ settings.features = new ol.Collection(); @@ -448,7 +448,7 @@ function transform(obj) { settings.map.addLayer(settings.editionVector); - var edition_type; + var edition_type = 'Point'; if (settings.edition_type == 'route') edition_type = 'LineString'; if (settings.edition_type == 'polygon') edition_type = 'Polygon'; @@ -710,10 +710,10 @@ function transform(obj) { activateContextMenu: function(){ settings.edition_type_is_route = false; - settings.map.events.unregister('click', settings.map, - methods.setMarker); - settings.map.events.register('click', settings.map, - methods.displayMapMenu); + // settings.map.events.unregister('click', settings.map, + // methods.setMarker); + // settings.map.events.register('click', settings.map, + // methods.displayMapMenu); }, activatePolygonEdit: function(){ @@ -725,8 +725,8 @@ function transform(obj) { return; settings.edition_type_is_route = true; methods.cleanMarker(); - settings.map.events.unregister('click', settings.map, - methods.setMarker); + // settings.map.events.unregister('click', settings.map, + // methods.setMarker); if (settings.routing){ settings.map.events.register('click', settings.map, methods.displayMapMenu); @@ -746,10 +746,10 @@ function transform(obj) { if (settings.current_popup != null) { settings.current_popup.hide(); } - settings.map.events.unregister('click', settings.map, - methods.displayMapMenu); - settings.map.events.register('click', settings.map, - methods.setMarker); + // settings.map.events.unregister('click', settings.map, + // methods.displayMapMenu); + //settings.map.events.register('click', settings.map, + // methods.setMarker); }, // change map_layer changeMapLayer: function(map_idx){ @@ -1093,6 +1093,10 @@ function transform(obj) { settings.draw_activated = true; settings.modify_activated = true; }, + activateModify: function (){ + settings.map.addInteraction(settings.modify); + settings.modify_activated = true; + }, deactivateDraw: function (){ if (settings.draw_activated){ settings.map.removeInteraction(settings.draw); @@ -1846,12 +1850,6 @@ function transform(obj) { settings.layerDbFeatures.getDataExtent()); }, // methods for edition - setMarker: function (event){ - event = event || window.event; - var lonlat = settings.map.getLonLatFromViewPortPx(event.xy); - methods.putEditMarker(lonlat, false); - OpenLayers.Event.stop(event); - }, cleanMarker: function(){ if (settings.current_edit_feature) { settings.layerDbFeatures.removeMarker(settings.current_edit_feature); @@ -1859,40 +1857,34 @@ function transform(obj) { }, /* put the marker on the map and update latitude and longitude fields */ putEditMarker: function (lonlat, zoom){ - methods.cleanMarker(); - settings.current_edit_feature = new OpenLayers.Marker(lonlat.clone(), - settings.default_icon); - settings.layerDbFeatures.addMarker(settings.current_edit_feature); - methods.updateMarkerInput(); + if (settings.features.getLength()) settings.features.pop(); + console.log(lonlat); + var point = new ol.geom.Point(lonlat); + point.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); + var feature = new ol.Feature({ + geometry: point + }); + + settings.features.push(feature); + methods.updateGenInput(); /* zoom to the point */ if (zoom){ - var bounds = settings.layerDbFeatures.getDataExtent(); - if (bounds) settings.map.zoomToExtent(bounds); + var view = settings.map.getView(); + view.fit(settings.editionSource.getExtent(), settings.map.getSize()); + view.setZoom(view.getZoom() - 11); } return; }, - updateMarkerInput: function(){ - if (!settings.current_edit_feature) { - return; - } - lonlat = settings.current_edit_feature.lonlat.clone().transform( - settings.map.getProjectionObject(), - EPSG_DISPLAY_PROJECTION); - $('#'+settings.input_id).val( - 'POINT(' + lonlat.lon + ' ' + lonlat.lat + ')'); - if($('#live_latitude').length){ - $('#live_latitude').val(lonlat.lat); - $('#live_longitude').val(lonlat.lon); - } - - }, updateInput: function(){ if (settings.edition_type == 'linestring'){ methods.updateRoutingInput(); } if (settings.edition_type == 'polygon'){ - methods.updatePolygonInput(); + methods.updateGenInput('polygon'); } + if (settings.edition_type == 'marker'){ + methods.updateGenInput('marker'); + }; }, updateRoutingInput: function(){ if (!settings.current_routes_features) { @@ -1915,16 +1907,26 @@ function transform(obj) { var linestring = new OpenLayers.Geometry.LineString(point_array); jQuery('#id_route').val(String(linestring)); }, - updatePolygonInput: function(){ + updateGenInput: function(){ var features = settings.editionSource.getFeatures(); + var input_id = '#'; + if (settings.edition_type == 'marker') input_id += settings.input_id; + if (settings.edition_type == 'polygon') input_id += 'id_polygon'; + if (!features.length) { - jQuery('#id_polygon').val(''); + jQuery(input_id).val(''); return; } var wkt = settings.WKT.writeFeature(features[0], { dataProjection: EPSG_DISPLAY_PROJECTION, - featureProjectsion: EPSG_PROJECTION}); - jQuery('#id_polygon').val(String(wkt)); + featureProjection: EPSG_PROJECTION}); + jQuery(input_id).val(String(wkt)); + if(settings.edition_type == 'marker' && $('#live_latitude').length){ + coords = features[0].getGeometry().clone().transform( + EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION).getCoordinates(); + $('#live_latitude').val(coords[1]); + $('#live_longitude').val(coords[0]); + } }, activateCurrentControl: function(){ if (settings.current_control){ diff --git a/chimere/templates/chimere/blocks/head_form.html b/chimere/templates/chimere/blocks/head_form.html index 032a711..4c24b29 100644 --- a/chimere/templates/chimere/blocks/head_form.html +++ b/chimere/templates/chimere/blocks/head_form.html @@ -1,2 +1,2 @@ - +{% if TINYMCE_URL %}{% endif %} diff --git a/chimere/templates/chimere/blocks/live_coordinates.html b/chimere/templates/chimere/blocks/live_coordinates.html index 6d0dfb4..7e8cfd9 100644 --- a/chimere/templates/chimere/blocks/live_coordinates.html +++ b/chimere/templates/chimere/blocks/live_coordinates.html @@ -1,14 +1,15 @@ diff --git a/chimere/widgets.py b/chimere/widgets.py index 1cc8918..7528e9b 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -168,12 +168,24 @@ class ImporterChoicesWidget(forms.Select): class Media: js = ["%schimere/js/importer_interface.js" % settings.STATIC_URL] +TINYMCE_JS, FULL_TINY_JS, ADMIN_TINY_JS = [], [], [] + +if settings.TINYMCE_URL: + TINYMCE_JS = ["%stiny_mce.js" % settings.TINYMCE_URL] + FULL_TINY_JS = TINYMCE_JS[:] + \ + ["%schimere/js/textareas.js" % settings.STATIC_URL] + ADMIN_TINY_JS = TINYMCE_JS[:] + \ + ["%schimere/js/textareas_admin.js" % settings.STATIC_URL] + class TextareaWidgetBase(forms.Textarea): """ Manage the edition of a text using TinyMCE """ def render(self, *args, **kwargs): + if not TINYMCE_JS: + rendered = super(TextareaWidgetBase, self).render(*args, **kwargs) + return mark_safe(rendered) if 'attrs' not in kwargs: kwargs['attrs'] = {} if 'class' not in kwargs['attrs']: @@ -190,9 +202,13 @@ class FullTextareaWidget(TextareaWidgetBase): Manage the edition of a text using TinyMCE """ class Media: - js = ["%stiny_mce.js" % settings.TINYMCE_URL] + js = TINYMCE_JS def render(self, *args, **kwargs): + if not TINYMCE_JS: + rendered = super(FullTextareaWidget, self).render(*args, **kwargs) + return mark_safe(rendered) + if 'attrs' not in kwargs: kwargs['attrs'] = {} if 'class' not in kwargs['attrs']: @@ -218,14 +234,12 @@ class TextareaWidget(TextareaWidgetBase): Manage the edition of a text using TinyMCE """ class Media: - js = ["%stiny_mce.js" % settings.TINYMCE_URL, - "%schimere/js/textareas.js" % settings.STATIC_URL] + js = FULL_TINY_JS class TextareaAdminWidget(TextareaWidgetBase): class Media: - js = ["%stiny_mce.js" % settings.TINYMCE_URL, - "%schimere/js/textareas_admin.js" % settings.STATIC_URL] + js = ADMIN_TINY_JS class DatePickerWidget(forms.TextInput): @@ -318,7 +332,8 @@ class PointChooserWidget(forms.TextInput): (settings.STATIC_URL, settings.CHIMERE_EPSG_DISPLAY_PROJECTION, settings.CHIMERE_EPSG_PROJECTION, - settings.CHIMERE_DEFAULT_CENTER, + "[{}, {}]".format(settings.CHIMERE_DEFAULT_CENTER[0], + settings.CHIMERE_DEFAULT_CENTER[1]), settings.CHIMERE_DEFAULT_ZOOM, settings.STATIC_URL, ", ".join(map_layers) -- cgit v1.2.3