Skip to content

Commit 223f47f

Browse files
authored
Use in events key and fallback to keyCode (#1394)
1 parent 34ab10f commit 223f47f

File tree

4 files changed

+122
-20
lines changed

4 files changed

+122
-20
lines changed

src/events.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import setupModeHandler from './lib/mode_handler.js';
2-
import getFeaturesAndSetCursor from './lib/get_features_and_set_cursor.js';
1+
import * as Constants from './constants.js';
2+
import * as CommonSelectors from './lib/common_selectors.js';
33
import featuresAt from './lib/features_at.js';
4+
import getFeaturesAndSetCursor from './lib/get_features_and_set_cursor.js';
45
import isClick from './lib/is_click.js';
56
import isTap from './lib/is_tap.js';
6-
import * as Constants from './constants.js';
7+
import setupModeHandler from './lib/mode_handler.js';
78
import objectToMode from './modes/object_to_mode.js';
89

910
export default function(ctx) {
@@ -120,30 +121,33 @@ export default function(ctx) {
120121
}
121122
};
122123

123-
// 8 - Backspace
124-
// 46 - Delete
125-
const isKeyModeValid = code => !(code === 8 || code === 46 || (code >= 48 && code <= 57));
124+
const isKeyModeValid = (event) => {
125+
const isBackspaceKey = CommonSelectors.isBackspaceKey(event);
126+
const isDeleteKey = CommonSelectors.isDeleteKey(event);
127+
const isDigitKey = CommonSelectors.isDigitKey(event);
128+
return !(isBackspaceKey || isDeleteKey || isDigitKey);
129+
};
126130

127131
events.keydown = function(event) {
128132
const isMapElement = (event.srcElement || event.target).classList.contains(Constants.classes.CANVAS);
129133
if (!isMapElement) return; // we only handle events on the map
130134

131-
if ((event.keyCode === 8 || event.keyCode === 46) && ctx.options.controls.trash) {
135+
if ((CommonSelectors.isBackspaceKey(event) || CommonSelectors.isDeleteKey(event)) && ctx.options.controls.trash) {
132136
event.preventDefault();
133137
currentMode.trash();
134-
} else if (isKeyModeValid(event.keyCode)) {
138+
} else if (isKeyModeValid(event)) {
135139
currentMode.keydown(event);
136-
} else if (event.keyCode === 49 && ctx.options.controls.point) {
140+
} else if (CommonSelectors.isDigit1Key(event) && ctx.options.controls.point) {
137141
changeMode(Constants.modes.DRAW_POINT);
138-
} else if (event.keyCode === 50 && ctx.options.controls.line_string) {
142+
} else if (CommonSelectors.isDigit2Key(event) && ctx.options.controls.line_string) {
139143
changeMode(Constants.modes.DRAW_LINE_STRING);
140-
} else if (event.keyCode === 51 && ctx.options.controls.polygon) {
144+
} else if (CommonSelectors.isDigit3Key(event) && ctx.options.controls.polygon) {
141145
changeMode(Constants.modes.DRAW_POLYGON);
142146
}
143147
};
144148

145149
events.keyup = function(event) {
146-
if (isKeyModeValid(event.keyCode)) {
150+
if (isKeyModeValid(event)) {
147151
currentMode.keyup(event);
148152
}
149153
};

src/lib/common_selectors.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,37 @@ export function isShiftDown(e) {
5252
}
5353

5454
export function isEscapeKey(e) {
55-
return e.keyCode === 27;
55+
return e.key === 'Escape' || e.keyCode === 27;
5656
}
5757

5858
export function isEnterKey(e) {
59-
return e.keyCode === 13;
59+
return e.key === 'Enter' || e.keyCode === 13;
60+
}
61+
62+
export function isBackspaceKey(e) {
63+
return e.key === 'Backspace' || e.keyCode === 8;
64+
}
65+
66+
export function isDeleteKey(e) {
67+
return e.key === 'Delete' || e.keyCode === 46;
68+
}
69+
70+
export function isDigit1Key(e) {
71+
return e.key === '1' || e.keyCode === 49;
72+
}
73+
74+
export function isDigit2Key(e) {
75+
return e.key === '2' || e.keyCode === 50;
76+
}
77+
78+
export function isDigit3Key(e) {
79+
return e.key === '3' || e.keyCode === 51;
80+
}
81+
82+
export function isDigitKey(e) {
83+
const key = e.key || String.fromCharCode(e.keyCode);
84+
const isDigitKey = key >= '0' && key <= '9';
85+
return isDigitKey;
6086
}
6187

6288
export function isTrue() {

test/common_selectors.test.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ test('commonSelectors.isEscapeKey', () => {
232232
assert.equal(commonSelectors.isEscapeKey({
233233
originalEvent: {}
234234
}), false);
235+
236+
assert.equal(commonSelectors.isEscapeKey({
237+
key: 'Escape'
238+
}), true);
235239
});
236240

237241
test('commonSelectors.isEnterKey', () => {
@@ -246,6 +250,74 @@ test('commonSelectors.isEnterKey', () => {
246250
assert.equal(commonSelectors.isEnterKey({
247251
originalEvent: {}
248252
}), false);
253+
254+
assert.equal(commonSelectors.isEnterKey({
255+
key: 'Enter'
256+
}), true);
257+
258+
assert.equal(commonSelectors.isEnterKey({
259+
key: 'Escape'
260+
}), false);
261+
});
262+
263+
test('commonSelectors.isBackspaceKey', () => {
264+
assert.ok(commonSelectors.isBackspaceKey({ keyCode: 8 }));
265+
assert.ok(commonSelectors.isBackspaceKey({ key: 'Backspace' }));
266+
267+
assert.equal(commonSelectors.isBackspaceKey({ keyCode: 27 }), false);
268+
assert.equal(commonSelectors.isBackspaceKey({ key: 'Escape' }), false);
269+
});
270+
271+
test('commonSelectors.isDeleteKey', () => {
272+
assert.ok(commonSelectors.isDeleteKey({ keyCode: 46 }));
273+
assert.ok(commonSelectors.isDeleteKey({ key: 'Delete' }));
274+
275+
assert.equal(commonSelectors.isDeleteKey({ keyCode: 27 }), false);
276+
assert.equal(commonSelectors.isDeleteKey({ key: 'Escape' }), false);
277+
});
278+
279+
test('commonSelectors.isDigit1Key', () => {
280+
assert.ok(commonSelectors.isDigit1Key({ keyCode: 49 }));
281+
assert.ok(commonSelectors.isDigit1Key({ key: '1' }));
282+
283+
assert.equal(commonSelectors.isDigit1Key({ keyCode: 50 }), false);
284+
assert.equal(commonSelectors.isDigit1Key({ key: '2' }), false);
285+
});
286+
287+
test('commonSelectors.isDigit2Key', () => {
288+
assert.ok(commonSelectors.isDigit2Key({ keyCode: 50 }));
289+
assert.ok(commonSelectors.isDigit2Key({ key: '2' }));
290+
291+
assert.equal(commonSelectors.isDigit2Key({ keyCode: 51 }), false);
292+
assert.equal(commonSelectors.isDigit2Key({ key: '3' }), false);
293+
});
294+
295+
test('commonSelectors.isDigit3Key', () => {
296+
assert.ok(commonSelectors.isDigit3Key({ keyCode: 51 }));
297+
assert.ok(commonSelectors.isDigit3Key({ key: '3' }));
298+
299+
assert.equal(commonSelectors.isDigit3Key({ keyCode: 49 }), false);
300+
assert.equal(commonSelectors.isDigit3Key({ key: '1' }), false);
301+
});
302+
303+
test('commonSelectors.isDigitKey', () => {
304+
const keyCode0 = 48;
305+
assert.ok(commonSelectors.isDigitKey({ keyCode: keyCode0 }));
306+
assert.ok(commonSelectors.isDigitKey({ key: '0' }));
307+
308+
const keyCode2 = 50;
309+
assert.ok(commonSelectors.isDigitKey({ keyCode: keyCode2 }));
310+
assert.ok(commonSelectors.isDigitKey({ key: '2' }));
311+
312+
const keyCode9 = 57;
313+
assert.ok(commonSelectors.isDigitKey({ keyCode: keyCode9 }));
314+
assert.ok(commonSelectors.isDigitKey({ key: '9' }));
315+
316+
assert.equal(commonSelectors.isDigitKey({ keyCode: 47 }), false);
317+
assert.equal(commonSelectors.isDigitKey({ key: '/' }), false);
318+
319+
assert.equal(commonSelectors.isDigitKey({ keyCode: 58 }), false);
320+
assert.equal(commonSelectors.isDigitKey({ key: ':' }), false);
249321
});
250322

251323
test('commonSelectors.true', () => {

test/utils/key_events.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,30 @@ classList.contains = function(cls) {
88

99
export const enterEvent = createSyntheticEvent('keyup', {
1010
srcElement: { classList },
11-
keyCode: 13
11+
key: 'Enter'
1212
});
1313

1414
export const startPointEvent = createSyntheticEvent('keydown', {
1515
srcElement: { classList },
16-
keyCode: 49
16+
key: '1'
1717
});
1818

1919
export const startLineStringEvent = createSyntheticEvent('keydown', {
2020
srcElement: { classList },
21-
keyCode: 50
21+
key: '2'
2222
});
2323

2424
export const startPolygonEvent = createSyntheticEvent('keydown', {
2525
srcElement: { classList },
26-
keyCode: 51
26+
key: '3'
2727
});
2828

2929
export const escapeEvent = createSyntheticEvent('keyup', {
3030
srcElement: { classList },
31-
keyCode: 27
31+
key: 'Escape'
3232
});
3333

3434
export const backspaceEvent = createSyntheticEvent('keydown', {
3535
srcElement: { classList },
36-
keyCode: 8
36+
key: 'Backspace'
3737
});

0 commit comments

Comments
 (0)