diff options
| -rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 150 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/head_chimere.html | 7 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/map_params.html | 2 | ||||
| -rw-r--r-- | chimere/templates/chimere/edit.html | 2 | ||||
| -rw-r--r-- | chimere/templates/chimere/main_map.html | 3 | ||||
| -rw-r--r-- | chimere/templatetags/chimere_tags.py | 8 | ||||
| -rw-r--r-- | chimere/widgets.py | 30 |
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" |
