//# ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // //# 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].name + '

' + $shopList[key].address + '

' + $shopList[key].phone + '

' }); google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(this.content); infowindow.open(map, this); }); $markers.push(marker); $listItem += '
' + $shopList[key].name + '
' + $shopList[key].address + '
'+ $shopList[key].description +'
'; } } $resultsList.html( $listItem ); } } }); } })(jQuery); //# INIT MAPS $(document).ready(function() { var $dataMapsObject = $('.Maps[data-maps="shops"]'); if ( $dataMapsObject.length > 0 ) { if ( typeof google != 'undefined' && typeof google.maps != 'undefined' ) { $dataMapsObject.shopsMaps(); } else { var getApiKey = $('head').find('meta[name="google-maps-api-key"]').attr('content') || ''; var getSignedIn = $('head').find('meta[name="google-maps-signed-in"]').attr('content') || false; var getScriptUrl = null; if ( getApiKey != '' ) { getScriptUrl = 'https://maps.googleapis.com/maps/api/js?key=' + getApiKey + '&signed_in=' + getSignedIn + '&sensor=false'; } else { getScriptUrl = 'https://maps.googleapis.com/maps/api/js?sensor=false'; } $.getScript(getScriptUrl, function(data, textStatus, jqxhr) { $dataMapsObject.shopsMaps({ signedIn : getSignedIn }); }); } } });