//# ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
//# MAPS
(function($) {
$.fn.shopsMaps = function(config) {
//:
var defaults = {
signedIn : false,
fullscreen : false,
mapType : true,
zoom : true,
streetView : true,
rotate : false,
scale : false
};
//:
var options = $.extend({}, defaults, config);
//:
return this.each(function() {
var $window = $(window);
var $node = $(this);
var $markers = [];
var $select = $('.Stores form select[name="Miasto"]');
var $resultsList = $('.Stores .List');
var startLat = 51.919438;
var startLng = 19.145136;
var startZoom = 5;
var geolocationZoom = 9;
var onchangeZoom = 11;
var setCoordinates = new google.maps.LatLng(startLat, startLng);
var markerIconsPath = 'view/basic/scripts/js/jquery.maps/images';
var markerDefaultIcon = 'marker_default.png';
var markerIconSizeWidth = 30;
var markerIconSizeHeight = 38;
var mapOptions = {
minZoom : 5,
maxZoom : 21,
zoom : startZoom,
center : setCoordinates,
mapTypeIds : [ google.maps.MapTypeId.ROADMAP ],
fullscreenControl : options.fullscreen,
fullscreenControlOptions : { position: ( options.signedIn ) ? google.maps.ControlPosition.LEFT_BOTTOM : google.maps.ControlPosition.RIGHT_TOP },
mapTypeControl : options.mapType,
mapTypeControlOptions : { position: google.maps.ControlPosition.LEFT_TOP, style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
zoomControl : options.zoom,
zoomControlOptions : { position: google.maps.ControlPosition.RIGHT_BOTTOM },
streetViewControl : options.streetView,
streetViewControlOptions : { position: google.maps.ControlPosition.RIGHT_BOTTOM },
rotateControl : options.rotate,
rotateControlOptions : { position: google.maps.ControlPosition.LEFT_BOTTOM },
scaleControl : options.scale,
scaleControlOptions : { position: google.maps.ControlPosition.RIGHT_BOTTOM },
scrollwheel : isTouchDevice() ? false : true,
draggable : true,
disableDoubleClickZoom : true
};
var map = new google.maps.Map( $node.get(0), mapOptions );
var geocoder = new google.maps.Geocoder();
var geolocation = navigator.geolocation;
if ( geolocation ) {
geolocation.getCurrentPosition(function(position) {
var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setZoom(geolocationZoom);
map.setCenter(latlng);
mapSetCurrentPosition(latlng);
});
}
map.addListener('zoom_changed', function(e) {
// consoleLog( 'zoom: ', this.zoom, ' [min: ' + this.minZoom + ', max: ' + this.maxZoom + '] | ', this ); //: Test
});
$select.on('change', function(e) {
var value = $(this).val();
if ( value ) {
mapSetAndCenterPlace(value);
$(document).trigger('sendAjax', { handler: printHtmlAndMarkers, action: 'getShops', params: { Miasto: value } });
}
else {
mapResetToDefaults();
}
});
$window.on('resize', function(e) {
mapResizeAndCenter();
});
function mapClearOverlays() {
for ( var i=0; i<$markers.length; i++ ) {
$markers[i].setMap(null);
}
$markers = [];
}
function mapResetToDefaults() {
map.setZoom(startZoom);
map.setCenter(setCoordinates);
$resultsList.html('');
mapClearOverlays();
}
function mapResizeAndCenter() {
var center = map.getCenter();
google.maps.event.trigger(map, 'resize');
map.setCenter(center);
}
function mapSetAndCenterPlace(_data) {
var address = _data;
geocoder.geocode({'address': address}, function(results, status) {
if ( status == google.maps.GeocoderStatus.OK ) {
map.setZoom(onchangeZoom);
map.setCenter(results[0].geometry.location);
mapClearOverlays();
}
});
}
function mapSetCurrentPosition(_data) {
var latlng = _data;
geocoder.geocode({'latLng': latlng}, function(results, status) {
if ( status == google.maps.GeocoderStatus.OK && results[1] ) {
var indice = 0;
for ( var j=0; j
' + $shopList[key].phone + '
' }); google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(this.content); infowindow.open(map, this); }); $markers.push(marker); $listItem += '