forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			391 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			391 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| mxn.register('yahoo', {	
 | |
| 
 | |
| Mapstraction: {
 | |
| 	
 | |
| 	init: function(element,api) {		
 | |
| 		var me = this;
 | |
| 		if (YMap) {
 | |
| 			this.maps[api] = new YMap(element);
 | |
| 
 | |
| 			YEvent.Capture(this.maps[api], EventsList.MouseClick, function(event,location) {
 | |
| 				me.clickHandler(location.Lat, location.Lon, location, me);
 | |
| 				me.click.fire({'location': new mxn.LatLonPoint(location.Lat, location.Lon)});
 | |
| 			});
 | |
| 			YEvent.Capture(this.maps[api], EventsList.changeZoom, function() {
 | |
| 				me.moveendHandler(me);
 | |
| 				me.changeZoom.fire();
 | |
| 			});
 | |
| 			YEvent.Capture(this.maps[api], EventsList.endPan, function() {
 | |
| 				me.moveendHandler(me);
 | |
| 				me.endPan.fire();
 | |
| 			});
 | |
| 			YEvent.Capture(this.maps[api], EventsList.endAutoPan, function() {
 | |
| 				me.endPan.fire();
 | |
| 			});
 | |
| 			
 | |
| 			this.loaded[api] = true;
 | |
| 			me.load.fire();
 | |
| 		}
 | |
| 		else {
 | |
| 			alert(api + ' map script not imported');
 | |
| 		}  
 | |
| 	},
 | |
| 	
 | |
| 	applyOptions: function(){
 | |
| 		
 | |
| 		/*
 | |
| 		if (this.options.enableDragging) {
 | |
| 			map.enableDragMap();
 | |
| 		} else {
 | |
| 			map.disableDragMap();
 | |
| 		}*/
 | |
| 		
 | |
| 	},
 | |
| 
 | |
| 	resizeTo: function(width, height){	
 | |
| 		this.maps[this.api].resizeTo(new YSize(width,height));
 | |
| 	},
 | |
| 
 | |
| 	addControls: function( args ) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		
 | |
| 		if (args.pan) {
 | |
| 			map.addPanControl();
 | |
| 		}
 | |
| 		else {
 | |
| 			// Yahoo doesn't check the pan control is there before trying to remove it
 | |
| 			// so throws an exception :(
 | |
| 			map.addPanControl();
 | |
| 			map.removePanControl();
 | |
| 		}
 | |
| 		
 | |
| 		if (args.zoom == 'large') {
 | |
| 			map.addZoomLong();
 | |
| 		}
 | |
| 		else if ( args.zoom == 'small' ) {
 | |
| 			map.addZoomShort();
 | |
| 		}
 | |
| 		else {
 | |
| 			map.removeZoomScale();
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	addSmallControls: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.addPanControl();
 | |
| 		map.addZoomShort();
 | |
| 		this.addControlsArgs.pan = true;
 | |
| 		this.addControlsArgs.zoom = 'small';
 | |
| 	},
 | |
| 
 | |
| 	addLargeControls: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.addPanControl();
 | |
| 		map.addZoomLong();
 | |
| 		this.addControlsArgs.pan = true;  // keep the controls in case of swap
 | |
| 		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 yzoom = 18 - zoom; // maybe?
 | |
|         map.drawZoomAndCenter(pt,yzoom);
 | |
| 	},
 | |
| 	
 | |
| 	addMarker: function(marker, old) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var pin = marker.toProprietary(this.api);
 | |
| 		map.addOverlay(pin);
 | |
| 		YEvent.Capture(pin, EventsList.MouseClick, function() {
 | |
| 			marker.click.fire();
 | |
| 		});
 | |
| 		YEvent.Capture(pin, EventsList.openSmartWindow, function() {
 | |
| 			marker.openInfoBubble.fire();
 | |
| 		});
 | |
| 		YEvent.Capture(pin, EventsList.closeSmartWindow, function() {
 | |
| 			marker.closeInfoBubble.fire();
 | |
| 		});
 | |
| 		return pin;
 | |
| 	},
 | |
| 
 | |
| 	removeMarker: function(marker) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.removeOverlay(marker.proprietary_marker);
 | |
| 	},
 | |
| 
 | |
| 	removeAllMarkers: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.removeMarkersAll();
 | |
| 	},
 | |
| 	
 | |
| 	declutterMarkers: function(opts) {
 | |
| 		throw 'Not implemented';
 | |
| 	},
 | |
| 
 | |
| 	addPolyline: function(polyline, old) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var pl = polyline.toProprietary(this.api);
 | |
| 		map.addOverlay(pl);
 | |
| 		return pl;
 | |
| 	},
 | |
| 
 | |
| 	removePolyline: function(polyline) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.removeOverlay(polyline.proprietary_polyline);
 | |
| 	},
 | |
| 	
 | |
| 	getCenter: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var pt = map.getCenterLatLon();
 | |
|         var point = new mxn.LatLonPoint(pt.Lat, pt.Lon);
 | |
| 		return point;
 | |
| 	},
 | |
| 
 | |
| 	setCenter: function(point, options) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var pt = point.toProprietary(this.api);
 | |
| 		map.panToLatLon(pt);
 | |
| 	},
 | |
| 
 | |
| 	setZoom: function(zoom) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var yzoom = 18 - zoom; // maybe?
 | |
| 		map.setZoomLevel(yzoom);		  
 | |
| 	},
 | |
| 	
 | |
| 	getZoom: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		return 18 - map.getZoomLevel();
 | |
| 	},
 | |
| 
 | |
| 	getZoomLevelForBoundingBox: function( bbox ) {
 | |
| 		throw 'Not implemented';
 | |
| 	},
 | |
| 
 | |
| 	setMapType: function(type) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		
 | |
| 		switch(type) {
 | |
| 			case mxn.Mapstraction.ROAD:
 | |
| 				map.setMapType(YAHOO_MAP_REG);
 | |
| 				break;
 | |
| 			case mxn.Mapstraction.SATELLITE:
 | |
| 				map.setMapType(YAHOO_MAP_SAT);
 | |
| 				break;
 | |
| 			case mxn.Mapstraction.HYBRID:
 | |
| 				map.setMapType(YAHOO_MAP_HYB);
 | |
| 				break;
 | |
| 			default:
 | |
| 				map.setMapType(YAHOO_MAP_REG);
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	getMapType: function() {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var type = map.getCurrentMapType();
 | |
| 		switch(type) {
 | |
| 			case YAHOO_MAP_REG:
 | |
| 				return mxn.Mapstraction.ROAD;
 | |
| 			case YAHOO_MAP_SAT:
 | |
| 				return mxn.Mapstraction.SATELLITE;
 | |
| 			case YAHOO_MAP_HYB:
 | |
| 				return mxn.Mapstraction.HYBRID;
 | |
| 			default:
 | |
| 				return null;
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	getBounds: function () {
 | |
| 		var map = this.maps[this.api];
 | |
| 		var ybox = map.getBoundsLatLon();
 | |
|         return new mxn.BoundingBox(ybox.LatMin, ybox.LonMin, ybox.LatMax, ybox.LonMax);
 | |
| 	},
 | |
| 
 | |
| 	setBounds: function(bounds){
 | |
| 		var map = this.maps[this.api];
 | |
| 		var sw = bounds.getSouthWest();
 | |
| 		var ne = bounds.getNorthEast();
 | |
| 						
 | |
| 		if(sw.lon > ne.lon) {
 | |
| 			sw.lon -= 360;
 | |
| 		}
 | |
| 		var center = new YGeoPoint((sw.lat + ne.lat)/2, (ne.lon + sw.lon)/2);
 | |
| 		
 | |
| 		var container = map.getContainerSize();
 | |
| 		for(var zoom = 1 ; zoom <= 17 ; zoom++){
 | |
| 			var sw_pix = mxn.util.convertLatLonXY_Yahoo(sw,zoom);
 | |
| 			var ne_pix = mxn.util.convertLatLonXY_Yahoo(ne,zoom);
 | |
| 			if(sw_pix.x > ne_pix.x) {
 | |
| 				sw_pix.x -= (1 << (26 - zoom)); //earth circumference in pixel
 | |
| 			}
 | |
| 			if(Math.abs(ne_pix.x - sw_pix.x) <= container.width
 | |
| 				&& Math.abs(ne_pix.y - sw_pix.y) <= container.height){
 | |
| 				map.drawZoomAndCenter(center, zoom); //Call drawZoomAndCenter here: OK if called multiple times anyway
 | |
| 				break;
 | |
| 			}
 | |
| 		}		
 | |
| 	},
 | |
| 	
 | |
| 	addImageOverlay: function(id, src, opacity, west, south, east, north, oContext) {
 | |
| 		throw 'Not implemented';
 | |
| 	},
 | |
| 
 | |
| 	setImagePosition: function(id) {
 | |
| 	   throw 'Not implemented';
 | |
| 	},	
 | |
| 	
 | |
| 	addOverlay: function(url, autoCenterAndZoom) {
 | |
| 		var map = this.maps[this.api];
 | |
| 		map.addOverlay(new YGeoRSS(url));
 | |
| 	},
 | |
| 	
 | |
| 	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) {
 | |
| 		throw 'Not implemented';
 | |
| 	}
 | |
| 	
 | |
| },
 | |
| 
 | |
| LatLonPoint: {
 | |
| 	
 | |
| 	toProprietary: function() {
 | |
| 		return new YGeoPoint(this.lat,this.lon);
 | |
| 	},
 | |
| 
 | |
| 	fromProprietary: function(yahooPoint) {
 | |
| 		this.lat = yahooPoint.Lat;
 | |
| 		this.lon = yahooPoint.Lon;
 | |
| 	}
 | |
| 	
 | |
| },
 | |
| 
 | |
| Marker: {
 | |
| 	
 | |
| 	toProprietary: function() {
 | |
| 		var ymarker, size;
 | |
| 		var infoBubble, event_action, infoDiv, div;
 | |
| 		
 | |
| 	    if(this.iconSize) {
 | |
| 	        size = new YSize(this.iconSize[0], this.iconSize[1]);
 | |
| 	    }
 | |
| 	    if(this.iconUrl) {
 | |
| 	        if(this.iconSize){
 | |
| 	            ymarker = new YMarker(this.location.toProprietary('yahoo'), new YImage(this.iconUrl, size));
 | |
| 			}
 | |
| 	        else {
 | |
| 	            ymarker = new YMarker(this.location.toProprietary('yahoo'), new YImage(this.iconUrl));
 | |
| 			}
 | |
| 	    }
 | |
| 	    else {
 | |
| 	        if(this.iconSize) {
 | |
| 	            ymarker = new YMarker(this.location.toProprietary('yahoo'), null, size);
 | |
| 			}
 | |
| 	        else {
 | |
| 	            ymarker = new YMarker(this.location.toProprietary('yahoo'));
 | |
| 			}
 | |
| 	    }
 | |
| 
 | |
| 	    if(this.labelText) {
 | |
| 	        ymarker.addLabel(this.labelText);
 | |
| 	    }
 | |
| 
 | |
| 	    if(this.infoBubble) {
 | |
| 	        infoBubble = this.infoBubble;
 | |
| 	        if(this.hover) {
 | |
| 	            event_action = EventsList.MouseOver;
 | |
| 	        }
 | |
| 	        else {
 | |
| 	            event_action = EventsList.MouseClick;
 | |
| 	        }
 | |
| 	        YEvent.Capture(ymarker, event_action, function() {
 | |
| 	            ymarker.openSmartWindow(infoBubble);
 | |
| 	        });
 | |
| 
 | |
| 	    }
 | |
| 
 | |
| 	    if(this.infoDiv) {
 | |
| 	        infoDiv = this.infoDiv;
 | |
| 	        div = this.div;
 | |
| 	        if(this.hover) {
 | |
| 	            event_action = EventsList.MouseOver;
 | |
| 	        }
 | |
| 	        else {
 | |
| 	            event_action = EventsList.MouseClick;
 | |
| 	        }
 | |
| 	        YEvent.Capture(ymarker, event_action, function() {
 | |
| 	            document.getElementById(div).innerHTML = infoDiv;
 | |
| 	        });
 | |
| 	    }
 | |
| 
 | |
| 	    return ymarker;
 | |
| 	},
 | |
| 
 | |
| 	openBubble: function() {
 | |
| 		var ypin = this.proprietary_marker;
 | |
|         ypin.openSmartWindow(this.infoBubble);
 | |
| 	},
 | |
| 
 | |
| 	hide: function() {
 | |
| 		this.proprietary_marker.hide();
 | |
| 	},
 | |
| 
 | |
| 	show: function() {
 | |
| 		this.proprietary_marker.unhide();
 | |
| 	},
 | |
| 
 | |
| 	update: function() {
 | |
| 		throw 'Not implemented';
 | |
| 	}
 | |
| 	
 | |
| },
 | |
| 
 | |
| Polyline: {
 | |
| 
 | |
| 	toProprietary: function() {		
 | |
| 		var ypolyline;
 | |
| 	    var ypoints = [];
 | |
| 	    for (var i = 0, length = this.points.length ; i< length; i++){
 | |
| 	        ypoints.push(this.points[i].toProprietary('yahoo'));
 | |
| 	    }
 | |
| 	    ypolyline = new YPolyline(ypoints,this.color,this.width,this.opacity);
 | |
| 	    return ypolyline;
 | |
| 	},
 | |
| 	
 | |
| 	show: function() {
 | |
| 		throw 'Not implemented';
 | |
| 	},
 | |
| 
 | |
| 	hide: function() {
 | |
| 		throw 'Not implemented';
 | |
| 	}
 | |
| 	
 | |
| }
 | |
| 
 | |
| }); |