forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			403 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			403 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | mxn.register('microsoft', {	 | ||
|  | 
 | ||
|  | Mapstraction: { | ||
|  | 	 | ||
|  | 	init: function(element, api) {		 | ||
|  | 		var me = this; | ||
|  | 		if (VEMap){ | ||
|  | 			this.maps[api] = new VEMap(element.id); | ||
|  | 	  | ||
|  | 			 | ||
|  | 			 | ||
|  | 			this.maps[api].AttachEvent('onclick', function(event){ | ||
|  | 				me.clickHandler(); | ||
|  | 				var x = event.mapX; | ||
|  | 				var y = event.mapY; | ||
|  | 			    var pixel = new VEPixel(x,y); | ||
|  | 				me.click.fire({'location': new mxn.LatLonPoint(pixel.Latitude, pixel.Longitude)}); | ||
|  | 			 | ||
|  | 				 | ||
|  | 			}); | ||
|  | 			this.maps[api].AttachEvent('onendzoom', function(event){ | ||
|  | 				me.moveendHandler(me); | ||
|  | 				me.changeZoom.fire(); | ||
|  | 				 | ||
|  | 				 | ||
|  | 			}); | ||
|  | 			this.maps[api].AttachEvent('onendpan', function(event){ | ||
|  | 				me.moveendHandler(me); | ||
|  | 				me.endPan.fire(); | ||
|  | 				 | ||
|  | 				 | ||
|  | 			}); | ||
|  | 			this.maps[api].AttachEvent('onchangeview', function(event){ | ||
|  | 				me.endPan.fire(); | ||
|  | 				 | ||
|  | 				 | ||
|  | 			}); | ||
|  | 			this.maps[api].LoadMap(); | ||
|  | 			document.getElementById("MSVE_obliqueNotification").style.visibility = "hidden";  | ||
|  | 		 | ||
|  | 			//removes the bird's eye pop-up
 | ||
|  | 			this.loaded[api] = true; | ||
|  | 			me.load.fire();	 | ||
|  | 		} | ||
|  | 		else{ | ||
|  | 			alert(api + ' map script not imported') | ||
|  | 			 | ||
|  | 		} | ||
|  | 	 | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	applyOptions: function(){ | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		if(this.options.enableScrollWheelZoom){ | ||
|  | 			map.enableContinuousZoom(); | ||
|  | 			map.enableScrollWheelZoom();	 | ||
|  | 		 | ||
|  | 		} | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	resizeTo: function(width, height){	 | ||
|  | 		this.maps[this.api].Resize(width, height); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addControls: function( args ) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  |          | ||
|  | 	if (args.pan) { | ||
|  | 			map.SetDashboardSize(VEDashboardSize.Normal); | ||
|  | 		} | ||
|  | 		else { | ||
|  | 			map.SetDashboardSize(VEDashboardSize.Tiny) | ||
|  | 		} | ||
|  | 
 | ||
|  |   	if (args.zoom == 'large') { | ||
|  | 			map.SetDashboardSize(VEDashboardSize.Small) | ||
|  | 		} | ||
|  | 		else if ( args.zoom == 'small' ) { | ||
|  | 			map.SetDashboardSize(VEDashboardSize.Tiny) | ||
|  | 		} | ||
|  | 		else { | ||
|  | 			map.HideDashboard(); | ||
|  | 			map.HideScalebar(); | ||
|  | 		} | ||
|  |         	 | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addSmallControls: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.SetDashboardSize(VEDashboardSize.Tiny); | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addLargeControls: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.SetDashboardSize(VEDashboardSize.Normal); | ||
|  | 		this.addControlsArgs.pan=true; | ||
|  | 		this.addControlsArgs.zoom = 'large'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addMapTypeControls: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.addTypeControl(); | ||
|  | 	 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	dragging: function(on) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		if(on){ | ||
|  | 			map.enableDragMap(); | ||
|  | 		} | ||
|  | 		else{ | ||
|  | 			map.disableDragMap(); | ||
|  | 			 | ||
|  | 		} | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setCenterAndZoom: function(point, zoom) {  | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pt = point.toProprietary(this.api); | ||
|  | 		var vzoom =  zoom; | ||
|  | 		map.SetCenterAndZoom(new VELatLong(point.lat,point.lon), vzoom) | ||
|  | 		 | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	addMarker: function(marker, old) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  |                 marker.pinID = "mspin-"+new Date().getTime()+'-'+(Math.floor(Math.random()*Math.pow(2,16))); | ||
|  | 		var pin = marker.toProprietary(this.api); | ||
|  | 	        map.AddShape(pin); | ||
|  | 		//give onclick event
 | ||
|  | 		//give on double click event
 | ||
|  | 		//give on close window
 | ||
|  | 		//return the marker
 | ||
|  | 		 | ||
|  | 		 | ||
|  | 		return pin; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	removeMarker: function(marker) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var id = marker.proprietary_marker.GetID(); | ||
|  | 		var microsoftShape = map.GetShapeByID(id); | ||
|  | 		map.DeleteShape(microsoftShape); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	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]; | ||
|  | 		var pl = polyline.toProprietary(this.api); | ||
|  | 		pl.HideIcon();//hide the icon VE automatically displays
 | ||
|  | 		map.AddShape(pl); | ||
|  | 		 | ||
|  | 		return pl; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	removePolyline: function(polyline) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var id = polyline.proprietary_polyline.GetID(); | ||
|  | 		var microsoftShape = map.GetShapeByID(id); | ||
|  | 		map.DeleteShape(microsoftShape); | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	getCenter: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var LL = map.GetCenter(); | ||
|  | 		var point = new mxn.LatLonPoint(LL.Latitude, LL.Longitude); | ||
|  | 		return point; | ||
|  | 		 | ||
|  | 	}, | ||
|  |   | ||
|  | 	setCenter: function(point, options) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pt = point.toProprietary(this.api); | ||
|  | 		map.SetCenter(new VELatLong(point.lat, point.lon)); | ||
|  | 		 | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setZoom: function(zoom) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.SetZoomLevel(zoom); | ||
|  | 		 | ||
|  | 		 | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	getZoom: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var zoom = map.GetZoomLevel(); | ||
|  | 		 | ||
|  | 		return zoom; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getZoomLevelForBoundingBox: function( bbox ) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		// NE and SW points from the bounding box.
 | ||
|  | 		var ne = bbox.getNorthEast(); | ||
|  | 		var sw = bbox.getSouthWest(); | ||
|  | 		var zoom; | ||
|  | 		 | ||
|  | 		// TODO: Add provider code
 | ||
|  | 		 | ||
|  | 		return zoom; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setMapType: function(type) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		switch(type) { | ||
|  | 			case mxn.Mapstraction.ROAD: | ||
|  | 				map.SetMapStyle(VEMapStyle.Road); | ||
|  | 				break; | ||
|  | 			case mxn.Mapstraction.SATELLITE: | ||
|  | 				map.SetMapStyle(VEMapStyle.Aerial); | ||
|  | 				break; | ||
|  | 			case mxn.Mapstraction.HYBRID: | ||
|  | 				map.SetMapStyle(VEMapStyle.Hybrid); | ||
|  | 				break; | ||
|  | 			default: | ||
|  | 				map.SetMapStyle(VEMapStyle.Road); | ||
|  | 		}	  | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getMapType: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var mode = map.GetMapStyle(); | ||
|  | 		switch(mode){ | ||
|  | 			case VEMapStyle.Aerial: | ||
|  | 				return mxn.Mapstraction.SATELLITE; | ||
|  | 			case VEMapStyle.Road: | ||
|  | 				return mxn.Mapstraction.ROAD; | ||
|  | 			case VEMapStyle.Hybrid: | ||
|  | 				return mxn.Mapstraction.HYBRID; | ||
|  | 			default: | ||
|  | 				return null; | ||
|  | 			 | ||
|  | 		} | ||
|  | 	 | ||
|  | 
 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getBounds: function () { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		view = map.GetMapView(); | ||
|  | 		var topleft = view.TopLeftLatLong; | ||
|  | 		var bottomright = view.BottomRightLatLong; | ||
|  | 		 | ||
|  | 		return new mxn.BoundingBox(bottomright.Latitude,topleft.Longitude,topleft.Latitude, bottomright.Longitude ); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setBounds: function(bounds){ | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var sw = bounds.getSouthWest(); | ||
|  | 		var ne = bounds.getNorthEast(); | ||
|  | 		 | ||
|  | 		var rec = new VELatLongRectangle(new VELatLong(ne.lat, ne.lon), new VELatLong(sw.lat, sw.lon)); | ||
|  | 		map.SetMapView(rec); | ||
|  | 		 | ||
|  | 		 | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	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]; | ||
|  | 	    var layer = new VEShapeLayer();  | ||
|  | 	    var mlayerspec = new VEShapeSourceSpecification(VEDataType.GeoRSS, url, layer); | ||
|  | 	 	map.AddShapeLayer(layer); | ||
|  | 	   | ||
|  | 	 | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addTileLayer: function(tile_url, opacity, copyright_text, min_zoom, max_zoom) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	toggleTileLayer: function(tile_url) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getPixelRatio: function() { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	mousePosition: function(element) { | ||
|  | 		var locDisp = document.getElementById(element); | ||
|  | 		if (locDisp != null) { | ||
|  | 			var map = this.maps[this.api]; | ||
|  | 			map.AttachEvent("onmousemove", function(veEvent){ | ||
|  | 				var latlon = map.PixelToLatLong(new VEPixel(veEvent.mapX, veEvent.mapY)); | ||
|  | 				var loc = latlon.Latitude.toFixed(4) + " / " + latlon.Longitude.toFixed(4); | ||
|  | 				locDisp.innerHTML = loc; | ||
|  | 
 | ||
|  | 			}); | ||
|  | 			locDisp.innerHTML = "0.0000 / 0.0000"; | ||
|  | 		} | ||
|  | 	} | ||
|  | }, | ||
|  | 
 | ||
|  | LatLonPoint: { | ||
|  | 	 | ||
|  | 	toProprietary: function() { | ||
|  | 		return  new VELatLong(this.lat, this.lon); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	fromProprietary: function(mpoint) { | ||
|  | 		this.lat =mpoint.Latitude; | ||
|  | 		this.lon =mpoint.Longitude; | ||
|  | 	} | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | Marker: { | ||
|  | 	 | ||
|  | 	toProprietary: function() { | ||
|  | 		var mmarker = new VEShape(VEShapeType.Pushpin, this.location.toProprietary('microsoft')); | ||
|  | 	 | ||
|  | 	 | ||
|  | 		return mmarker; | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	openBubble: function() {		 | ||
|  | 		var mmarker = this.proprietary_marker; | ||
|  | 		map.ClearInfoBoxStyles(); | ||
|  | 		mmarker.SetTitle(this.infoBubble); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	hide: function() { | ||
|  | 		this.proprietary_marker.hide(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	show: function() { | ||
|  | 		this.proprietary_marker_unhide(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	update: function() { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	} | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | Polyline: { | ||
|  | 
 | ||
|  | 	toProprietary: function() { | ||
|  | 		var mpoints =[]; | ||
|  | 		for(var i =0, length = this.points.length; i < length; i++) | ||
|  | 		{ | ||
|  | 			mpoints.push(this.points[i].toProprietary('microsoft')); | ||
|  | 		} | ||
|  | 		var mpolyline = new VEShape(VEShapeType.Polyline, mpoints); | ||
|  | 		if(this.color){ | ||
|  | 			var color = new mxn.util.Color(this.color); | ||
|  | 			var opacity = (typeof(this.opacity) == 'undefined' || this.opacity === null) ? 1.0 : this.opacity; | ||
|  | 			var vecolor = new VEColor(color.red, color.green, color.blue, opacity); | ||
|  | 			mpolyline.SetLineColor(vecolor); | ||
|  | 		} | ||
|  | 		//	TODO ability to change line width
 | ||
|  | 		return mpolyline; | ||
|  | 	}, | ||
|  | 		 | ||
|  | 	show: function() { | ||
|  | 			this.proprietary_polyline.Show(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	hide: function() { | ||
|  | 			this.proprietary_polyline.Hide(); | ||
|  | 	} | ||
|  | 	 | ||
|  | } | ||
|  | 
 | ||
|  | }); |