diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-04-06 16:20:42 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-04-06 16:20:42 +0200 |
commit | 2dc3990379beea996d88737122e9eeaa00bf212f (patch) | |
tree | 1d0d858a58de09118ac461f88a91a9ddd866ba29 | |
parent | 9642d96c9328b61a206a7a5d4df7bbc54de38946 (diff) | |
download | Chimère-2dc3990379beea996d88737122e9eeaa00bf212f.tar.bz2 Chimère-2dc3990379beea996d88737122e9eeaa00bf212f.zip |
Manage point edition
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 96 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/head_form.html | 2 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/live_coordinates.html | 50 | ||||
-rw-r--r-- | 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 @@ -<script src="{{ TINYMCE_URL }}tiny_mce.js" type="text/javascript"></script> +{% if TINYMCE_URL %}<script src="{{ TINYMCE_URL }}tiny_mce.js" type="text/javascript"></script>{% 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 @@ <script type='text/javascript'> var resolutions; var zoomOffset; - OpenLayers.ImgPath = '%schimere/img/'; - var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s'); - var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:%s'); - var CENTER_LONLAT = centerLonLat = new OpenLayers.LonLat%s.transform(epsg_display_projection, epsg_projection); + // OpenLayers.ImgPath = '%schimere/img/'; + var EPSG_DISPLAY_PROJECTION = epsg_display_projection = 'EPSG:%s'; + var EPSG_PROJECTION = epsg_projection = 'EPSG:%s'; + var CENTER_LONLAT = centerLonLat = ol.proj.transform(%s, + EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); var DEFAULT_ZOOM = %s; var chimere_init_options = {}; chimere_init_options["input_id"] = 'id_{{name}}'; - chimere_init_options["default_icon"] = new OpenLayers.Icon('%schimere/img/marker-green.png', new OpenLayers.Size(21, 25), new OpenLayers.Pixel(-(21/2), -25)); + //chimere_init_options["default_icon"] = new OpenLayers.Icon('%schimere/img/marker-green.png', new OpenLayers.Size(21, 25), new OpenLayers.Pixel(-(21/2), -25)); chimere_init_options["map_layers"] = [%s]; chimere_init_options['dynamic_categories'] = false; chimere_init_options['edition'] = true; @@ -23,11 +24,11 @@ <div id='live_lonlat'> <p> <label for='live_latitude'>{{lat}}</label> - <input type='text' name='live_latitude' id='live_latitude' size='8' adisabled='true' value='{{value_y|stringformat:"f"}}'/> + <input type='text' readonly='readonly' name='live_latitude' id='live_latitude' size='8' adisabled='true' value='{{value_y|stringformat:"f"}}'/> </p> <p> <label for='live_longitude'>{{lon}}</label> - <input type='text' name='live_longitude' id='live_longitude' size='8' adisabled='true' value='{{value_x|stringformat:"f"}}'/> + <input type='text' readonly='readonly' name='live_longitude' id='live_longitude' size='8' adisabled='true' value='{{value_x|stringformat:"f"}}'/> </p> <input type='hidden' name='{{name}}' id='id_{{name}}' value='{{val}}'/> @@ -35,27 +36,24 @@ function init_map_edit(){ $('#map_edit').chimere(chimere_init_options); {% if isvalue %} - var mylonlat = new OpenLayers.LonLat({{value_x|stringformat:"f"}}, - {{value_y|stringformat:"f"}}); - $("#map_edit").chimere( - "putEditMarker", - mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), - true); + var mylonlat = [{{value_x|stringformat:"f"}}, + {{value_y|stringformat:"f"}}]; + $("#map_edit").chimere("putEditMarker", + mylonlat, true); + $('#map_edit').chimere('activateModify'); + {% else %} + $('#map_edit').chimere('activateDraw'); {% endif %} - $('#live_latitude').change(function() { - var mylonlat = new OpenLayers.LonLat($('#live_longitude').val(), - $('#live_latitude').val()); - $("#map_edit").chimere("putEditMarker", - mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), false); - $("#map_edit").chimere("settings").map.setCenter(mylonlat); - }); - $('#live_longitude').change(function() { - var mylonlat = new OpenLayers.LonLat($('#live_longitude').val(), - $('#live_latitude').val()); + + function update_marker_on_map(){ + var mylonlat = [$('#live_longitude').val(), + $('#live_latitude').val()]; $("#map_edit").chimere("putEditMarker", - mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), false); - $("#map_edit").chimere("settings").map.setCenter(mylonlat); - }); + mylonlat, + true); + } + $('#live_latitude').change(update_marker_on_map); + $('#live_longitude').change(update_marker_on_map); } {% if initialized %}init_map_edit();{% endif %} </script> 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) |