/**
* @namespace WPGMZA
* @module MapSettings
* @requires WPGMZA
*/
(function($) {
WPGMZA.MapSettings = function(element)
{
var str = element.getAttribute("data-settings");
var json = JSON.parse(str);
//var id = $(element).attr("data-map-id");
//var json = JSON.parse(window["wpgmza_map_settings_" + id]);
WPGMZA.assertInstanceOf(this, "MapSettings");
for(var key in json)
{
var value = json[key];
if(String(value).match(/^-?\d+$/))
value = parseInt(value);
this[key] = value;
}
}
WPGMZA.MapSettings.prototype.toOLViewOptions = function()
{
var options = {
center: ol.proj.fromLonLat([-119.4179, 36.7783]),
zoom: 4
};
function empty(name)
{
if(typeof self[name] == "object")
return false;
return !self[name] || !self[name].length;
}
// Start location
if(typeof this.start_location == "string")
{
var coords = this.start_location.replace(/^\(|\)$/g, "").split(",");
if(WPGMZA.isLatLngString(this.start_location))
options.center = ol.proj.fromLonLat([
parseFloat(coords[1]),
parseFloat(coords[0])
]);
else
console.warn("Invalid start location");
}
if(this.center)
{
options.center = ol.proj.fromLonLat([
parseFloat(this.center.lng),
parseFloat(this.center.lat)
]);
}
// Start zoom
if(this.zoom)
options.zoom = parseInt(this.zoom);
if(this.start_zoom)
options.zoom = parseInt(this.start_zoom);
// Zoom limits
// TODO: This matches the Google code, so some of these could be potentially put on a parent class
if(!empty("min_zoom"))
options.minZoom = parseInt(this.min_zoom);
if(!empty("max_zoom"))
options.maxZoom = parseInt(this.max_zoom);
return options;
}
WPGMZA.MapSettings.prototype.toGoogleMapsOptions = function()
{
var self = this;
var latLngCoords = (this.start_location && this.start_location.length ? this.start_location.split(",") : [36.7783, -119.4179]);
function empty(name)
{
if(typeof self[name] == "object")
return false;
return !self[name] || !self[name].length;
}
function formatCoord(coord)
{
if($.isNumeric(coord))
return coord;
return parseFloat( String(coord).replace(/[\(\)\s]/, "") );
}
var latLng = new google.maps.LatLng(
formatCoord(latLngCoords[0]),
formatCoord(latLngCoords[1])
);
var zoom = (this.start_zoom ? parseInt(this.start_zoom) : 4);
if(!this.start_zoom && this.zoom)
zoom = parseInt( this.zoom );
var options = {
zoom: zoom,
center: latLng
};
if(!empty("center"))
options.center = new google.maps.LatLng({
lat: parseFloat(this.center.lat),
lng: parseFloat(this.center.lng)
});
if(!empty("min_zoom"))
options.minZoom = parseInt(this.min_zoom);
if(!empty("max_zoom"))
options.maxZoom = parseInt(this.max_zoom);
// These settings are all inverted because the checkbox being set means "disabled"
options.zoomControl = !(this.map_zoom == true);
options.panControl = !(this.map_pan == true);
options.mapTypeControl = !(this.disable_map_type_controls == true);
options.streetViewControl = !(this.map_streetview == true);
options.fullscreenControl = !(this.map_full_screen_control == true);
options.draggable = !(this.map_draggable == true);
options.disableDoubleClickZoom = !(this.map_clickzoom == true);
options.scrollwheel = !(this.map_scroll == true);
if(this.force_greedy_gestures)
options.gestureHandling = "greedy";
switch(parseInt(this.map_type))
{
case 2:
options.mapTypeId = google.maps.MapTypeId.SATELLITE;
break;
case 3:
options.mapTypeId = google.maps.MapTypeId.HYBRID;
break;
case 4:
options.mapTypeId = google.maps.MapTypeId.TERRAIN;
break;
default:
options.mapTypeId = google.maps.MapTypeId.ROADMAP;
break;
}
if(this.theme_data && this.theme_data.length > 0)
{
try{
options.styles = JSON.parse(this.theme_data);
}catch(e) {
alert("Your theme data is not valid JSON and has been ignored");
}
}
return options;
}
})(jQuery);