summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit2dc3990379beea996d88737122e9eeaa00bf212f (patch)
tree1d0d858a58de09118ac461f88a91a9ddd866ba29
parent9642d96c9328b61a206a7a5d4df7bbc54de38946 (diff)
downloadChimère-2dc3990379beea996d88737122e9eeaa00bf212f.tar.bz2
Chimère-2dc3990379beea996d88737122e9eeaa00bf212f.zip
Manage point edition
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js96
-rw-r--r--chimere/templates/chimere/blocks/head_form.html2
-rw-r--r--chimere/templates/chimere/blocks/live_coordinates.html50
-rw-r--r--chimere/widgets.py27
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)