forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			444 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			444 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| mxn.register('googlev3', {	
 | |
| 
 | |
| Mapstraction: {
 | |
| 	
 | |
| 	init: function(element, api){		
 | |
| 	    var me = this;         
 | |
|             if ( google && google.maps ){
 | |
|                 // by default no controls and road map
 | |
|                 var myOptions = {
 | |
| 		    		disableDefaultUI: true,
 | |
|                     mapTypeId: google.maps.MapTypeId.ROADMAP
 | |
|                 };
 | |
|                 var map = new google.maps.Map(element, myOptions);
 | |
|                 
 | |
|                 // deal with click
 | |
|                 google.maps.event.addListener(map, 'click', function(location){
 | |
| 				me.clickHandler(location.latLng.lat(),location.latLng.lng(),location,me);
 | |
|                 });
 | |
| 
 | |
|                 // deal with zoom change
 | |
|                 google.maps.event.addListener(map, 'zoom_changed', function(){
 | |
|                     me.changeZoom.fire();
 | |
| 		});
 | |
|                 // deal with map movement
 | |
| 		google.maps.event.addListener(map, 'dragend', function(){
 | |
|                     me.moveendHandler(me);
 | |
|                     me.endPan.fire();
 | |
| 		});
 | |
|                 this.maps[api] = map;
 | |
|                 this.loaded[api] = true;
 | |
|                 me.load.fire();
 | |
| 	    }
 | |
|             else {
 | |
|                 alert(api + ' map script not imported');
 | |
|             }
 | |
| 	},
 | |
| 	
 | |
| 	applyOptions: function(){
 | |
| 	    var map = this.maps[this.api];
 | |
| 	    var myOptions = [];
 | |
|             if (this.options.enableDragging) {
 | |
| 		myOptions.draggable = true;
 | |
|             } 
 | |
|             if (this.options.enableScrollWheelZoom){
 | |
| 		myOptions.scrollwheel = true;
 | |
|             } 
 | |
| 	    map.setOptions(myOptions);
 | |
| 	},
 | |
| 
 | |
| 	resizeTo: function(width, height){	
 | |
|             this.currentElement.style.width = width;
 | |
|             this.currentElement.style.height = height;
 | |
|             var map = this.maps[this.api];
 | |
|             google.maps.event.trigger(map,'resize');
 | |
|   	},
 | |
| 
 | |
| 	addControls: function( args ) {
 | |
| 	    var map = this.maps[this.api];	
 | |
|             // remove old controls
 | |
| 
 | |
|             // Google has a combined zoom and pan control.
 | |
|             if (args.zoom || args.pan) {
 | |
|                 if (args.zoom == 'large'){ 
 | |
|                     this.addLargeControls();
 | |
|                 } else { 
 | |
|                     this.addSmallControls();
 | |
|                 }
 | |
|             }
 | |
|             if (args.scale){
 | |
|                 var myOptions = {
 | |
|                     scaleControl:true,
 | |
| 		    scaleControlOptions: {style:google.maps.ScaleControlStyle.DEFAULT}                
 | |
|                 };
 | |
|                 map.setOptions(myOptions);
 | |
|                 this.addControlsArgs.scale = true;
 | |
|             }
 | |
| 	},
 | |
| 
 | |
| 	addSmallControls: function() {
 | |
|             var map = this.maps[this.api];
 | |
|             var myOptions = {
 | |
|             	navigationControl: true,
 | |
|             	navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
 | |
|             };
 | |
|             map.setOptions(myOptions);
 | |
| 
 | |
|             this.addControlsArgs.pan = false;
 | |
|             this.addControlsArgs.scale = false;                        
 | |
|             this.addControlsArgs.zoom = 'small';
 | |
| 	},
 | |
| 
 | |
| 	addLargeControls: function() {
 | |
| 	    var map = this.maps[this.api];
 | |
|             var myOptions = {
 | |
|                 navigationControl:true,
 | |
| 		navigationControlOptions: {style:google.maps.NavigationControlStyle.DEFAULT}
 | |
|             };
 | |
|             map.setOptions(myOptions);
 | |
|             this.addControlsArgs.pan = true;
 | |
|             this.addControlsArgs.zoom = 'large';
 | |
| 	},
 | |
| 
 | |
| 	addMapTypeControls: function() {
 | |
| 	    var map = this.maps[this.api];
 | |
|             var myOptions = {
 | |
|                 mapTypeControl: true,
 | |
|                 mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DEFAULT}
 | |
|             };
 | |
|             map.setOptions(myOptions);
 | |
| 	    this.addControlsArgs.map_type = true;
 | |
| 	},
 | |
| 
 | |
| 	setCenterAndZoom: function(point, zoom) { 
 | |
| 		var map = this.maps[this.api];
 | |
| 		var pt = point.toProprietary(this.api);
 | |
| 		map.setCenter(pt);
 | |
|                 map.setZoom(zoom);
 | |
| 	},
 | |
| 	
 | |
| 	addMarker: function(marker, old) {
 | |
| 	       return marker.toProprietary(this.api);		
 | |
| 	},
 | |
| 
 | |
| 	removeMarker: function(marker) {
 | |
|                 // doesn't really remove them, just hides them
 | |
|                 marker.hide();
 | |
| 	},
 | |
| 
 | |
| 	removeAllMarkers: function() {
 | |
| 		var map = this.maps[this.api];		
 | |
| 		// TODO: Add provider code
 | |
| 	},
 | |
| 	
 | |
| 	declutterMarkers: function(opts) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		// TODO: Add provider code
 | |
| 	},
 | |
| 
 | |
| 	addPolyline: function(polyline, old) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		return polyline.toProprietary(this.api);
 | |
| 	},
 | |
| 
 | |
| 	removePolyline: function(polyline) {
 | |
| 		var map = this.maps[this.api];		
 | |
| 		// TODO: Add provider code
 | |
| 	},
 | |
|        
 | |
| 	getCenter: function() {
 | |
| 		var map = this.maps[this.api];
 | |
|                 var pt = map.getCenter();
 | |
|                 return new mxn.LatLonPoint(pt.lat(),pt.lng());
 | |
| 	},
 | |
| 
 | |
| 	setCenter: function(point, options) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var pt = point.toProprietary(this.api);
 | |
| 		if(options && options.pan) { 
 | |
|                     map.panTo(pt);
 | |
| 		}
 | |
| 		else { 
 | |
|                     map.setCenter(pt);
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	setZoom: function(zoom) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.setZoom(zoom);
 | |
| 	},
 | |
| 	
 | |
| 	getZoom: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		return map.getZoom();
 | |
| 	},
 | |
| 
 | |
| 	getZoomLevelForBoundingBox: function( bbox ) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var sw = bbox.getSouthWest().toProprietary(this.api);
 | |
| 		var ne = bbox.getNorthEast().toProprietary(this.api);
 | |
| 		var gLatLngBounds = new google.maps.LatLngBounds(sw, ne);
 | |
| 		map.fitBounds(gLatLngBounds);
 | |
|                 return map.getZoom();
 | |
| 	},
 | |
| 
 | |
| 	setMapType: function(type) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		switch(type) {
 | |
| 			case mxn.Mapstraction.ROAD:
 | |
|                             map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
 | |
| 			    break;
 | |
| 			case mxn.Mapstraction.SATELLITE:
 | |
|                             map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
 | |
| 			    break;
 | |
| 			case mxn.Mapstraction.HYBRID:
 | |
|                             map.setMapTypeId(google.maps.MapTypeId.HYBRID);
 | |
| 			    break;
 | |
| 			default:
 | |
|                             map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
 | |
| 		}	 
 | |
| 	},
 | |
| 
 | |
| 	getMapType: function() {
 | |
|             var map = this.maps[this.api];
 | |
|             var type = map.getMapTypeId();
 | |
|                 switch(type) {
 | |
|                         case google.maps.MapTypeId.ROADMAP:
 | |
|                                 return mxn.Mapstraction.ROAD;
 | |
|                         case google.maps.MapTypeId.SATELLITE:
 | |
|                                 return mxn.Mapstraction.SATELLITE;
 | |
|                         case google.maps.MapTypeId.HYBRID:
 | |
|                                 return mxn.Mapstraction.HYBRID;
 | |
|                         //case google.maps.MapTypeId.TERRAIN:
 | |
|                         //        return something;
 | |
|                         default:
 | |
|                                 return null;
 | |
|                 }
 | |
| 	},
 | |
| 
 | |
| 	getBounds: function () {
 | |
| 	    var map = this.maps[this.api];
 | |
| 	    var gLatLngBounds = map.getBounds();	
 | |
|             var sw = gLatLngBounds.getSouthWest();
 | |
|             var ne = gLatLngBounds.getNorthEast();
 | |
|             return new mxn.BoundingBox(sw.lat(), sw.lng(), ne.lat(), ne.lng());
 | |
| 	},
 | |
| 
 | |
| 	setBounds: function(bounds){
 | |
| 		var map = this.maps[this.api];
 | |
| 		var sw = bounds.getSouthWest().toProprietary(this.api);
 | |
| 		var ne = bounds.getNorthEast().toProprietary(this.api);
 | |
| 		var gLatLngBounds = new google.maps.LatLngBounds(sw, ne);
 | |
| 		map.fitBounds(gLatLngBounds);
 | |
| 	},
 | |
| 
 | |
| 	addImageOverlay: function(id, src, opacity, west, south, east, north, oContext) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		
 | |
| 		// TODO: Add provider code
 | |
| 	},
 | |
| 
 | |
| 	setImagePosition: function(id, oContext) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var topLeftPoint; var bottomRightPoint;
 | |
| 
 | |
| 		// TODO: Add provider code
 | |
| 
 | |
| 		//oContext.pixels.top = ...;
 | |
| 		//oContext.pixels.left = ...;
 | |
| 		//oContext.pixels.bottom = ...;
 | |
| 		//oContext.pixels.right = ...;
 | |
| 	},
 | |
| 	
 | |
| 	addOverlay: function(url, autoCenterAndZoom) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		
 | |
| 		// TODO: Add provider code
 | |
| 		
 | |
| 	},
 | |
| 
 | |
| 	addTileLayer: function(tile_url, opacity, copyright_text, min_zoom, max_zoom, map_type) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		
 | |
| 		// TODO: Add provider code
 | |
| 	},
 | |
| 
 | |
| 	toggleTileLayer: function(tile_url) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		
 | |
| 		// TODO: Add provider code
 | |
| 	},
 | |
| 
 | |
| 	getPixelRatio: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 
 | |
| 		// TODO: Add provider code	
 | |
| 	},
 | |
| 	
 | |
| 	mousePosition: function(element) {
 | |
| 		var map = this.maps[this.api];
 | |
| 
 | |
| 		// TODO: Add provider code	
 | |
| 	}
 | |
| },
 | |
| 
 | |
| LatLonPoint: {
 | |
| 	
 | |
| 	toProprietary: function() {
 | |
|             return new google.maps.LatLng(this.lat, this.lon);
 | |
| 	},
 | |
| 
 | |
| 	fromProprietary: function(googlePoint) {
 | |
| 		this.lat = googlePoint.lat();
 | |
| 		this.lon = googlePoint.lng();
 | |
| 	}
 | |
| 	
 | |
| },
 | |
| 
 | |
| Marker: {
 | |
| 	
 | |
| 	toProprietary: function() {
 | |
| 		var options = {};
 | |
| 
 | |
|                 // do we have an Anchor?
 | |
|                 var ax = 0;  // anchor x 
 | |
| 		var ay = 0;  // anchor y
 | |
| 
 | |
| 		if (this.iconAnchor) {
 | |
|                     ax = this.iconAnchor[0];
 | |
|                     ay = this.iconAnchor[1];
 | |
|                 }
 | |
|                 var gAnchorPoint = new google.maps.Point(ax,ay);
 | |
| 
 | |
| 		if (this.iconUrl) {
 | |
|  		    options.icon = new google.maps.MarkerImage(
 | |
| 			this.iconUrl,
 | |
|                         new google.maps.Size(this.iconSize[0],
 | |
| 					     this.iconSize[1]),
 | |
|                         new google.maps.Point(0,0),
 | |
|                         gAnchorPoint
 | |
|                     );
 | |
| 
 | |
|                     // do we have a Shadow?
 | |
| 		    if (this.iconShadowUrl) {
 | |
|   			if (this.iconShadowSize) {
 | |
|                             var x = this.iconShadowSize[0];
 | |
|                             var y = this.iconShadowSize[1];
 | |
|   			    options.shadow = new google.maps.MarkerImage(
 | |
| 				this.iconShadowUrl,
 | |
|                                 new google.maps.Size(x,y),
 | |
|                                 new google.maps.Point(0,0),
 | |
|                                 gAnchorPoint 
 | |
| 			    );
 | |
| 			}
 | |
|                         else {
 | |
|   			    options.shadow = new google.maps.MarkerImage(this.iconShadowUrl);
 | |
| 			}
 | |
| 		    }
 | |
| 		}
 | |
| 		if (this.draggable){
 | |
| 		    options.draggable = this.draggable;
 | |
| 		}
 | |
| 		if (this.labelText){
 | |
| 		    options.title =  this.labelText;
 | |
| 		}
 | |
| 		if (this.imageMap){
 | |
|                     options.shape = {
 | |
|                         coord: this.imageMap,
 | |
|                         type: 'poly'
 | |
| 		    };
 | |
|                 }
 | |
| 		
 | |
| 		options.position = this.location.toProprietary(this.api);
 | |
| 		options.map = this.map;
 | |
| 
 | |
| 		var marker = new google.maps.Marker(options);
 | |
| 
 | |
| 		if (this.infoBubble){
 | |
| 		    var infowindow = new google.maps.InfoWindow({
 | |
|         	        content: this.infoBubble
 | |
| 		    });
 | |
| 
 | |
|                     var event_action = "click";
 | |
| 		    if (this.hover) {
 | |
| 		        event_action = "mouseover";
 | |
| 		    }
 | |
| 		    google.maps.event.addListener(marker, event_action, function() { infowindow.open(this.map,marker); });
 | |
| 		}
 | |
| 
 | |
|                 if (this.hoverIconUrl){
 | |
|                     var gSize = new google.maps.Size(this.iconSize[0],
 | |
| 			                            this.iconSize[1]);
 | |
|                     var zerozero = new google.maps.Point(0,0);
 | |
|  		    var hIcon = new google.maps.MarkerImage(
 | |
| 			this.hoverIconUrl,
 | |
|                         gSize,
 | |
|                         zerozero,
 | |
|                         gAnchorPoint
 | |
|                     );
 | |
|  		    var Icon = new google.maps.MarkerImage(
 | |
| 			this.iconUrl,
 | |
| 			gSize,
 | |
|                         zerozero,
 | |
|                         gAnchorPoint
 | |
|                     );
 | |
|                     google.maps.event.addListener(
 | |
|                         marker, 
 | |
|                         "mouseover", 
 | |
|                         function(){ 
 | |
|                             marker.setIcon(hIcon); 
 | |
|                         }
 | |
|                     );
 | |
|                     google.maps.event.addListener(
 | |
|                         marker, 
 | |
|                         "mouseout", 
 | |
|                         function(){ marker.setIcon(Icon); }
 | |
|                     );
 | |
|                 }
 | |
| 
 | |
| 		google.maps.event.addListener(marker, 'click', function() {
 | |
| 			marker.mapstraction_marker.click.fire();
 | |
| 		});
 | |
| 		
 | |
| 		return marker;
 | |
| 	},
 | |
| 
 | |
| 	openBubble: function() {
 | |
| 		var infowindow = new google.maps.InfoWindow({
 | |
|        		content: this.infoBubble
 | |
| 	    });
 | |
| 	    infowindow.open(this.map,this.proprietary_marker);
 | |
| 	},
 | |
| 
 | |
| 	hide: function() {
 | |
| 	    this.proprietary_marker.setOptions({visible:false});
 | |
| 	},
 | |
| 
 | |
| 	show: function() {
 | |
| 	    this.proprietary_marker.setOptions({visible:true});
 | |
| 	},
 | |
| 
 | |
| 	update: function() {
 | |
| 		// TODO: Add provider code
 | |
| 	}
 | |
| 	
 | |
| },
 | |
| 
 | |
| Polyline: {
 | |
| 
 | |
| 	toProprietary: function() {
 | |
|             throw 'Not implemented';
 | |
| 	},
 | |
| 	
 | |
| 	show: function() {
 | |
|             throw 'Not implemented';
 | |
| 	},
 | |
| 
 | |
| 	hide: function() {
 | |
|             throw 'Not implemented';
 | |
| 	}
 | |
| 	
 | |
| }
 | |
| 
 | |
| });
 |