| Current File : /home/eticmes/www/wp-content/themes/goya/assets/js/dev/goya-google-maps.js |
/* Google Maps */
function initGmap($mapContainer) {
var mapC = $mapContainer,
singleLocation = mapC.parent().find('.et_location'),
mapZoom = mapC.data('map-zoom'),
mapStyle = mapC.data('map-style'),
customMapStyle = mapC.data('custom-map-style'),
mapType = mapC.data('map-type'),
panControl = mapC.data('pan-control'),
zoomControl = mapC.data('zoom-control'),
mapTypeControl = mapC.data('maptype-control'),
scaleControl = mapC.data('scale-control'),
streetViewControl = mapC.data('streetview-control'),
locations = mapC.find('.et-location-data'),
isReady,
// Custom map styles from snazzymaps.com
customStyles = {
// ../style/84535/paper-v2
'paper': [{"featureType":"administrative","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"landscape","elementType":"all","stylers":[{"visibility":"simplified"},{"hue":"#0066ff"},{"saturation":74},{"lightness":100}]},{"featureType":"poi","elementType":"all","stylers":[{"visibility":"simplified"}]},{"featureType":"poi.business","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"all","stylers":[{"visibility":"simplified"}]},{"featureType":"road.highway","elementType":"all","stylers":[{"visibility":"off"},{"weight":0.6},{"saturation":-85},{"lightness":61}]},{"featureType":"road.highway","elementType":"geometry","stylers":[{"visibility":"on"}]},{"featureType":"road.arterial","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"road.local","elementType":"all","stylers":[{"visibility":"on"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#eaeaea"}]},{"featureType":"transit","elementType":"all","stylers":[{"visibility":"simplified"}]},{"featureType":"water","elementType":"all","stylers":[{"visibility":"simplified"},{"color":"#5f94ff"},{"lightness":26},{"gamma":5.86}]}],
// ../style/29/light-monochrome
'light': [{"featureType":"administrative.locality","elementType":"all","stylers":[{"hue":"#2c2e33"},{"saturation":7},{"lightness":19},{"visibility":"on"}]},{"featureType":"landscape","elementType":"all","stylers":[{"hue":"#ffffff"},{"saturation":-100},{"lightness":100},{"visibility":"simplified"}]},{"featureType":"poi","elementType":"all","stylers":[{"hue":"#ffffff"},{"saturation":-100},{"lightness":100},{"visibility":"off"}]},{"featureType":"road","elementType":"geometry","stylers":[{"hue":"#bbc0c4"},{"saturation":-93},{"lightness":31},{"visibility":"simplified"}]},{"featureType":"road","elementType":"labels","stylers":[{"hue":"#bbc0c4"},{"saturation":-93},{"lightness":31},{"visibility":"on"}]},{"featureType":"road.arterial","elementType":"labels","stylers":[{"hue":"#bbc0c4"},{"saturation":-93},{"lightness":-2},{"visibility":"simplified"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"hue":"#e9ebed"},{"saturation":-90},{"lightness":-8},{"visibility":"simplified"}]},{"featureType":"transit","elementType":"all","stylers":[{"hue":"#e9ebed"},{"saturation":10},{"lightness":69},{"visibility":"on"}]},{"featureType":"water","elementType":"all","stylers":[{"hue":"#e9ebed"},{"saturation":-78},{"lightness":67},{"visibility":"simplified"}]}],
// ../style/56984/grey-and-black
'dark': [{"featureType":"all","elementType":"labels","stylers":[{"visibility":"on"}]},{"featureType":"all","elementType":"labels.text.fill","stylers":[{"saturation":36},{"color":"#000000"},{"lightness":40}]},{"featureType":"all","elementType":"labels.text.stroke","stylers":[{"visibility":"on"},{"color":"#000000"},{"lightness":16}]},{"featureType":"all","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"administrative","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"administrative","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":17},{"weight":1.2}]},{"featureType":"administrative.country","elementType":"labels.text.fill","stylers":[{"color":"#838383"}]},{"featureType":"administrative.locality","elementType":"labels.text.fill","stylers":[{"color":"#c4c4c4"}]},{"featureType":"administrative.neighborhood","elementType":"labels.text.fill","stylers":[{"color":"#aaaaaa"}]},{"featureType":"landscape","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":21},{"visibility":"on"}]},{"featureType":"poi.business","elementType":"geometry","stylers":[{"visibility":"on"}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#6e6e6e"},{"lightness":"0"}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"visibility":"off"}]},{"featureType":"road.highway","elementType":"labels.text.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":18}]},{"featureType":"road.arterial","elementType":"geometry.fill","stylers":[{"color":"#575757"}]},{"featureType":"road.arterial","elementType":"labels.text.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"road.arterial","elementType":"labels.text.stroke","stylers":[{"color":"#2c2c2c"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":16}]},{"featureType":"road.local","elementType":"labels.text.fill","stylers":[{"color":"#999999"}]},{"featureType":"transit","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":19}]},{"featureType":"water","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":17}]}],
// ../style/132/light-gray
'grayscale': [{"featureType":"water","elementType":"geometry.fill","stylers":[{"color":"#d3d3d3"}]},{"featureType":"transit","stylers":[{"color":"#808080"},{"visibility":"off"}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"visibility":"on"},{"color":"#b3b3b3"}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"road.local","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#ffffff"},{"weight":1.8}]},{"featureType":"road.local","elementType":"geometry.stroke","stylers":[{"color":"#d7d7d7"}]},{"featureType":"poi","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#ebebeb"}]},{"featureType":"administrative","elementType":"geometry","stylers":[{"color":"#a7a7a7"}]},{"featureType":"road.arterial","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"road.arterial","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"landscape","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#efefef"}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#696969"}]},{"featureType":"administrative","elementType":"labels.text.fill","stylers":[{"visibility":"on"},{"color":"#737373"}]},{"featureType":"poi","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"poi","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"road.arterial","elementType":"geometry.stroke","stylers":[{"color":"#d6d6d6"}]},{"featureType":"road","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{},{"featureType":"poi","elementType":"geometry.fill","stylers":[{"color":"#dadada"}]}],
// ../style/56393/minimal-grey
'countries': [{"featureType":"all","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType": "water","elementType": "all","stylers":[{"visibility":"on"},{"lightness":-100},{"color":"#454545"}]}]
};
// Load custom map style
if (customMapStyle.length > 0) {
mapStyle = customMapStyle;
} else {
mapStyle = customStyles[mapStyle];
}
var bounds = new google.maps.LatLngBounds();
// Prepare gmap options
var mapOptions = {
center: {
lat: -34.397,
lng: 150.644
},
styles: mapStyle,
zoom: mapZoom,
//draggable: !("ontouchend" in document),
scrollwheel: false,
panControl: panControl,
zoomControl: zoomControl,
mapTypeControl: mapTypeControl,
scaleControl: scaleControl,
streetViewControl: streetViewControl,
fullscreenControl: false,
mapTypeId: mapType
};
// Generate Map
var map = new google.maps.Map(mapC[0], mapOptions);
// Add Marker
function mapAddMarker(i, location) {
var options = location.data('option'),
lat = options.latitude,
long = options.longitude,
latlng = new google.maps.LatLng(lat, long),
marker = options.marker_image,
marker_size = options.marker_size,
retina = options.retina_marker,
title = options.marker_title,
desc = options.marker_description,
loadPinImage = new Image();
bounds.extend(latlng);
loadPinImage.src = marker;
location.data('rendered', true);
jQuery(loadPinImage).on('load', function(){
setMapMarkers(i, map, latlng, marker, marker_size, title, desc, retina);
});
}
singleLocation.each(function(i) {
var _this = jQuery(this),
i = _this.parents('.et_location_outer').index(),
location = locations.eq(i);
mapAddMarker(i, location);
});
function setMapMarkers(i, map, latlng, marker, marker_size, title, desc, retina) {
// Information Box
var contentString = '' +
'<div class="poi-info-window gm-style">' +
'<div class="title">' + title + '</div>' +
'<div class="address">' + desc + '</div>' +
'</div>',
infowindow = new google.maps.InfoWindow({
content: contentString
});
// Marker size
if ( retina ) {
marker_size[0] = marker_size[0]/2;
marker_size[1] = marker_size[1]/2;
}
function CustomMarker(latlng, map) {
this.latlng = latlng;
this.setMap(map);
}
CustomMarker.prototype = new google.maps.OverlayView();
// Draw marker on map
CustomMarker.prototype.draw = function() {
var self = this;
var div = this.div_;
if (!div) {
div = this.div_ = jQuery('<div class="pin-wrap"><img src="'+marker+'" width="'+marker_size[0]+'" height="'+marker_size[1]+'"/></div>');
this.div_[0].style.position = 'absolute';
this.div_[0].style.cursor = 'pointer';
var panes = this.getPanes();
panes.overlayImage.appendChild(this.div_[0]);
google.maps.event.addDomListener(div[0], "click", function(event) {
infowindow.setPosition(latlng);
infowindow.open(map);
});
}
// Position marker
var point = this.getProjection().fromLatLngToDivPixel(latlng);
if (point) {
this.div_[0].style.left = Math.round(point.x - (marker_size[0]/2) ) + 'px';
this.div_[0].style.top = (point.y - marker_size[1]) + 'px';
this.div_[0].style.width = marker_size[0] + 'px';
this.div_[0].style.height = marker_size[1] + 'px';
}
};
CustomMarker.prototype.remove = function() {
if (this.div_) {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
}
};
CustomMarker.prototype.getPosition = function() {
return this.latlng;
};
var g_marker = new CustomMarker(latlng, map);
}
// On map tiles loaded
google.maps.event.addListenerOnce(map,'tilesloaded', function() {
// Get location info on click
singleLocation.on('click', function() {
var _this = jQuery(this),
i = _this.parents('.et_location_outer').index(),
location = locations.eq(i),
options = location.data('option'),
lat = options.latitude,
long = options.longitude,
latlng = new google.maps.LatLng(lat, long);
if (!location.data('rendered')) {
isReady = true;
mapAddMarker(i, location);
}
singleLocation.removeClass('active');
_this.addClass('active');
map.panTo(latlng);
});
setTimeout(function() {
var loclist = singleLocation.eq(0).parents('.et_location_list');
if (loclist.hasClass('autoselect_first')) {
singleLocation.eq(0).trigger('click');
}
}, 100);
// Reposition map
if( mapZoom > 0 ) {
map.setCenter(bounds.getCenter());
map.setZoom(mapZoom);
} else {
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
}
});
jQuery(window).on('resize', _.debounce(function(){
map.setCenter(bounds.getCenter());
}, 50) );
};
// Init map
jQuery(document).ready(function($) {
$('.et_map_parent:not(.disabled)').each(function() { initGmap($(this)); });
});