blob: c5c86bb0c0604bc3eba25aa52d576e093a114d71 [file] [log] [blame]
/*
* RD-Google Map - v0.1
* Easy as hell Google Map Api Jquery plugin.
*
* Made by Evgeniy Gusarov (Stmechanus || Diversant)
*
* Under MIT License
*/
;
(function ($) {
'use strict'
var def_settings = {
cntClass: 'map',
mapClass: 'map_model',
locationsClass: 'map_locations',
marker: {
basic: 'images/gmap_marker.png',
active: 'images/gmap_marker_active.png'
},
styles: []
},
defaults = {
map: {
x: -73.9924068,
y: 40.646197,
zoom: 14
},
locations: []
};
var getLocations = function ($map, settings) {
var $locations = $map.parent().find('.' + settings.locationsClass).find('li');
var locations = [];
if ($locations.length > 0) {
$locations.each(function (i) {
var $loc = $(this);
if ($loc.data('x') && $loc.data('y')) {
locations[i] = {
x: $loc.data('x'),
y: $loc.data('y'),
basic: $loc.data('basic') ? $loc.data('basic') : settings.marker.basic,
active: $loc.data('active') ? $loc.data('active') : settings.marker.active
}
if (!$.trim($loc.html())) {
locations[i].content = false;
} else {
locations[i].content = '<div class="iw-content">' + $loc.html() + '</div>';
}
}
});
}
return locations;
}
$.fn.googleMap = function (settings) {
settings = $.extend(true, {}, def_settings, settings);
$(this).each(function () {
var $this = $(this);
var options = $.extend(
true, {}, defaults,
{
map: {
x: $this.data('x'),
y: $this.data('y'),
zoom: $this.data('zoom')
},
locations: getLocations($this, settings)
}
);
var map = new google.maps.Map(this, {
center: new google.maps.LatLng(
parseFloat(options.map.y),
parseFloat(options.map.x)
),
scrollwheel: false,
styles: settings.styles,
zoom: options.map.zoom
}),
infowindow = new google.maps.InfoWindow(),
markers = [];
for (var i in options.locations) {
markers[i] = new google.maps.Marker(
{
position: new google.maps.LatLng(
parseFloat(options.locations[i].y),
parseFloat(options.locations[i].x)),
map: map,
icon: options.locations[i].basic,
index: i
}
);
if (options.locations[i].content) {
google.maps.event.addListener(markers[i], 'click', function () {
for (var j in markers) {
markers[j].setIcon(options.locations[j].basic);
}
infowindow.setContent(options.locations[this.index].content);
infowindow.open(map, this);
$('.gm-style-iw').parent().parent().addClass("gm-wrapper");
this.setIcon(options.locations[this.index].active);
});
google.maps.event.addListener(infowindow, 'closeclick', function () {
for (var j in markers) {
markers[j].setIcon(options.locations[j].basic);
}
});
}
}
google.maps.event.addDomListener(window, 'resize', function() {
map.setCenter(new google.maps.LatLng(
parseFloat(options.map.y),
parseFloat(options.map.x)
));
});
});
};
})(jQuery);