X-Git-Url: https://projects.mako.cc/source/selectricity-live/blobdiff_plain/baf9ff0ec39c13f52ee8d4f087641dc5fcc9c53b..fcc68b4dc198b7cb0cf93467d96038b0844675fe:/vendor/plugins/ym4r_gm/javascript/markerGroup.js diff --git a/vendor/plugins/ym4r_gm/javascript/markerGroup.js b/vendor/plugins/ym4r_gm/javascript/markerGroup.js new file mode 100644 index 0000000..02fe624 --- /dev/null +++ b/vendor/plugins/ym4r_gm/javascript/markerGroup.js @@ -0,0 +1,114 @@ +function GMarkerGroup(active, markers, markersById) { + this.active = active; + this.markers = markers || new Array(); + this.markersById = markersById || new Object(); +} + +GMarkerGroup.prototype = new GOverlay(); + +GMarkerGroup.prototype.initialize = function(map) { + this.map = map; + + if(this.active){ + for(var i = 0 , len = this.markers.length; i < len; i++) { + this.map.addOverlay(this.markers[i]); + } + for(var id in this.markersById){ + this.map.addOverlay(this.markersById[id]); + } + } +} + +//If not already done (ie if not inactive) remove all the markers from the map +GMarkerGroup.prototype.remove = function() { + this.deactivate(); +} + +GMarkerGroup.prototype.redraw = function(force){ + //Nothing to do : markers are already taken care of +} + +//Copy the data to a new Marker Group +GMarkerGroup.prototype.copy = function() { + var overlay = new GMarkerGroup(this.active); + overlay.markers = this.markers; //Need to do deep copy + overlay.markersById = this.markersById; //Need to do deep copy + return overlay; +} + +//Inactivate the Marker group and clear the internal content +GMarkerGroup.prototype.clear = function(){ + //deactivate the map first (which removes the markers from the map) + this.deactivate(); + //Clear the internal content + this.markers = new Array(); + this.markersById = new Object(); +} + +//Add a marker to the GMarkerGroup ; Adds it now to the map if the GMarkerGroup is active +GMarkerGroup.prototype.addMarker = function(marker,id){ + if(id == undefined){ + this.markers.push(marker); + }else{ + this.markersById[id] = marker; + } + if(this.active && this.map != undefined ){ + this.map.addOverlay(marker); + } +} + +//Open the info window (or info window tabs) of a marker +GMarkerGroup.prototype.showMarker = function(id){ + var marker = this.markersById[id]; + if(marker != undefined){ + GEvent.trigger(marker,"click"); + } +} + +//Activate (or deactivate depending on the argument) the GMarkerGroup +GMarkerGroup.prototype.activate = function(active){ + active = (active == undefined) ? true : active; + if(!active){ + if(this.active){ + if(this.map != undefined){ + for(var i = 0 , len = this.markers.length; i < len; i++){ + this.map.removeOverlay(this.markers[i]) + } + for(var id in this.markersById){ + this.map.removeOverlay(this.markersById[id]); + } + } + this.active = false; + } + }else{ + if(!this.active){ + if(this.map != undefined){ + for(var i = 0 , len = this.markers.length; i < len; i++){ + this.map.addOverlay(this.markers[i]); + } + for(var id in this.markersById){ + this.map.addOverlay(this.markersById[id]); + } + } + this.active = true; + } + } +} + +GMarkerGroup.prototype.centerAndZoomOnMarkers = function() { + if(this.map != undefined){ + //merge markers and markersById + var tmpMarkers = this.markers.slice(); + for (var id in this.markersById){ + tmpMarkers.push(this.markersById[id]); + } + if(tmpMarkers.length > 0){ + this.map.centerAndZoomOnMarkers(tmpMarkers); + } + } +} + +//Deactivate the Group Overlay (convenience method) +GMarkerGroup.prototype.deactivate = function(){ + this.activate(false); +}