Don't turn enter keypress into clicks on map (#5507)

* Don't turn enter keypress into clicks on map

But still preserve functionality to open marker's popup through
enter keypress when focused.

Fixes #5499.

* Clean code

Thanks @egoroof

* Change name of keypress handler to _onKeyPress

* Add unit test
This commit is contained in:
Per Liedman 2017-06-02 11:18:46 +02:00 committed by GitHub
parent d78dc21209
commit b23d83f464
4 changed files with 33 additions and 2 deletions

View File

@ -0,0 +1,11 @@
describe('General', function () {
describe('noConflict', function () {
var leaflet = L;
after(function () {
L = leaflet;
});
expect(L.noConflict()).to.eql(leaflet);
});
});

View File

@ -248,6 +248,18 @@ describe('Popup', function () {
expect(map.hasLayer(layer._popup)).to.be(true);
});
it("can open a popup with enter keypress when marker has focus", function () {
var layer = new L.Marker([55.8, 37.6]).addTo(map);
layer.bindPopup("layer popup");
happen.keypress(layer._icon, {
keyCode: 13
});
expect(map.hasLayer(layer._popup)).to.be(true);
});
});
describe("L.Map#openPopup", function () {

View File

@ -383,6 +383,7 @@ Layer.include({
if (!this._popupHandlersAdded) {
this.on({
click: this._openPopup,
keypress: this._onKeyPress,
remove: this.closePopup,
move: this._movePopup
});
@ -398,6 +399,7 @@ Layer.include({
if (this._popup) {
this.off({
click: this._openPopup,
keypress: this._onKeyPress,
remove: this.closePopup,
move: this._movePopup
});
@ -515,5 +517,11 @@ Layer.include({
_movePopup: function (e) {
this._popup.setLatLng(e.latlng);
},
_onKeyPress: function (e) {
if (e.originalEvent.keyCode === 13) {
this._openPopup(e);
}
}
});

View File

@ -1307,9 +1307,9 @@ export var Map = Evented.extend({
_handleDOMEvent: function (e) {
if (!this._loaded || DomEvent.skipped(e)) { return; }
var type = e.type === 'keypress' && e.keyCode === 13 ? 'click' : e.type;
var type = e.type;
if (type === 'mousedown') {
if (type === 'mousedown' || type === 'keypress') {
// prevents outline when clicking on keyboard-focusable element
DomUtil.preventOutline(e.target || e.srcElement);
}