[Event.buttonclick] make buttonclick work on RETURN/SPACE keydown
This commit is contained in:
@@ -20,6 +20,12 @@ OpenLayers.Event = {
|
|||||||
* element._eventCacheID
|
* element._eventCacheID
|
||||||
*/
|
*/
|
||||||
observers: false,
|
observers: false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant: KEY_SPACE
|
||||||
|
* {int}
|
||||||
|
*/
|
||||||
|
KEY_SPACE: 32,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constant: KEY_BACKSPACE
|
* Constant: KEY_BACKSPACE
|
||||||
@@ -388,7 +394,8 @@ OpenLayers.Events = OpenLayers.Class({
|
|||||||
"mousedown", "mouseup", "mousemove",
|
"mousedown", "mouseup", "mousemove",
|
||||||
"click", "dblclick", "rightclick", "dblrightclick",
|
"click", "dblclick", "rightclick", "dblrightclick",
|
||||||
"resize", "focus", "blur",
|
"resize", "focus", "blur",
|
||||||
"touchstart", "touchmove", "touchend"
|
"touchstart", "touchmove", "touchend",
|
||||||
|
"keydown"
|
||||||
],
|
],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ OpenLayers.Events.buttonclick = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
events: [
|
events: [
|
||||||
'mousedown', 'mouseup', 'click', 'dblclick',
|
'mousedown', 'mouseup', 'click', 'dblclick',
|
||||||
'touchstart', 'touchmove', 'touchend'
|
'touchstart', 'touchmove', 'touchend', 'keydown'
|
||||||
],
|
],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,6 +112,18 @@ OpenLayers.Events.buttonclick = OpenLayers.Class({
|
|||||||
element = element.parentNode;
|
element = element.parentNode;
|
||||||
}
|
}
|
||||||
if (OpenLayers.Element.hasClass(element, "olButton")) {
|
if (OpenLayers.Element.hasClass(element, "olButton")) {
|
||||||
|
if (evt.type === "keydown") {
|
||||||
|
switch (evt.keyCode) {
|
||||||
|
case OpenLayers.Event.KEY_RETURN:
|
||||||
|
case OpenLayers.Event.KEY_SPACE:
|
||||||
|
this.target.triggerEvent("buttonclick", {
|
||||||
|
buttonElement: element
|
||||||
|
});
|
||||||
|
OpenLayers.Event.stop(evt);
|
||||||
|
propagate = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (this.startEvt) {
|
if (this.startEvt) {
|
||||||
if (this.completeRegEx.test(evt.type)) {
|
if (this.completeRegEx.test(evt.type)) {
|
||||||
var pos = OpenLayers.Util.pagePosition(element);
|
var pos = OpenLayers.Util.pagePosition(element);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_ButtonClick_buttonClick(t) {
|
function test_ButtonClick_buttonClick(t) {
|
||||||
t.plan(23);
|
t.plan(27);
|
||||||
events = new OpenLayers.Events({}, element);
|
events = new OpenLayers.Events({}, element);
|
||||||
events.on({
|
events.on({
|
||||||
"buttonclick": logEvent,
|
"buttonclick": logEvent,
|
||||||
@@ -38,7 +38,8 @@
|
|||||||
"click": logEvent,
|
"click": logEvent,
|
||||||
"dblclick": logEvent,
|
"dblclick": logEvent,
|
||||||
"touchstart": logEvent,
|
"touchstart": logEvent,
|
||||||
"touchend": logEvent
|
"touchend": logEvent,
|
||||||
|
"keydown": logEvent
|
||||||
});
|
});
|
||||||
buttonClick = events.extensions["buttonclick"];
|
buttonClick = events.extensions["buttonclick"];
|
||||||
|
|
||||||
@@ -111,12 +112,26 @@
|
|||||||
t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click IE");
|
t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click IE");
|
||||||
|
|
||||||
// rightclick
|
// rightclick
|
||||||
log = []
|
log = [];
|
||||||
trigger({type: "mousedown", button: 2});
|
trigger({type: "mousedown", button: 2});
|
||||||
trigger({type: "mouseup", button: 2});
|
trigger({type: "mouseup", button: 2});
|
||||||
t.eq(log.length, 2, "two events fired for rightclick");
|
t.eq(log.length, 2, "two events fired for rightclick");
|
||||||
t.eq(log[0].type, "mousedown", "mousedown from rightclick goes through");
|
t.eq(log[0].type, "mousedown", "mousedown from rightclick goes through");
|
||||||
t.eq(log[1].type, "mouseup", "mouseup from rightclick goes through");
|
t.eq(log[1].type, "mouseup", "mouseup from rightclick goes through");
|
||||||
|
|
||||||
|
// keydown RETURN
|
||||||
|
log = [];
|
||||||
|
trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_RETURN});
|
||||||
|
trigger({type: "click"});
|
||||||
|
t.eq(log.length, 1, "one event fired for RETURN keydown");
|
||||||
|
t.eq(log[0].type, "buttonclick", "buttonclick for RETURN keydown");
|
||||||
|
|
||||||
|
// keydown SPACE
|
||||||
|
log = [];
|
||||||
|
trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_SPACE});
|
||||||
|
trigger({type: "click"});
|
||||||
|
t.eq(log.length, 1, "one event fired for SPACE keydown");
|
||||||
|
t.eq(log[0].type, "buttonclick", "buttonclick for SPACE keydown");
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
Reference in New Issue
Block a user