forked from fridek/gmap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.gmap.min.js
9 lines (9 loc) · 8.31 KB
/
jquery.gmap.min.js
1
2
3
4
5
6
7
8
9
/**
* jQuery gMap v3
*
* @url http://www.smashinglabs.pl/gmap
* @author Sebastian Poreba <sebastian.poreba@gmail.com>
* @version 3.1.0
* @date 23.04.2011
*/
(function(a){var b=google.maps,c=new b.Geocoder,d={},e=0,f={init:function(c){d=a.extend({},a.fn.gMap.defaults,c);for(var e in a.fn.gMap.defaults.icon){if(!d.icon[e]){d.icon[e]=a.fn.gMap.defaults.icon[e]}}return this.each(function(){var c=a(this),e=f._getMapCenter.apply(c,[]),g=d.zoom==="auto"?2:d.zoom,h={zoom:g,center:e,mapTypeControl:d.mapTypeControl,zoomControl:d.zoomControl,panControl:d.panControl,scaleControl:d.scaleControl,streetViewControl:d.streetViewControl,mapTypeId:d.maptype,scrollwheel:d.scrollwheel,maxZoom:d.maxZoom,minZoom:d.minZoom};if(d.log){console.log("map center is:")}if(d.log){console.log(e)}var i=new b.Map(this,h);c.data("$gmap",i);c.data("gmap",{opts:d,gmap:i,markers:[],markerKeys:{},infoWindow:null});if(d.controls.length!==0){for(var j=0;j<d.controls.length;j+=1){i.controls[d.controls[j].pos].push(d.controls[j].div)}}if(d.markers!==0){f.addMarkers.apply(c,[d.markers])}if(d.zoom==="auto"){f.autoZoom.apply(c,[])}f._onComplete.apply(c,[])})},_onComplete:function(){var a=this.data("gmap"),b=this;if(e!==0){window.setTimeout(function(){f._onComplete.apply(b,[])},1e3);return}a.opts.onComplete()},_setMapCenter:function(a){if(d.log){console.log("delayed setMapCenter called")}var b=this.data("gmap");if(b.gmap!==undefined){b.gmap.setCenter(a)}else{var c=this;window.setTimeout(function(){f._setMapCenter.apply(c,[a])},500)}return this},setZoom:function(b){var c=this.data("$gmap");if(b==="auto"){f.autoZoom.apply(a(this),[])}else{c.setZoom(parseInt(b))}},_getMapCenter:function(){var e,g=this;if(d.latitude&&d.longitude){e=new b.LatLng(d.latitude,d.longitude);return e}else{e=new b.LatLng(0,0)}if(d.address){c.geocode({address:d.address},function(a,b){if(b===google.maps.GeocoderStatus.OK){f._setMapCenter.apply(g,[a[0].geometry.location])}else{if(d.log){console.log("Geocode was not successful for the following reason: "+b)}}});return e}if(a.isArray(d.markers)&&d.markers.length>0){var h=null;for(var i=0;i<d.markers.length;i+=1){if(d.markers[i].latitude&&d.markers[i].longitude){h=d.markers[i];break}if(d.markers[i].address){h=d.markers[i]}}if(h===null){return e}if(h.latitude&&h.longitude){return new b.LatLng(h.latitude,h.longitude)}if(h.address){c.geocode({address:h.address},function(a,b){if(b===google.maps.GeocoderStatus.OK){f._setMapCenter.apply(g,[a[0].geometry.location])}else{if(d.log){console.log("Geocode was not successful for the following reason: "+b)}}})}}return e},getRoute:function(c){var d=this.data("gmap"),e=d.gmap,f=new b.DirectionsRenderer,g=new b.DirectionsService,h={BYCAR:b.DirectionsTravelMode.DRIVING,BYBICYCLE:b.DirectionsTravelMode.BICYCLING,BYFOOT:b.DirectionsTravelMode.WALKING},i={MILES:b.DirectionsUnitSystem.IMPERIAL,KM:b.DirectionsUnitSystem.METRIC},j=null,k=null;unitSystem=null;if(c.routeDisplay!==undefined){j=c.routeDisplay instanceof jQuery?c.routeDisplay[0]:typeof c.routeDisplay=="string"?a(c.routeDisplay)[0]:null}else if(d.opts.routeDisplay!==null){j=d.opts.routeDisplay instanceof jQuery?d.opts.routeDisplay[0]:typeof d.opts.routeDisplay=="string"?a(d.opts.routeDisplay)[0]:null}f.setMap(e);if(j!==null){f.setPanel(j)}k=h[d.opts.travelMode]!==undefined?h[d.opts.travelMode]:h["BYCAR"];travelUnit=i[d.opts.travelUnit]!==undefined?i[d.opts.travelUnit]:i["KM"];var l={origin:c.from,destination:c.to,travelMode:k,unitSystem:travelUnit};g.route(l,function(c,e){if(e==b.DirectionsStatus.OK){f.setDirections(c)}else if(j!==null){a(j).html(d.opts.routeErrors[e])}});return this},processMarker:function(a,c,e,f){var g=this.data("gmap"),h=g.gmap;if(f===undefined){f=new b.LatLng(a.latitude,a.longitude)}if(!c){var i={image:d.icon.image,iconSize:new b.Size(d.icon.iconsize[0],d.icon.iconsize[1]),iconAnchor:new b.Point(d.icon.iconanchor[0],d.icon.iconanchor[1]),infoWindowAnchor:new b.Size(d.icon.infowindowanchor[0],d.icon.infowindowanchor[1])};c=new b.MarkerImage(i.image,i.iconSize,null,i.iconAnchor)}if(!e){var j={image:d.icon.shadow,iconSize:new b.Size(d.icon.shadowsize[0],d.icon.shadowsize[1]),anchor:i&&i.iconAnchor?i.iconAnchor:new b.Point(d.icon.iconanchor[0],d.icon.iconanchor[1])}}var k=new b.Marker({position:f,icon:c,title:a.title,map:h});k.setShadow(e);g.markers.push(k);if(a.key){g.markerKeys[a.key]=k}var l;if(a.html){var m={content:d.html_prepend+a.html+d.html_append,pixelOffset:a.infoWindowAnchor};if(d.log){console.log("setup popup with data")}if(d.log){console.log(m)}l=new b.InfoWindow(m);b.event.addListener(k,"click",function(){if(d.log){console.log("opening popup "+a.html)}if(d.singleInfoWindow&&g.infoWindow){g.infoWindow.close()}l.open(h,k);g.infoWindow=l})}if(a.html&&a.popup){if(d.log){console.log("opening popup "+a.html)}l.open(h,k)}},_geocodeMarker:function(a,g,h){e+=1;var i=this;c.geocode({address:a.address},function(c,j){e-=1;if(j===b.GeocoderStatus.OK){f.processMarker.apply(i,[a,g,h,c[0].geometry.location])}else{if(d.log){console.log("Geocode was not successful for the following reason: "+j)}}})},autoZoom:function(){var a=this.data("gmap").markers,c=this.data("$gmap"),g=new b.LatLngBounds,h=this;if(e!==0){window.setTimeout(function(){f.autoZoom.apply(h,[])},500);return}if(d.log){console.log("autozooming map")}for(i=0;i<a.length;i+=1){g.extend(a[i].getPosition())}if(i>0){c.fitBounds(g)}return this},addMarkers:function(b){if(b.length!==0){if(d.log){console.log("adding "+b.length+" markers")}for(var c=0;c<b.length;c+=1){f.addMarker.apply(a(this),[b[c]])}}return this},addMarker:function(a){if(d.log){console.log("putting marker at "+a.latitude+", "+a.longitude+" with address "+a.address+" and html "+a.html)}var c={image:d.icon.image,iconSize:new b.Size(d.icon.iconsize[0],d.icon.iconsize[1]),iconAnchor:new b.Point(d.icon.iconanchor[0],d.icon.iconanchor[1]),infoWindowAnchor:new b.Size(d.icon.infowindowanchor[0],d.icon.infowindowanchor[1])},e={image:d.icon.shadow,iconSize:new b.Size(d.icon.shadowsize[0],d.icon.shadowsize[1]),anchor:c.iconAnchor};a.infoWindowAnchor=c.infoWindowAnchor;if(a.icon){if(a.icon.image){c.image=a.icon.image}if(a.icon.iconsize){c.iconSize=new b.Size(a.icon.iconsize[0],a.icon.iconsize[1])}if(a.icon.iconanchor){c.iconAnchor=new b.Point(a.icon.iconanchor[0],a.icon.iconanchor[1])}if(a.icon.infowindowanchor){c.infoWindowAnchor=new b.Size(a.icon.infowindowanchor[0],a.icon.infowindowanchor[1])}if(a.icon.shadow){e.image=a.icon.shadow}if(a.icon.shadowsize){e.iconSize=new b.Size(a.icon.shadowsize[0],a.icon.shadowsize[1])}}var g=new b.MarkerImage(c.image,c.iconSize,null,c.iconAnchor);var h=new b.MarkerImage(e.image,e.iconSize,null,e.anchor);if(a.address){if(a.html==="_address"){a.html=a.address}if(a.title=="_address"){a.title=a.address}if(d.log){console.log("geocoding marker: "+a.address)}f._geocodeMarker.apply(this,[a,g,h])}else{if(a.html==="_latlng"){a.html=a.latitude+", "+a.longitude}if(a.title=="_latlng"){a.title=a.latitude+", "+a.longitude}var i=new b.LatLng(a.latitude,a.longitude);f.processMarker.apply(this,[a,g,h,i])}return this},removeAllMarkers:function(){var a=this.data("gmap").markers,b;for(b=0;b<a.length;b+=1){a[b].setMap(null)}a=[]},getMarker:function(a){return this.data("gmap").markerKeys[a]}};a.fn.gMap=function(b){if(f[b]){return f[b].apply(this,Array.prototype.slice.call(arguments,1))}else if(typeof b==="object"||!b){return f.init.apply(this,arguments)}else{a.error("Method "+b+" does not exist on jQuery.gmap")}};a.fn.gMap.defaults={log:false,address:"",latitude:null,longitude:null,zoom:3,maxZoom:null,minZoom:null,markers:[],controls:{},scrollwheel:true,maptype:google.maps.MapTypeId.ROADMAP,mapTypeControl:true,zoomControl:true,panControl:false,scaleControl:false,streetViewControl:true,singleInfoWindow:true,html_prepend:'<div class="gmap_marker">',html_append:"</div>",icon:{image:"http://www.google.com/mapfiles/marker.png",iconsize:[20,34],iconanchor:[9,34],infowindowanchor:[9,2],shadow:"http://www.google.com/mapfiles/shadow50.png",shadowsize:[37,34]},onComplete:function(){},travelMode:"BYCAR",travelUnit:"KM",routeDisplay:null,routeErrors:{INVALID_REQUEST:"The provided request is invalid.",NOT_FOUND:"One or more of the given addresses could not be found.",OVER_QUERY_LIMIT:"A temporary error occured. Please try again in a few minutes.",REQUEST_DENIED:"An error occured. Please contact us.",UNKNOWN_ERROR:"An unknown error occured. Please try again.",ZERO_RESULTS:"No route could be found within the given addresses."}}})(jQuery)