diff options
| 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 |
| commit | 3419f706ecf16b0252975084ebe2806467a40206 (patch) | |
| tree | 2031e8b19abdaf2dcce67136d4432044f4d35c73 /chimere/static | |
| parent | 177517832e1e67a97c44cc0a7d79cb79f5e77e03 (diff) | |
| download | Chimè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.js | 50 | ||||
| -rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 130 |
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 |
