summaryrefslogtreecommitdiff
path: root/chimere/static
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-04-06 22:51:13 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-04-06 22:51:13 +0200
commit73eb6055d36fd785c468ed0866df43fd4c3fef44 (patch)
tree0f97884173d6f4a0e2ac55e73fb69fc4cc6e4c41 /chimere/static
parent953310b7e18bdb012dae2fcc0184bc63f1c30c0c (diff)
downloadChimère-73eb6055d36fd785c468ed0866df43fd4c3fef44.tar.bz2
Chimère-73eb6055d36fd785c468ed0866df43fd4c3fef44.zip
Move POI edition to jquery.chimere plugin - fix marker placement when moving the map (closes #340)
Diffstat (limited to 'chimere/static')
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js150
1 files changed, 115 insertions, 35 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index f75fa78..ea035ad 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -67,7 +67,13 @@ See the file COPYING for details.
current_feature: null, // To store the active POI
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(ICON_OFFSET_X, ICON_OFFSET_Y)
+ icon_offset: new OpenLayers.Pixel(0, 0),
+ edition: false, // edition mode
+ edition_type_is_route: false, // route or POI edition
+ default_icon: new OpenLayers.Icon(
+ 'http://www.openlayers.org/dev/img/marker-green.png',
+ new OpenLayers.Size(21, 25),
+ new OpenLayers.Pixel(-(21/2), -25))
};
var settings = {};
/*
@@ -93,38 +99,42 @@ See the file COPYING for details.
settings.restricted_extent.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
map_options['restrictedExtent'] = settings.restricted_extent;
}
-
+
/* Create map object */
settings.map = map = new OpenLayers.Map(map_element, map_options);
-
+
/* Manage permalink */
- if (settings.permalink == null) {
- var permalink_options = {};
- if (settings.permalink_element) permalink_options["div"] = settings.permalink_element; // hard to understand from OL documentation...
- settings.permalink = new OpenLayers.Control.Permalink(permalink_options);
- }
- /* HACK new permalink createParams method
- FIXME when facilities are given to personalize the permalink */
- var oldCreateParams = settings.permalink.createParams
- var _createParams = function(center, zoom, layers) {
- // Call normal method
- var params = oldCreateParams(center, zoom, layers);
- // Make specific params
- params.checked_categories = settings.checked_categories;
- params.display_submited = settings.display_submited;
- if(settings.current_feature){
- params.current_feature = settings.current_feature.pk;
+ if (!settings.edition){
+ if (settings.permalink == null && !settings.edition) {
+ var permalink_options = {};
+ if (settings.permalink_element){
+ // hard to understand from OL documentation...
+ permalink_options["div"] = settings.permalink_element;
+ }
+ settings.permalink = new OpenLayers.Control.Permalink(permalink_options);
+ }
+ /* HACK new permalink createParams method
+ FIXME when facilities are given to personalize the permalink */
+ var oldCreateParams = settings.permalink.createParams
+ var _createParams = function(center, zoom, layers) {
+ // Call normal method
+ var params = oldCreateParams(center, zoom, layers);
+ // Make specific params
+ params.checked_categories = settings.checked_categories;
+ params.display_submited = settings.display_submited;
+ if(settings.current_feature){
+ params.current_feature = settings.current_feature.pk;
+ }
+ return params;
+ }
+ // Force new createParams method
+ 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){
+ settings.permalink.div.childNodes[0].textContent = settings.permalink_label;
}
- return params;
- }
- // Force new createParams method
- 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){
- settings.permalink.div.childNodes[0].textContent = settings.permalink_label;
}
-
/* Add Layers */
settings.map.addLayers(settings.map_layers);
if (settings.map_layers.length > 1) settings.map.addControl(new OpenLayers.Control.LayerSwitcher());
@@ -147,19 +157,25 @@ See the file COPYING for details.
}
/* if we have some zoom and lon/lat from the init options */
if (settings.zoom && settings.lon && settings.lat) {
- var centerLonLat = new OpenLayers.LonLat(settings.lon, settings.lat);
+ var centerLonLat = new OpenLayers.LonLat(settings.lon,
+ settings.lat);
centerLonLat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
settings.map.setCenter(centerLonLat, settings.zoom);
}
/* if not zoom to the extent in cookies */
- else if (!zoomToCurrentExtent(settings.map)){
+ else if (!methods.zoomToCurrentExtent(settings.map)){
/* if no extent in cookies zoom to default */
settings.map.setCenter(CENTER_LONLAT, DEFAULT_ZOOM);
}
- methods.loadCategories();
- methods.loadGeoObjects();
- // Hide popUp when clicking on map
- settings.map.events.register('click', settings.map, helpers.hidePopup);
+ if (!settings.edition){
+ methods.loadCategories();
+ methods.loadGeoObjects();
+ // Hide popUp when clicking on map
+ settings.map.events.register('click', settings.map,
+ helpers.hidePopup);
+ } else {
+ map.events.register('click', settings.map, methods.setMarker);
+ }
}, // end of init
/*
@@ -445,6 +461,54 @@ See the file COPYING for details.
$("#maincategory_img_" + id).attr("src", STATIC_URL + "chimere/img/minus.png");
settings.current_category = id;
}
+ },
+ zoomToCurrentExtent: function(){
+ /* zoom to current extent */
+ var current_extent = helpers.getSavedExtent();
+ var extent;
+ if (OpenLayers && current_extent && current_extent.length == 4){
+ extent = new OpenLayers.Bounds(
+ current_extent[0], current_extent[1],
+ current_extent[2], current_extent[3]);
+ }
+ /*
+ else if (OpenLayers && default_area && default_area.length == 4){
+ extent = new OpenLayers.Bounds(default_area[0], default_area[1],
+ default_area[2], default_area[3]);
+ }*/
+ else{
+ return;
+ }
+ extent.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
+ settings.map.zoomToExtent(extent, true);
+ return true;
+ },
+ // 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);
+ },
+ /* put the marker on the map and update latitude and longitude fields */
+ putEditMarker: function (lonlat, zoom){
+ if (settings.current_feature) {
+ settings.layerMarkers.removeMarker(settings.current_feature);
+ }
+ settings.current_feature = new OpenLayers.Marker(lonlat.clone(),
+ settings.default_icon);
+ settings.layerMarkers.addMarker(settings.current_feature);
+ lonlat = lonlat.clone().transform(settings.map.getProjectionObject(),
+ EPSG_DISPLAY_PROJECTION);
+ $('#id_point').val('POINT(' + lonlat.lon + ' ' + lonlat.lat + ')');
+ $('#live_latitude').val(lonlat.lat);
+ $('#live_longitude').val(lonlat.lon);
+ /* zoom to the point */
+ if (zoom){
+ var bounds = settings.layerMarkers.getDataExtent();
+ if (bounds) settings.map.zoomToExtent(bounds);
+ }
+ return;
}
}; // End of public methods
var helpers = {
@@ -542,9 +606,25 @@ See the file COPYING for details.
if (settings.dynamic_categories) {
methods.loadCategories();
}
+ },
+ getSavedExtent: function() {
+ /* get the current extent from a cookie */
+ var cookies = document.cookie.split(';');
+ var map_extent;
+ var extent_key = 'MAP_EXTENT';
+ //if (area_name){ extent_key = extent_key + '_' + area_name; }
+ for (var i=0; i < cookies.length; i++){
+ var items = cookies[i].split('=');
+ key = items[0].split(' ').join('');
+ if (key == extent_key){
+ map_extent = items[1].split('_');
+ }
+ }
+ return map_extent;
}
+
}; // End of helpers
-
+
$.fn.chimere = function (thing) {
// Method calling logic
if ( methods[thing] ) {