101 lines
2.6 KiB
JavaScript
101 lines
2.6 KiB
JavaScript
//>>built
|
|
define("dojox/geo/charting/KeyboardInteractionSupport",["dojo/_base/lang","dojo/_base/declare","dojo/_base/event","dojo/_base/connect","dojo/_base/html","dojo/dom","dojox/lang/functional","dojo/keys"],function(_1,_2,_3,_4,_5,_6,_7,_8){
|
|
return _2("dojox.geo.charting.KeyboardInteractionSupport",null,{_map:null,_zoomEnabled:false,constructor:function(_9,_a){
|
|
this._map=_9;
|
|
if(_a){
|
|
this._zoomEnabled=_a.enableZoom;
|
|
}
|
|
},connect:function(){
|
|
var _b=_6.byId(this._map.container);
|
|
_5.attr(_b,{tabindex:0,role:"presentation","aria-label":"map"});
|
|
this._keydownListener=_4.connect(_b,"keydown",this,"keydownHandler");
|
|
this._onFocusListener=_4.connect(_b,"focus",this,"onFocus");
|
|
this._onBlurListener=_4.connect(_b,"blur",this,"onBlur");
|
|
},disconnect:function(){
|
|
_4.disconnect(this._keydownListener);
|
|
this._keydownListener=null;
|
|
_4.disconnect(this._onFocusListener);
|
|
this._onFocusListener=null;
|
|
_4.disconnect(this._onBlurListener);
|
|
this._onBlurListener=null;
|
|
},keydownHandler:function(e){
|
|
switch(e.keyCode){
|
|
case _8.LEFT_ARROW:
|
|
this._directTo(-1,-1,1,-1);
|
|
break;
|
|
case _8.RIGHT_ARROW:
|
|
this._directTo(-1,-1,-1,1);
|
|
break;
|
|
case _8.UP_ARROW:
|
|
this._directTo(1,-1,-1,-1);
|
|
break;
|
|
case _8.DOWN_ARROW:
|
|
this._directTo(-1,1,-1,-1);
|
|
break;
|
|
case _8.SPACE:
|
|
if(this._map.selectedFeature&&!this._map.selectedFeature._isZoomIn&&this._zoomEnabled){
|
|
this._map.selectedFeature._zoomIn();
|
|
}
|
|
break;
|
|
case _8.ESCAPE:
|
|
if(this._map.selectedFeature&&this._map.selectedFeature._isZoomIn&&this._zoomEnabled){
|
|
this._map.selectedFeature._zoomOut();
|
|
}
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
_3.stop(e);
|
|
},onFocus:function(e){
|
|
if(this._map.selectedFeature||this._map.focused){
|
|
return;
|
|
}
|
|
this._map.focused=true;
|
|
var _c,_d=false;
|
|
if(this._map.lastSelectedFeature){
|
|
_c=this._map.lastSelectedFeature;
|
|
}else{
|
|
var _e=this._map.getMapCenter(),_f=Infinity;
|
|
_7.forIn(this._map.mapObj.features,function(_10){
|
|
var _11=Math.sqrt(Math.pow(_10._center[0]-_e.x,2)+Math.pow(_10._center[1]-_e.y,2));
|
|
if(_11<_f){
|
|
_f=_11;
|
|
_c=_10;
|
|
}
|
|
});
|
|
_d=true;
|
|
}
|
|
if(_c){
|
|
if(_d){
|
|
_c._onclickHandler(null);
|
|
}else{
|
|
}
|
|
this._map.mapObj.marker.show(_c.id);
|
|
}
|
|
},onBlur:function(){
|
|
this._map.lastSelectedFeature=this._map.selectedFeature;
|
|
},_directTo:function(up,_12,_13,_14){
|
|
var _15=this._map.selectedFeature,_16=_15._center[0],_17=_15._center[1],_18=Infinity,_19=null;
|
|
_7.forIn(this._map.mapObj.features,function(_1a){
|
|
var _1b=Math.abs(_16-_1a._center[0]),_1c=Math.abs(_17-_1a._center[1]),_1d=_1b+_1c;
|
|
if((up-_12)*(_17-_1a._center[1])>0){
|
|
if(_1b<_1c&&_18>_1d){
|
|
_18=_1d;
|
|
_19=_1a;
|
|
}
|
|
}
|
|
if((_13-_14)*(_16-_1a._center[0])>0){
|
|
if(_1b>_1c&&_18>_1d){
|
|
_18=_1d;
|
|
_19=_1a;
|
|
}
|
|
}
|
|
});
|
|
if(_19){
|
|
this._map.mapObj.marker.hide();
|
|
_19._onclickHandler(null);
|
|
this._map.mapObj.marker.show(_19.id);
|
|
}
|
|
}});
|
|
});
|