diff options
author | Evan Prodromou <evan@status.net> | 2009-11-17 23:23:13 -0500 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2009-11-17 23:23:13 -0500 |
commit | fc08a5c8803fd79d58126528fa4a593ccfb8d512 (patch) | |
tree | ac2e2a71db244368ab1ea32142a5cea207557624 /plugins/Mapstraction/js/mxn.yahoo.core.js | |
parent | b7660b3d9998af4106795d53ed6bc1a0d77d7d4f (diff) |
first pass at Mapstraction plugin
Diffstat (limited to 'plugins/Mapstraction/js/mxn.yahoo.core.js')
-rw-r--r-- | plugins/Mapstraction/js/mxn.yahoo.core.js | 391 |
1 files changed, 391 insertions, 0 deletions
diff --git a/plugins/Mapstraction/js/mxn.yahoo.core.js b/plugins/Mapstraction/js/mxn.yahoo.core.js new file mode 100644 index 000000000..99e19584e --- /dev/null +++ b/plugins/Mapstraction/js/mxn.yahoo.core.js @@ -0,0 +1,391 @@ +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';
+ }
+
+}
+
+});
\ No newline at end of file |