forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			358 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			358 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| mxn.register('cloudmade', {	
 | |
| 
 | |
|     Mapstraction: {
 | |
| 
 | |
|         init: function(element, api) {		
 | |
|             var me = this;		
 | |
|             var cloudmade = new CM.Tiles.CloudMade.Web({key: cloudmade_key});
 | |
|             this.maps[api] = new CM.Map(element, cloudmade);
 | |
|             this.loaded[api] = true;
 | |
| 
 | |
|             CM.Event.addListener(this.maps[api], 'click', function(location,marker) {
 | |
|                 if ( marker && marker.mapstraction_marker ) {
 | |
|                     marker.mapstraction_marker.click.fire();
 | |
|                 }
 | |
|                 else if ( location ) {
 | |
|                     me.click.fire({'location': new mxn.LatLonPoint(location.lat(), location.lng())});
 | |
|                 }
 | |
| 
 | |
|                 // If the user puts their own Google markers directly on the map
 | |
|                 // then there is no location and this event should not fire.
 | |
|                 if ( location ) {
 | |
|                     me.clickHandler(location.lat(),location.lng(),location,me);
 | |
|                 }
 | |
|             });
 | |
|         },
 | |
| 
 | |
|         applyOptions: function(){
 | |
|             var map = this.maps[this.api];
 | |
|             if(this.options.enableScrollWheelZoom){
 | |
|               map.enableScrollWheelZoom();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         resizeTo: function(width, height){	
 | |
|             this.maps[this.api].checkResize();
 | |
|         },
 | |
| 
 | |
|         addControls: function( args ) {
 | |
|             var map = this.maps[this.api];
 | |
| 
 | |
| 	    var c = this.addControlsArgs;
 | |
| 	    switch (c.zoom) {
 | |
| 	      case 'large':
 | |
| 	        this.addLargeControls();
 | |
| 	      break;
 | |
| 	      case 'small':
 | |
| 	        this.addSmallControls();
 | |
| 	      break;
 | |
| 	    }
 | |
| 
 | |
| 	    if (c.map_type) {
 | |
| 	      this.addMapTypeControls();
 | |
| 	    }
 | |
| 	    if (c.scale) {
 | |
| 	      map.addControl(new CM.ScaleControl());
 | |
| 	      this.addControlsArgs.scale = true;
 | |
| 	    }
 | |
|         },
 | |
| 
 | |
|         addSmallControls: function() {
 | |
|             var map = this.maps[this.api];
 | |
| 	    map.addControl(new CM.SmallMapControl());
 | |
| 	    this.addControlsArgs.zoom = 'small';
 | |
|         },
 | |
| 
 | |
|         addLargeControls: function() {
 | |
|             var map = this.maps[this.api];
 | |
| 	    map.addControl(new CM.LargeMapControl());
 | |
| 	    this.addControlsArgs.zoom = 'large';
 | |
|         },
 | |
| 
 | |
|         addMapTypeControls: function() {
 | |
|             var map = this.maps[this.api];
 | |
| 
 | |
| 	    map.addControl(new CM.TileLayerControl());
 | |
| 	    this.addControlsArgs.map_type = true;
 | |
|         },
 | |
| 
 | |
|         dragging: function(on) {
 | |
|             var map = this.maps[this.api];
 | |
| 
 | |
|             if (on) {
 | |
|               map.enableDragging();
 | |
|             } else {
 | |
|               map.disableDragging();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         setCenterAndZoom: function(point, zoom) { 
 | |
|             var map = this.maps[this.api];
 | |
|             var pt = point.toProprietary(this.api);
 | |
|             map.setCenter(pt, zoom);
 | |
| 
 | |
|         },
 | |
| 
 | |
|         addMarker: function(marker, old) {
 | |
|             var map = this.maps[this.api];
 | |
|             var pin = marker.toProprietary(this.api);
 | |
| 	    map.addOverlay(pin);
 | |
|             return pin;
 | |
|         },
 | |
| 
 | |
|         removeMarker: function(marker) {
 | |
|             var map = this.maps[this.api];
 | |
|             marker.proprietary_marker.closeInfoWindow();
 | |
| 	    map.removeOverlay(marker.proprietary_marker);
 | |
|         },
 | |
| 
 | |
|         removeAllMarkers: function() {
 | |
| 	    // Done in mxn.core.js
 | |
|         },
 | |
| 
 | |
|         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);
 | |
| 	    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.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 !== null && 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];
 | |
|             // NE and SW points from the bounding box.
 | |
|             var ne = bbox.getNorthEast();
 | |
|             var sw = bbox.getSouthWest();
 | |
| 
 | |
| 	    var zoom = map.getBoundsZoomLevel(new CM.LatLngBounds(sw.toProprietary(this.api), ne.toProprietary(this.api)));
 | |
|             return zoom;
 | |
|         },
 | |
| 
 | |
|         setMapType: function(type) {
 | |
|             var map = this.maps[this.api];
 | |
| 
 | |
|             // TODO: Are there any MapTypes for Cloudmade?
 | |
| 
 | |
|             switch(type) {
 | |
|                 case mxn.Mapstraction.ROAD:
 | |
|                 // TODO: Add provider code
 | |
|                 break;
 | |
|                 case mxn.Mapstraction.SATELLITE:
 | |
|                 // TODO: Add provider code
 | |
|                 break;
 | |
|                 case mxn.Mapstraction.HYBRID:
 | |
|                 // TODO: Add provider code
 | |
|                 break;
 | |
|                 default:
 | |
|                 // TODO: Add provider code
 | |
|             }	 
 | |
|         },
 | |
| 
 | |
|         getMapType: function() {
 | |
|             var map = this.maps[this.api];
 | |
| 
 | |
|             // TODO: Are there any MapTypes for Cloudmade?
 | |
| 
 | |
|             return mxn.Mapstraction.ROAD;
 | |
|             //return mxn.Mapstraction.SATELLITE;
 | |
|             //return mxn.Mapstraction.HYBRID;
 | |
| 
 | |
|         },
 | |
| 
 | |
|         getBounds: function () {
 | |
|             var map = this.maps[this.api];
 | |
| 
 | |
|             var box = map.getBounds();
 | |
|             var sw = box.getSouthWest();
 | |
|             var ne = box.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();
 | |
|             var ne = bounds.getNorthEast();
 | |
| 
 | |
| 	    map.zoomToBounds(new CM.LatLngBounds(sw.toProprietary(this.api), ne.toProprietary(this.api)));
 | |
|         },
 | |
| 
 | |
|         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
 | |
| 
 | |
|         },
 | |
| 
 | |
|         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) {
 | |
|             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() {
 | |
| 	    var cll = new CM.LatLng(this.lat,this.lon);
 | |
| 	    return cll;
 | |
|         },
 | |
| 
 | |
|         fromProprietary: function(point) {
 | |
| 	    return new mxn.LatLonPoint(point.lat(),point.lng());
 | |
|         }
 | |
| 
 | |
|     },
 | |
| 
 | |
|     Marker: {
 | |
| 
 | |
|         toProprietary: function() {
 | |
| 	    var pt = this.location.toProprietary(this.api);
 | |
| 	    var options = {};
 | |
| 
 | |
| 	    if (this.iconUrl) {
 | |
| 	      var cicon = new CM.Icon();
 | |
| 	      cicon.image = this.iconUrl;
 | |
| 	      if (this.iconSize) {
 | |
| 	        cicon.iconSize = new CM.Size(this.iconSize[0], this.iconSize[1]);
 | |
| 	        if (this.iconAnchor) {
 | |
| 	          cicon.iconAnchor = new CM.Point(this.iconAnchor[0], this.iconAnchor[1]);
 | |
| 	        }
 | |
| 	      }
 | |
| 	      if (this.iconShadowUrl) {
 | |
| 	        cicon.shadow = this.iconShadowUrl;
 | |
| 	        if (this.iconShadowSize) {
 | |
| 	          cicon.shadowSize = new CM.Size(this.iconShadowSize[0], this.iconShadowSize[1]);
 | |
| 	        }
 | |
| 	      }
 | |
| 	      options.icon = cicon;
 | |
| 	    }
 | |
| 	    if (this.labelText) {
 | |
|  	      options.title = this.labelText;
 | |
| 	    }
 | |
| 	    var cmarker = new CM.Marker(pt, options);
 | |
| 
 | |
| 	    if (this.infoBubble) {
 | |
| 	      cmarker.bindInfoWindow(this.infoBubble);
 | |
| 	    }
 | |
| 
 | |
| 
 | |
| 	    return cmarker;
 | |
|         },
 | |
| 
 | |
|         openBubble: function() {		
 | |
|             var pin = this.proprietary_marker;
 | |
|             pin.openInfoWindow(this.infoBubble);
 | |
|         },
 | |
| 
 | |
|         hide: function() {
 | |
|             var pin = this.proprietary_marker;
 | |
|             pin.hide();
 | |
|         },
 | |
| 
 | |
|         show: function() {
 | |
|             var pin = this.proprietary_marker;
 | |
|             pin.show();
 | |
|         },
 | |
| 
 | |
|         update: function() {
 | |
|             // TODO: Add provider code
 | |
|         }
 | |
| 
 | |
|     },
 | |
| 
 | |
|     Polyline: {
 | |
| 
 | |
|         toProprietary: function() {
 | |
|             var pts = [];
 | |
|             var poly;
 | |
| 
 | |
|             for (var i = 0,  length = this.points.length ; i< length; i++){
 | |
|               pts.push(this.points[i].toProprietary(this.api));
 | |
|             }
 | |
|             if (this.closed || pts[0].equals(pts[pts.length-1])) {
 | |
|               poly = new CM.Polygon(pts, this.color, this.width, this.opacity, this.fillColor || "#5462E3", this.opacity || "0.3");
 | |
|             } else {
 | |
|               poly = new CM.Polyline(pts, this.color, this.width, this.opacity);
 | |
|             }
 | |
|             return poly;
 | |
|         },
 | |
| 
 | |
|         show: function() {
 | |
| 	    this.proprietary_polyline.show();
 | |
|         },
 | |
| 
 | |
|         hide: function() {
 | |
| 	    this.proprietary_polyline.hide();
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| });
 |