diff options
| 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 |
| commit | 73eb6055d36fd785c468ed0866df43fd4c3fef44 (patch) | |
| tree | 0f97884173d6f4a0e2ac55e73fb69fc4cc6e4c41 /chimere/static | |
| parent | 953310b7e18bdb012dae2fcc0184bc63f1c30c0c (diff) | |
| download | Chimè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.js | 150 |
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] ) { |
