gmaps4rails 0.7.3 → 0.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/public/javascripts/gmaps4rails.js +36 -21
  2. metadata +3 -3
@@ -33,8 +33,7 @@ var Gmaps4Rails = {
33
33
  },
34
34
 
35
35
  //Stored variables
36
- marker_objects: [], //contains markers LatLng
37
- markers : [], //contains raw markers
36
+ markers : [], //contains all markers, each marker contain a google Marker object in google_object
38
37
  bounds: null, //contains current bounds
39
38
  polygons: null, //contains raw data, array of arrays (first element cold be a hash containing options)
40
39
  polygon_objects: [], //contains processed google.maps.Polygon
@@ -310,36 +309,47 @@ var Gmaps4Rails = {
310
309
 
311
310
  // clear markers
312
311
  clear_markers: function(){
313
- for (var i = 0; i < this.marker_objects.length; ++i) {
314
- this.marker_objects[i].setMap(null);
315
- }
316
- this.marker_objects = new Array;
312
+ if (this.markerClusterer != null){
313
+ this.markerClusterer.clearMarkers();
314
+ }
315
+ for (var i = 0; i < this.markers.length; ++i) {
316
+ this.markers[i].google_object.setMap(null);
317
+ }
317
318
  },
318
319
 
319
320
  // replace old markers with new markers on an existing map
320
321
  replace_markers: function(new_markers){
321
- this.clear_markers();
322
- this.markers = [];
323
- //variable used for Auto-adjust
324
- this.bounds = new google.maps.LatLngBounds();
322
+ //reset previous markers
323
+ this.markers = new Array;
324
+ //reset Auto-adjust
325
+ this.bounds = new google.maps.LatLngBounds();
326
+ //reset sidebar content if exists
327
+ if (this.markers_conf.list_container != null ){
328
+ var ul = document.getElementById(this.markers_conf.list_container);
329
+ ul.innerHTML = "";
330
+ }
331
+ //add new markers
325
332
  this.add_markers(new_markers);
326
333
  },
327
334
 
328
335
  //add new markers to on an existing map (beware, it doesn't check duplicates)
329
336
  add_markers: function(new_markers){
337
+ //clear the whole map
338
+ this.clear_markers();
339
+ //update the list of markers to take into account
330
340
  this.markers = this.markers.concat(new_markers);
341
+ //put markers on the map
331
342
  this.setup_Markers();
343
+ //adjust map
332
344
  this.adjust();
333
345
  },
334
346
 
335
347
  //Creates Marker from the markers passed + markerClusterer
336
348
  setup_Markers: function () {
337
- //resets Clusterer if needed
338
- if (this.markerClusterer) {
339
- this.markerClusterer.clearMarkers();
340
- }
341
349
  // Add markers to the map
342
350
  for (var i = 0; i < this.markers.length; ++i) {
351
+ //check if the marker has not already been created
352
+ if (!this.exists(this.markers[i].google_object)) {
343
353
  //test if value passed or use default
344
354
  var marker_picture = this.exists(this.markers[i].picture) ? this.markers[i].picture : this.markers_conf.picture;
345
355
  var marker_width = this.exists(this.markers[i].width) ? this.markers[i].width : this.markers_conf.width;
@@ -367,12 +377,11 @@ var Gmaps4Rails = {
367
377
  var image = new google.maps.MarkerImage(marker_picture, new google.maps.Size(marker_width, marker_height) );
368
378
  var ThisMarker = new google.maps.Marker({position: myLatLng, map: this.map, icon: image, title: marker_title});
369
379
  }
370
- //save object for later use, basically, to get back the text to display when clicking it
371
- this.markers[i].marker_object = ThisMarker;
380
+ //save object
381
+ this.markers[i].google_object = ThisMarker;
372
382
  //add infowindowstuff + list creation if enabled
373
383
  this.handle_info_window(this.markers[i]);
374
- //save the marker in a list
375
- this.marker_objects.push(ThisMarker);
384
+ }
376
385
  }
377
386
  this.setup_Clusterer();
378
387
  },
@@ -381,7 +390,7 @@ var Gmaps4Rails = {
381
390
  //create the infowindow
382
391
  var info_window = new google.maps.InfoWindow({content: marker_container.description });
383
392
  //add the listener associated
384
- google.maps.event.addListener(marker_container.marker_object, 'click', this.openInfoWindow(info_window, marker_container.marker_object));
393
+ google.maps.event.addListener(marker_container.google_object, 'click', this.openInfoWindow(info_window, marker_container.google_object));
385
394
  if (this.markers_conf.list_container)
386
395
  {
387
396
  var ul = document.getElementById(this.markers_conf.list_container);
@@ -390,7 +399,7 @@ var Gmaps4Rails = {
390
399
  aSel.href = 'javascript:void(0);';
391
400
  var html = this.exists(marker_container.sidebar) ? marker_container.sidebar : "Marker";
392
401
  aSel.innerHTML = html;
393
- aSel.onclick = this.generateTriggerCallback(marker_container.marker_object, 'click');
402
+ aSel.onclick = this.generateTriggerCallback(marker_container.google_object, 'click');
394
403
  li.appendChild(aSel);
395
404
  ul.appendChild(li);
396
405
  }
@@ -419,7 +428,13 @@ var Gmaps4Rails = {
419
428
  {
420
429
  if (this.markers_conf.do_clustering == true)
421
430
  {
422
- this.markerClusterer = new MarkerClusterer(this.map, this.marker_objects, { maxZoom: this.markers_conf.clusterer_maxZoom,
431
+ var gmarkers_array = new Array;
432
+ for (var i = 0; i < this.markers.length; ++i) {
433
+ gmarkers_array.push(this.markers[i].google_object);
434
+ }
435
+
436
+
437
+ this.markerClusterer = new MarkerClusterer(this.map, gmarkers_array, { maxZoom: this.markers_conf.clusterer_maxZoom,
423
438
  gridSize: this.markers_conf.clusterer_gridSize,
424
439
  //styles: styles TODO: offer clusterer customization
425
440
  });
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gmaps4rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 3
10
- version: 0.7.3
9
+ - 4
10
+ version: 0.7.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Benjamin Roth