summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js150
-rw-r--r--chimere/templates/chimere/blocks/head_chimere.html7
-rw-r--r--chimere/templates/chimere/blocks/map_params.html2
-rw-r--r--chimere/templates/chimere/edit.html2
-rw-r--r--chimere/templates/chimere/main_map.html3
-rw-r--r--chimere/templatetags/chimere_tags.py8
-rw-r--r--chimere/widgets.py30
7 files changed, 145 insertions, 57 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] ) {
diff --git a/chimere/templates/chimere/blocks/head_chimere.html b/chimere/templates/chimere/blocks/head_chimere.html
index 85168f4..8b92c6c 100644
--- a/chimere/templates/chimere/blocks/head_chimere.html
+++ b/chimere/templates/chimere/blocks/head_chimere.html
@@ -5,19 +5,12 @@
<script type="text/javascript">
/* Global variables */
- /* lower cases are for retrocompatibility */
- var DYNAMIC_CATEGORIES = {{ DYNAMIC_CATEGORIES|lower }};
var STATIC_URL = static_url = "{{ STATIC_URL }}";
var MEDIA_URL = media_path = "{{ MEDIA_URL }}";
var extra_url = "{{ EXTRA_URL }}";
- var ICON_WIDTH = {{ ICON_WIDTH }};
- var ICON_HEIGHT = {{ ICON_HEIGHT }};
- var ICON_OFFSET_X = {{ ICON_OFFSET_X }};
- var ICON_OFFSET_Y = {{ ICON_OFFSET_Y }};
</script>
<script src="{{ STATIC_URL }}chimere/js/utils.js"></script>
<script src="{{ STATIC_URL }}chimere/js/base.js"></script>
-<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js"></script>
<script type="text/javascript">
var DEFAULT_ZOOM = {{ DEFAULT_ZOOM }};
var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:{{ EPSG_DISPLAY_PROJECTION }}');
diff --git a/chimere/templates/chimere/blocks/map_params.html b/chimere/templates/chimere/blocks/map_params.html
index 85e071b..d983a62 100644
--- a/chimere/templates/chimere/blocks/map_params.html
+++ b/chimere/templates/chimere/blocks/map_params.html
@@ -10,6 +10,8 @@
{% if p_zoom %}chimere_init_options["zoom"] = {{ p_zoom }};{% endif %}
{% if p_lat %}chimere_init_options["lat"] = {{ p_lat }};{% endif %}
{% if p_lon %}chimere_init_options["lon"] = {{ p_lon }};{% endif %}
+ chimere_init_options["icon_offset"] = new OpenLayers.Pixel({{icon_offset_x}},
+ {{icon_offset_y}});
chimere_init_options["dynamic_categories"] = {{ dynamic_categories }};
{% if p_display_submited %}chimere_init_options["display_submited"] = {{ p_display_submited }};{% endif %}
chimere_init_options["checked_categories"] = {% if p_checked_categories %}{{p_checked_categories}}{% else %} {{ CHIMERE_DEFAULT_CATEGORIES }}{% endif %};
diff --git a/chimere/templates/chimere/edit.html b/chimere/templates/chimere/edit.html
index 14a7507..e02d690 100644
--- a/chimere/templates/chimere/edit.html
+++ b/chimere/templates/chimere/edit.html
@@ -2,8 +2,8 @@
{% load i18n chimere_tags adminmedia inline_formset%}
{% block extra_head %}
{{ block.super }}
- {{ form.media }}
{% head_chimere %}
+ {{ form.media }}
{% if dated %}
<!--script type="text/javascript" src="{{extra_url}}media/js/core.js"></script-->
<script type="text/javascript" src="{{ STATIC_URL }}chimere/js/utils.js"></script>
diff --git a/chimere/templates/chimere/main_map.html b/chimere/templates/chimere/main_map.html
index 348a9dd..d918679 100644
--- a/chimere/templates/chimere/main_map.html
+++ b/chimere/templates/chimere/main_map.html
@@ -2,9 +2,10 @@
{% load i18n unlocalize_point chimere_tags %}
{% block extra_head %}
{{ block.super }}
+{% head_chimere %}
{% head_jquery %}
{% head_jme %}
-{% head_chimere %}
+<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js"></script>
{% endblock %}
{% block message_edit %}{% endblock %}
{% block sidebar %}
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index 1389532..a3f6f0b 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -80,10 +80,6 @@ def head_chimere(context):
"DEFAULT_CENTER": settings.CHIMERE_DEFAULT_CENTER,
"DEFAULT_ZOOM": settings.CHIMERE_DEFAULT_ZOOM,
"RESTRICTED_EXTENT": settings.CHIMERE_RESTRICTED_EXTENT,
- "ICON_WIDTH": settings.CHIMERE_ICON_WIDTH,
- "ICON_HEIGHT": settings.CHIMERE_ICON_HEIGHT,
- "ICON_OFFSET_X": settings.CHIMERE_ICON_OFFSET_X,
- "ICON_OFFSET_Y": settings.CHIMERE_ICON_OFFSET_Y,
"MAP_LAYER": settings.CHIMERE_MAP_LAYER,
"OSM_CSS_URLS": settings.OSM_CSS_URLS,
"OSM_JS_URLS": settings.OSM_JS_URLS,
@@ -97,6 +93,10 @@ def map_params(context):
context_data = {'p_checked_categories': settings.CHIMERE_DEFAULT_CATEGORIES}
context_data['dynamic_categories'] = 'true' \
if settings.CHIMERE_DYNAMIC_CATEGORIES else 'false'
+ context_data['icon_offset_x'] = settings.CHIMERE_ICON_OFFSET_X
+ context_data['icon_offset_y'] = settings.CHIMERE_ICON_OFFSET_Y
+ context_data['icon_width'] = settings.CHIMERE_ICON_WIDTH
+ context_data['icon_height'] = settings.CHIMERE_ICON_HEIGHT
if 'request' not in context:
return context_data
request = context['request']
diff --git a/chimere/widgets.py b/chimere/widgets.py
index 9877a45..b0ea71d 100644
--- a/chimere/widgets.py
+++ b/chimere/widgets.py
@@ -86,9 +86,8 @@ class PointChooserWidget(forms.TextInput):
"all": settings.OSM_CSS_URLS + \
["%schimere/css/forms.css" % settings.STATIC_URL,]
}
- js = settings.OSM_JS_URLS + \
- ["%schimere/js/edit_map.js" % settings.STATIC_URL,
- "%schimere/js/base.js" % settings.STATIC_URL,]
+ js = settings.OSM_JS_URLS + list(settings.JQUERY_JS_URLS) + \
+ ["%schimere/js/jquery.chimere.js" % settings.STATIC_URL]
def render(self, name, value, attrs=None, area_name=''):
'''
@@ -108,9 +107,21 @@ class PointChooserWidget(forms.TextInput):
value = None
else:
value = None
- tpl = getMapJS(area_name)
- tpl += u'<script src="%schimere/js/edit_map.js"></script>\n' % \
- settings.STATIC_URL
+ js = """
+ var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s');
+ var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:%s');
+ var chimere_init_options = {};
+ chimere_init_options["map_layers"] = [new OpenLayers.Layer.OSM.Mapnik('Mapnik')];
+ chimere_init_options['dynamic_categories'] = false;
+ chimere_init_options['edition'] = true;
+ chimere_init_options["checked_categories"] = [];
+ """ % (settings.CHIMERE_EPSG_DISPLAY_PROJECTION,
+ settings.CHIMERE_EPSG_PROJECTION)
+ #TODO: manage area
+ tpl = u"<script type='text/javascript'><!--\n"\
+ u"%s// !--></script>\n" % js
+ #tpl += u'<script src="%schimere/js/edit_map.js"></script>\n' % \
+ # settings.STATIC_URL
tpl += u"<div id='map_edit'></div>"\
u"<div id='live_lonlat'>"\
u" <p><label for='live_latitude'>%s</label>"\
@@ -124,11 +135,12 @@ class PointChooserWidget(forms.TextInput):
_("Latitude"), value_y, _("Longitude"), value_x, name, name,
val)
tpl += "<script type='text/javascript'><!--\n"
- tpl += "init();\n"
+ tpl += "$('#map_edit').chimere(chimere_init_options);\n"
if value:
tpl += u'var mylonlat = new OpenLayers.LonLat(%f,%f);\n'\
- u'putMarker(mylonlat.transform(epsg_display_projection,\n'\
- u' map.getProjectionObject()).clone(), true);\n' % (
+ u'$("#map_edit").chimere("putEditMarker", \n'\
+ u' mylonlat.transform(EPSG_DISPLAY_PROJECTION, \n'\
+ u' EPSG_PROJECTION), true);\n' % (
value_x, value_y)
tpl += "// --></script>\n"\
u"<hr class='spacer'/>\n"