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" | 
