0byt3m1n1
Path:
/
var
/
lib
/
vz
/
www
/
clients
/
client6
/
web11
/
web
/
wp-content
/
plugins
/
wp-google-maps
/
js
/
v8
/
[
Home
]
File: map-settings.js
/** * @namespace WPGMZA * @module MapSettings * @requires WPGMZA */ jQuery(function($) { /** * Handles map settings, parsing them from the data-settings attribute on the maps HTML element. * NB: This will be split into GoogleMapSettings and OLMapSettings in the future. * @class WPGMZA.MapSettings * @constructor WPGMZA.MapSettings */ WPGMZA.MapSettings = function(element) { var self = this; var str = element.getAttribute("data-settings"); var json; try{ json = JSON.parse(str); }catch(e) { str = str.replace(/\\%/g, "%"); str = str.replace(/\\\\"/g, '\\"'); try{ json = JSON.parse(str); }catch(e) { json = {}; console.warn("Failed to parse map settings JSON"); } } WPGMZA.assertInstanceOf(this, "MapSettings"); function addSettings(input) { if(!input) return; for(var key in input) { if(key == "other_settings") continue; // Ignore other_settings var value = input[key]; if(String(value).match(/^-?\d+$/)) value = parseInt(value); self[key] = value; } } addSettings(WPGMZA.settings); addSettings(json); if(json && json.other_settings) addSettings(json.other_settings); } /** * Returns settings on this object converted to OpenLayers view options * @method * @memberof WPGMZA.MapSettings * @return {object} The map settings, in a format understood by OpenLayers */ 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(this.map_min_zoom && this.map_max_zoom) { options.minZoom = Math.min(this.map_min_zoom, this.map_max_zoom); options.maxZoom = Math.max(this.map_min_zoom, this.map_max_zoom); } return options; } /** * Returns settings on this object converted to Google's MapOptions spec. * @method * @memberof WPGMZA.MapSettings * @return {object} The map settings, in the format specified by google.maps.MapOptions */ 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(this.map_min_zoom && this.map_max_zoom) { options.minZoom = Math.min(this.map_min_zoom, this.map_max_zoom); options.maxZoom = Math.max(this.map_min_zoom, this.map_max_zoom); } // These settings are all inverted because the checkbox being set means "disabled" options.zoomControl = !(this.wpgmza_settings_map_zoom == 'yes'); options.panControl = !(this.wpgmza_settings_map_pan == 'yes'); options.mapTypeControl = !(this.wpgmza_settings_map_type == 'yes'); options.streetViewControl = !(this.wpgmza_settings_map_streetview == 'yes'); options.fullscreenControl = !(this.wpgmza_settings_map_full_screen_control == 'yes'); options.draggable = !(this.wpgmza_settings_map_draggable == 'yes'); options.disableDoubleClickZoom = (this.wpgmza_settings_map_clickzoom == 'yes'); options.scrollwheel = !(this.wpgmza_settings_map_scroll == 'yes'); if(this.wpgmza_force_greedy_gestures == "greedy" || this.wpgmza_force_greedy_gestures == "yes") options.gestureHandling = "greedy"; else options.gestureHandling = "cooperative"; switch(parseInt(this.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; } });