/* * 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 = '
' + $loc.html() + '
'; } } }); } 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);