Projet

Général

Profil

0001-maps-move-geojson-layer-code-to-its-own-method-17082.patch

Frédéric Péters, 21 juin 2017 20:44

Télécharger (4,58 ko)

Voir les différences:

Subject: [PATCH] maps: move geojson layer code to its own method (#17082)

 combo/apps/maps/static/js/combo.map.js | 69 ++++++++++++++++++++++------------
 1 file changed, 44 insertions(+), 25 deletions(-)
combo/apps/maps/static/js/combo.map.js
1 1
$(function() {
2
    L.Map.include(
3
      {
4
        add_geojson_layer: function(callback) {
5
          var map = this;
6
          var $map_widget = $(map.getContainer());
7
          var cell = $map_widget.parents('div.cell')[0];
8
          var geojson_url = $map_widget.data('geojson-url');
9
          if (!geojson_url) return;
10

  
11
          $.getJSON(geojson_url, function(data) {
12
              var geo_json = L.geoJson(data, {
13
                  onEachFeature: function(feature, layer) {
14
                      $(cell).trigger('combo:map-feature-prepare', {'feature': feature, 'layer': layer});
15
                  },
16
                  pointToLayer: function (feature, latlng) {
17
                      var markerStyles = "background-color: " + feature.properties.layer.colour + ";";
18
                      marker = L.divIcon({iconAnchor: [0, 30],
19
                                          popupAnchor: [5, -45],
20
                                          html: '<span style="' + markerStyles + '"><i class="leaflet-marker-icon ' +
21
                                              feature.properties.layer.icon + '" style="color:' +
22
                                              feature.properties.layer.icon_colour +'"></i></span>'
23
                                         });
24
                      return L.marker(latlng, {icon: marker});
25
                  }
26
              });
27
              var bounds = geo_json.getBounds();
28
              if (map.geo_json) map.geo_json.remove();
29
              map.geo_json = geo_json;
30
              geo_json.addTo(map);
31
              if (callback) {
32
                  callback(geo_json);
33
              }
34
          });
35
        }
36
      });
37

  
2 38
    function render_map(cell) {
3 39
        var $map_widget = $(cell).find('div.combo-cell-map');
4 40
        var map_options = Object();
......
24 60
        var map = L.map($map_widget[0], map_options);
25 61
        var store_position_selector = $map_widget.data('store-position');
26 62

  
63
        $map_widget[0].leaflet_map = map;
27 64
        map.setView(latlng, map_options.zoom);
28 65

  
29 66
        if (init_state == 'device-location') {
......
38 75
                attribution: map_attribution,
39 76
                maxZoom: map_options.maxZoom
40 77
            }).addTo(map);
41
        if (geojson_url) {
42
            $.getJSON(geojson_url, function(data) {
43
                var geo_json = L.geoJson(data, {
44
                    onEachFeature: function(feature, layer) {
45
                        $(cell).trigger('combo:map-feature-prepare', {'feature': feature, 'layer': layer});
46
                    },
47
                    pointToLayer: function (feature, latlng) {
48
                        var markerStyles = "background-color: " + feature.properties.layer.colour + ";";
49
                        marker = L.divIcon({iconAnchor: [0, 30],
50
                                            popupAnchor: [5, -45],
51
                                            html: '<span style="' + markerStyles + '"><i class="leaflet-marker-icon ' +
52
                                                feature.properties.layer.icon + '" style="color:' +
53
                                                feature.properties.layer.icon_colour +'"></i></span>'
54
                                           });
55
                        return L.marker(latlng, {icon: marker});
56
                    }
57
                });
58
                var bounds = geo_json.getBounds();
59
                if (bounds.isValid()) {
60
                    if (init_state == 'fit-markers') {
61
                        map.fitBounds(bounds);
62
                    }
63
                    geo_json.addTo(map);
78
        map.add_geojson_layer(function(geo_json) {
79
            var bounds = geo_json.getBounds();
80
            if (bounds.isValid()) {
81
                if (init_state == 'fit-markers') {
82
                    map.fitBounds(bounds);
64 83
                }
65
            });
66
        }
84
            }
85
        });
67 86
    };
68 87
    $('div.cell.map').each(function() {
69 88
        render_map(this);
70
-