summaryrefslogtreecommitdiff
path: root/chimere/static
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-04-08 23:38:39 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-04-08 23:38:39 +0200
commit3419f706ecf16b0252975084ebe2806467a40206 (patch)
tree2031e8b19abdaf2dcce67136d4432044f4d35c73 /chimere/static
parent177517832e1e67a97c44cc0a7d79cb79f5e77e03 (diff)
downloadChimère-3419f706ecf16b0252975084ebe2806467a40206.tar.bz2
Chimère-3419f706ecf16b0252975084ebe2806467a40206.zip
Move route edition to jquery.chimere plugin (currently broken)
Diffstat (limited to 'chimere/static')
-rw-r--r--chimere/static/chimere/js/edit_route_map.js50
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js130
2 files changed, 141 insertions, 39 deletions
diff --git a/chimere/static/chimere/js/edit_route_map.js b/chimere/static/chimere/js/edit_route_map.js
index df81b49..b0bcceb 100644
--- a/chimere/static/chimere/js/edit_route_map.js
+++ b/chimere/static/chimere/js/edit_route_map.js
@@ -15,15 +15,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
See the file COPYING for details.
*/
-
-/* map edit */
+/*
+// map edit
var map;
var currentControl;
var pathCreate;
var pathModify;
-/* availaible map layers */
+// availaible map layers
var vectors = new OpenLayers.Layer.Vector("Vector Layer");
vectors.events.on({
@@ -33,7 +33,7 @@ vectors.events.on({
var currentFeature;
function featureCreated(event) {
- /* toggle to edition mode */
+ // toggle to edition mode
pathCreate.deactivate();
currentControl = pathModify;
var help_route_create = document.getElementById('help-route-create');
@@ -71,13 +71,13 @@ function initFeatureFromGeometry(linestring){
vectors.removeFeatures();
vectors.addFeatures([currentFeature]);
currentControl = pathModify;
- /*zoom to the route*/
+ // zoom to the route
var bounds = vectors.getDataExtent();
if (bounds) map.zoomToExtent(bounds);
}
function updateForm(event) {
- /* update the form */
+ // update the form
if(event){
currentFeature = event.feature;
}
@@ -93,14 +93,14 @@ function updateForm(event) {
}
-/* path control */
+// path control
var pathCreate = new OpenLayers.Control.DrawFeature(vectors,
OpenLayers.Handler.Path);
var currentControl = pathCreate;
var pathModify = new OpenLayers.Control.ModifyFeature(vectors,
{clickout:false, toggle:false});
-/* main initialisation function */
+// main initialisation function
function init(){
var options = {
controls:[new OpenLayers.Control.Navigation(),
@@ -123,34 +123,36 @@ function init(){
vectors.setOpacity(0.5);
map.addLayers([map_layer, vectors]);
- /* zoom to the appropriate extent */
+ //zoom to the appropriate extent
if (!zoomToCurrentExtent(map)){
map.setCenter(centerLonLat, 12);
}
}
+*/
function toggleDraw() {
- document.getElementById('draw-toggle-off').style.display = 'None';
- document.getElementById('draw-or').style.display = 'None';
- document.getElementById('upload').style.display = 'None';
- document.getElementById('map_edit').style.display = '';
- document.getElementById('help-route-create').style.display = 'block';
- init();
+ jQuery('#draw-toggle-off').hide();
+ jQuery('#draw-or').hide();
+ jQuery('#upload').hide();
+ jQuery('#map_edit').show();
+ jQuery('#help-route-create').show();
+ jQuery('#map_edit').chimere(chimere_init_options);
}
function toggleDrawOn() {
- jQuery('#button-move-map').removeClass('toggle-button-active').addClass('toggle-button-inactive');
- jQuery('#button-draw-map').removeClass('toggle-button-inactive').addClass('toggle-button-active');
- currentControl.activate();
- if (currentFeature){
- pathModify.selectControl.select(currentFeature);
- }
+ jQuery('#button-move-map').removeClass('toggle-button-active'
+ ).addClass('toggle-button-inactive');
+ jQuery('#button-draw-map').removeClass('toggle-button-inactive'
+ ).addClass('toggle-button-active');
+ jQuery("#map_edit").chimere("activateCurrentControl");
}
function toggleDrawOff() {
- jQuery('#button-draw-map').removeClass('toggle-button-active').addClass('toggle-button-inactive');
- jQuery('#button-move-map').removeClass('toggle-button-inactive').addClass('toggle-button-active');
- currentControl.deactivate();
+ jQuery('#button-draw-map').removeClass('toggle-button-active'
+ ).addClass('toggle-button-inactive');
+ jQuery('#button-move-map').removeClass('toggle-button-inactive'
+ ).addClass('toggle-button-active');
+ jQuery("#map_edit").chimere("deactivateCurrentControl");
}
function checkFields(){
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index ea035ad..73e77cf 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -65,6 +65,7 @@ See the file COPYING for details.
projection: new OpenLayers.Projection('EPSG:4326'),
theme:null,
current_feature: null, // To store the active POI
+ current_control: null, // To store the current control
current_popup: null, // To store the current POI popup displayed
current_category: null, // To store the current category clicked in list
icon_offset: new OpenLayers.Pixel(0, 0),
@@ -96,7 +97,8 @@ See the file COPYING for details.
theme: settings.theme
};
if (settings.restricted_extent){
- settings.restricted_extent.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
+ settings.restricted_extent.transform(EPSG_DISPLAY_PROJECTION,
+ EPSG_PROJECTION);
map_options['restrictedExtent'] = settings.restricted_extent;
}
@@ -111,7 +113,8 @@ See the file COPYING for details.
// hard to understand from OL documentation...
permalink_options["div"] = settings.permalink_element;
}
- settings.permalink = new OpenLayers.Control.Permalink(permalink_options);
+ settings.permalink = new OpenLayers.Control.Permalink(
+ permalink_options);
}
/* HACK new permalink createParams method
FIXME when facilities are given to personalize the permalink */
@@ -131,7 +134,8 @@ See the file COPYING for details.
settings.permalink.createParams = _createParams;
settings.map.addControl(settings.permalink);
// update with the translated permalink label
- if(settings.permalink_label && settings.permalink.div && settings.permalink.div.childNodes.length > 0){
+ if(settings.permalink_label && settings.permalink.div
+ && settings.permalink.div.childNodes.length > 0){
settings.permalink.div.childNodes[0].textContent = settings.permalink_label;
}
}
@@ -142,6 +146,12 @@ See the file COPYING for details.
settings.layerVectors = new OpenLayers.Layer.Vector("Vector Layer");
settings.map.addLayer(settings.layerVectors);
settings.layerVectors.setOpacity(0.8);
+ if (settings.edition_type_is_route){
+ settings.map.addControl(new OpenLayers.Control.DrawFeature(
+ settings.layerVectors, OpenLayers.Handler.Path));
+ settings.map.addControl(new OpenLayers.Control.ModifyFeature(
+ settings.layerVectors, {clickout:false, toggle:false}));
+ }
/* Markers layer */
settings.layerMarkers = new OpenLayers.Layer.Markers('POIs');
settings.map.addLayer(settings.layerMarkers);
@@ -174,10 +184,18 @@ See the file COPYING for details.
settings.map.events.register('click', settings.map,
helpers.hidePopup);
} else {
- map.events.register('click', settings.map, methods.setMarker);
+ if (!settings.edition_type_is_route){
+ map.events.register('click', settings.map,
+ methods.setMarker);
+ } else {
+ map.events.register('featuremodified',
+ settings.layerVectors, helpers.updateRouteForm);
+ map.events.register('featureadded',
+ settings.layerVectors, helpers.featureRouteCreated);
+ }
}
}, // end of init
-
+
/*
* Load markers and route from DB
*/
@@ -509,6 +527,60 @@ See the file COPYING for details.
if (bounds) settings.map.zoomToExtent(bounds);
}
return;
+ },
+ activateCurrentControl: function(){
+ if (settings.current_control){
+ settings.current_control.activate();
+ } else {
+ var pathCreate = settings.map.getControlsByClass(
+ 'OpenLayers.Control.DrawFeature');
+ if (pathCreate){
+ pathCreate[0].activate();
+ }
+ }
+ var pathModify = settings.map.getControlsByClass(
+ 'OpenLayers.Control.ModifyFeature');
+ if (settings.current_feature && pathModify){
+ pathModify[0].selectControl.select(settings.current_feature);
+ }
+ },
+ deactivateCurrentControl: function(){
+ if (settings.current_control){
+ settings.current_control.deactivate();
+ }
+ },
+ initFeature: function(json_geometry){
+ var json = new OpenLayers.Format.JSON();
+ var polyline = json.read(json_geometry);
+ var point_array = new Array();
+ for (i=0; i<polyline.coordinates.length; i++){
+ var point = new OpenLayers.Geometry.Point(
+ polyline.coordinates[i][0],
+ polyline.coordinates[i][1]);
+ point_array.push(point);
+ }
+ var linestring = new OpenLayers.Geometry.LineString(point_array);
+ methods.initFeatureFromGeometry(linestring);
+ },
+ initFeatureFromWkt: function(wkt_geometry){
+ var linestring = OpenLayers.Geometry.fromWKT(wkt_geometry);
+ methods.initFeatureFromGeometry(linestring);
+ },
+ initFeatureFromGeometry: function(linestring){
+ linestring.transform(EPSG_DISPLAY_PROJECTION,
+ EPSG_PROJECTION);
+ currentFeature = new OpenLayers.Feature.Vector();
+ currentFeature.geometry = linestring;
+ settings.layerVectors.removeFeatures();
+ settings.layerVectors.addFeatures([currentFeature]);
+ var pathModify = settings.map.getControlsByClass(
+ 'OpenLayers.Control.ModifyFeature');
+ if (pathModify){
+ settings.current_control = pathModify[0];
+ }
+ /*zoom to the route*/
+ var bounds = settings.layerVectors.getDataExtent();
+ if (bounds) settings.map.zoomToExtent(bounds);
}
}; // End of public methods
var helpers = {
@@ -547,16 +619,17 @@ See the file COPYING for details.
* Retrieve checked_categories, and store it in settings
*/
var initialized = false;
- $('#frm_categories .subcategories input:checkbox').each(function(index){
- if (!initialized){
- initialized = true;
- settings.checked_categories = [];
- settings.display_submited = false;
- }
- if ($(this).attr('checked') == 'checked'){
- cat_id = $(this).attr('id').split('_').pop();
- settings.checked_categories.push(parseInt(cat_id));
- }
+ $('#frm_categories .subcategories input:checkbox').each(
+ function(index){
+ if (!initialized){
+ initialized = true;
+ settings.checked_categories = [];
+ settings.display_submited = false;
+ }
+ if ($(this).attr('checked') == 'checked'){
+ cat_id = $(this).attr('id').split('_').pop();
+ settings.checked_categories.push(parseInt(cat_id));
+ }
});
if(initialized && $('#display_submited_check').attr("checked") == "checked"){
settings.display_submited = true;
@@ -621,6 +694,33 @@ See the file COPYING for details.
}
}
return map_extent;
+ },
+ featureRouteCreated: function(event) {
+ /* toggle to edition mode */
+ var pathModify = settings.map.getControlsByClass(
+ 'OpenLayers.Control.ModifyFeature')[0];
+ var pathCreate = settings.map.getControlsByClass(
+ 'OpenLayers.Control.DrawFeature')[0];
+ pathCreate.deactivate();
+ settings.current_control = pathModify;
+ jQuery('#help-route-create').hide();
+ jQuery('#help-route-modify').show();
+ pathModify.activate();
+ helpers.updateRouteForm(event);
+ pathModify.selectControl.select(event.feature);
+ },
+ updateForm: function(event) {
+ /* update the form */
+ if (event){
+ settings.current_feature = event.feature;
+ }
+ var current_geo = settings.current_feature.geometry.clone();
+ current_geo.transform(EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION);
+ jQuery('#id_route').val(current_geo);
+ var vertices = current_geo.getVertices();
+ if (vertices){
+ jQuery('#id_point').val(vertices);
+ }
}
}; // End of helpers