Opal-Estate-Pro/inc/vendors/cmb2-plugins/custom-fields/map/js/script.js
2019-09-26 13:28:57 +07:00

110 lines
2.9 KiB
JavaScript
Executable File

(function( $ ) {
'use strict';
var maps = [];
$( '.cmb-type-opal-map' ).each( function() {
initializeMap( $( this ) );
});
function initializeMap( mapInstance ) {
var searchInput = mapInstance.find( '.opal-map-search' );
var mapCanvas = mapInstance.find( '.opal-map' );
var latitude = mapInstance.find( '.opal-map-latitude' );
var longitude = mapInstance.find( '.opal-map-longitude' );
var latLng = new google.maps.LatLng( 54.800685, -4.130859 );
var zoom = 5;
// If we have saved values, let's set the position and zoom level
if ( latitude.val().length > 0 && longitude.val().length > 0 ) {
latLng = new google.maps.LatLng( latitude.val(), longitude.val() );
zoom = 17;
}
// Map
var mapOptions = {
center: latLng,
zoom: zoom
};
var map = new google.maps.Map( mapCanvas[0], mapOptions );
latitude.on('change', function() {
map.setCenter( new google.maps.LatLng( latitude.val(), longitude.val() ) );
});
longitude.on('change', function() {
map.setCenter( new google.maps.LatLng( latitude.val(), longitude.val() ) );
});
// Marker
var markerOptions = {
map: map,
draggable: true,
title: 'Drag to set the exact location'
};
var marker = new google.maps.Marker( markerOptions );
//if ( latitude.val().length > 0 && longitude.val().length > 0 ) {
marker.setPosition( latLng );
// }
// Search
var autocomplete = new google.maps.places.Autocomplete( searchInput[0] );
autocomplete.bindTo( 'bounds', map );
google.maps.event.addListener( autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
if ( ! place.geometry ) {
return;
}
if ( place.geometry.viewport ) {
map.fitBounds( place.geometry.viewport );
} else {
map.setCenter( place.geometry.location );
map.setZoom( 17 );
}
marker.setPosition( place.geometry.location );
latitude.val( place.geometry.location.lat() );
longitude.val( place.geometry.location.lng() );
});
$( searchInput ).keypress( function( event ) {
if ( 13 === event.keyCode ) {
event.preventDefault();
}
});
// Allow marker to be repositioned
google.maps.event.addListener( marker, 'drag', function() {
latitude.val( marker.getPosition().lat() );
longitude.val( marker.getPosition().lng() );
});
maps.push( map );
}
// Resize map when meta box is opened
if ( typeof postboxes !== 'undefined' ) {
postboxes.pbshow = function () {
var arrayLength = maps.length;
for (var i = 0; i < arrayLength; i++) {
var mapCenter = maps[i].getCenter();
google.maps.event.trigger( maps[i], 'resize' );
maps[i].setCenter( mapCenter );
}
};
}
// When a new row is added, reinitialize Google Maps
$( '.cmb-repeatable-group' ).on( 'cmb2_add_row', function( event, newRow ) {
var groupWrap = $( newRow ).closest( '.cmb-repeatable-group' );
groupWrap.find( '.cmb-type-opal-map' ).each( function() {
initializeMap( $( this ) );
});
});
})( jQuery );