aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/keyboardevent.rs
diff options
context:
space:
mode:
authorAvi Weinstock <aweinstock314@gmail.com>2015-05-03 13:07:45 -0400
committerAvi Weinstock <aweinstock314@gmail.com>2015-05-06 11:46:21 -0400
commit05877179447cfd4b33e7b8e17b7e8e5082d89cd8 (patch)
treebb50c9c129c461e224a5370a3e4a6930930ee50c /components/script/dom/keyboardevent.rs
parent29f83060897119dfc7fa07ff235263c56df25088 (diff)
downloadservo-05877179447cfd4b33e7b8e17b7e8e5082d89cd8.tar.gz
servo-05877179447cfd4b33e7b8e17b7e8e5082d89cd8.zip
Change the dispatch in TextInput::handle_keydown_aux match on enum values instead of strings.
Diffstat (limited to 'components/script/dom/keyboardevent.rs')
-rw-r--r--components/script/dom/keyboardevent.rs341
1 files changed, 167 insertions, 174 deletions
diff --git a/components/script/dom/keyboardevent.rs b/components/script/dom/keyboardevent.rs
index 557f66d6d12..d0ac71c814c 100644
--- a/components/script/dom/keyboardevent.rs
+++ b/components/script/dom/keyboardevent.rs
@@ -109,16 +109,11 @@ impl KeyboardEvent {
pub fn Constructor(global: GlobalRef,
type_: DOMString,
init: &KeyboardEventBinding::KeyboardEventInit) -> Fallible<Temporary<KeyboardEvent>> {
- let key = if let Some((key, _)) = key_from_string(init.key.as_slice()) {
- Some(key)
- } else {
- None
- };
let event = KeyboardEvent::new(global.as_window(), type_,
init.parent.parent.parent.bubbles,
init.parent.parent.parent.cancelable,
init.parent.parent.view.r(),
- init.parent.parent.detail, key,
+ init.parent.parent.detail, key_from_string(&init.key, init.location),
init.key.clone(), init.code.clone(), init.location,
init.repeat, init.isComposing, init.parent.ctrlKey,
init.parent.altKey, init.parent.shiftKey, init.parent.metaKey,
@@ -341,175 +336,173 @@ pub fn key_value(key: Key, mods: KeyModifiers) -> &'static str {
}
}
-pub fn key_from_string(key_string: &str) -> Option<(Key, KeyModifiers)> {
+fn key_from_string(key_string: &str, location: u32) -> Option<Key> {
match key_string {
- " " => Some((Key::Space, KeyModifiers::empty())),
- "\"" => Some((Key::Apostrophe, SHIFT)),
- "'" => Some((Key::Apostrophe, KeyModifiers::empty())),
- "<" => Some((Key::Comma, SHIFT)),
- "," => Some((Key::Comma, KeyModifiers::empty())),
- "_" => Some((Key::Minus, SHIFT)),
- "-" => Some((Key::Minus, KeyModifiers::empty())),
- ">" => Some((Key::Period, SHIFT)),
- "." => Some((Key::Period, KeyModifiers::empty())),
- "?" => Some((Key::Slash, SHIFT)),
- "/" => Some((Key::Slash, KeyModifiers::empty())),
- "~" => Some((Key::GraveAccent, SHIFT)),
- "`" => Some((Key::GraveAccent, KeyModifiers::empty())),
- ")" => Some((Key::Num0, SHIFT)),
- "0" => Some((Key::Num0, KeyModifiers::empty())),
- "!" => Some((Key::Num1, SHIFT)),
- "1" => Some((Key::Num1, KeyModifiers::empty())),
- "@" => Some((Key::Num2, SHIFT)),
- "2" => Some((Key::Num2, KeyModifiers::empty())),
- "#" => Some((Key::Num3, SHIFT)),
- "3" => Some((Key::Num3, KeyModifiers::empty())),
- "$" => Some((Key::Num4, SHIFT)),
- "4" => Some((Key::Num4, KeyModifiers::empty())),
- "%" => Some((Key::Num5, SHIFT)),
- "5" => Some((Key::Num5, KeyModifiers::empty())),
- "^" => Some((Key::Num6, SHIFT)),
- "6" => Some((Key::Num6, KeyModifiers::empty())),
- "&" => Some((Key::Num7, SHIFT)),
- "7" => Some((Key::Num7, KeyModifiers::empty())),
- "*" => Some((Key::Num8, SHIFT)),
- "8" => Some((Key::Num8, KeyModifiers::empty())),
- "(" => Some((Key::Num9, SHIFT)),
- "9" => Some((Key::Num9, KeyModifiers::empty())),
- ":" => Some((Key::Semicolon, SHIFT)),
- ";" => Some((Key::Semicolon, KeyModifiers::empty())),
- "+" => Some((Key::Equal, SHIFT)),
- "=" => Some((Key::Equal, KeyModifiers::empty())),
- "A" => Some((Key::A, SHIFT)),
- "a" => Some((Key::A, KeyModifiers::empty())),
- "B" => Some((Key::B, SHIFT)),
- "b" => Some((Key::B, KeyModifiers::empty())),
- "C" => Some((Key::C, SHIFT)),
- "c" => Some((Key::C, KeyModifiers::empty())),
- "D" => Some((Key::D, SHIFT)),
- "d" => Some((Key::D, KeyModifiers::empty())),
- "E" => Some((Key::E, SHIFT)),
- "e" => Some((Key::E, KeyModifiers::empty())),
- "F" => Some((Key::F, SHIFT)),
- "f" => Some((Key::F, KeyModifiers::empty())),
- "G" => Some((Key::G, SHIFT)),
- "g" => Some((Key::G, KeyModifiers::empty())),
- "H" => Some((Key::H, SHIFT)),
- "h" => Some((Key::H, KeyModifiers::empty())),
- "I" => Some((Key::I, SHIFT)),
- "i" => Some((Key::I, KeyModifiers::empty())),
- "J" => Some((Key::J, SHIFT)),
- "j" => Some((Key::J, KeyModifiers::empty())),
- "K" => Some((Key::K, SHIFT)),
- "k" => Some((Key::K, KeyModifiers::empty())),
- "L" => Some((Key::L, SHIFT)),
- "l" => Some((Key::L, KeyModifiers::empty())),
- "M" => Some((Key::M, SHIFT)),
- "m" => Some((Key::M, KeyModifiers::empty())),
- "N" => Some((Key::N, SHIFT)),
- "n" => Some((Key::N, KeyModifiers::empty())),
- "O" => Some((Key::O, SHIFT)),
- "o" => Some((Key::O, KeyModifiers::empty())),
- "P" => Some((Key::P, SHIFT)),
- "p" => Some((Key::P, KeyModifiers::empty())),
- "Q" => Some((Key::Q, SHIFT)),
- "q" => Some((Key::Q, KeyModifiers::empty())),
- "R" => Some((Key::R, SHIFT)),
- "r" => Some((Key::R, KeyModifiers::empty())),
- "S" => Some((Key::S, SHIFT)),
- "s" => Some((Key::S, KeyModifiers::empty())),
- "T" => Some((Key::T, SHIFT)),
- "t" => Some((Key::T, KeyModifiers::empty())),
- "U" => Some((Key::U, SHIFT)),
- "u" => Some((Key::U, KeyModifiers::empty())),
- "V" => Some((Key::V, SHIFT)),
- "v" => Some((Key::V, KeyModifiers::empty())),
- "W" => Some((Key::W, SHIFT)),
- "w" => Some((Key::W, KeyModifiers::empty())),
- "X" => Some((Key::X, SHIFT)),
- "x" => Some((Key::X, KeyModifiers::empty())),
- "Y" => Some((Key::Y, SHIFT)),
- "y" => Some((Key::Y, KeyModifiers::empty())),
- "Z" => Some((Key::Z, SHIFT)),
- "z" => Some((Key::Z, KeyModifiers::empty())),
- "{" => Some((Key::LeftBracket, SHIFT)),
- "[" => Some((Key::LeftBracket, KeyModifiers::empty())),
- "|" => Some((Key::Backslash, SHIFT)),
- "\\" => Some((Key::Backslash, KeyModifiers::empty())),
- "}" => Some((Key::RightBracket, SHIFT)),
- "]" => Some((Key::RightBracket, KeyModifiers::empty())),
- "Unidentified" => Some((Key::World1, KeyModifiers::empty())),
- /*"Unidentified" => Some((Key::World2, KeyModifiers::empty())),*/
- "Escape" => Some((Key::Escape, KeyModifiers::empty())),
- "Enter" => Some((Key::Enter, KeyModifiers::empty())),
- "Tab" => Some((Key::Tab, KeyModifiers::empty())),
- "Backspace" => Some((Key::Backspace, KeyModifiers::empty())),
- "Insert" => Some((Key::Insert, KeyModifiers::empty())),
- "Delete" => Some((Key::Delete, KeyModifiers::empty())),
- "ArrowRight" => Some((Key::Right, KeyModifiers::empty())),
- "ArrowLeft" => Some((Key::Left, KeyModifiers::empty())),
- "ArrowDown" => Some((Key::Down, KeyModifiers::empty())),
- "ArrowUp" => Some((Key::Up, KeyModifiers::empty())),
- "PageUp" => Some((Key::PageUp, KeyModifiers::empty())),
- "PageDown" => Some((Key::PageDown, KeyModifiers::empty())),
- "Home" => Some((Key::Home, KeyModifiers::empty())),
- "End" => Some((Key::End, KeyModifiers::empty())),
- "CapsLock" => Some((Key::CapsLock, KeyModifiers::empty())),
- "ScrollLock" => Some((Key::ScrollLock, KeyModifiers::empty())),
- "NumLock" => Some((Key::NumLock, KeyModifiers::empty())),
- "PrintScreen" => Some((Key::PrintScreen, KeyModifiers::empty())),
- "Pause" => Some((Key::Pause, KeyModifiers::empty())),
- "F1" => Some((Key::F1, KeyModifiers::empty())),
- "F2" => Some((Key::F2, KeyModifiers::empty())),
- "F3" => Some((Key::F3, KeyModifiers::empty())),
- "F4" => Some((Key::F4, KeyModifiers::empty())),
- "F5" => Some((Key::F5, KeyModifiers::empty())),
- "F6" => Some((Key::F6, KeyModifiers::empty())),
- "F7" => Some((Key::F7, KeyModifiers::empty())),
- "F8" => Some((Key::F8, KeyModifiers::empty())),
- "F9" => Some((Key::F9, KeyModifiers::empty())),
- "F10" => Some((Key::F10, KeyModifiers::empty())),
- "F11" => Some((Key::F11, KeyModifiers::empty())),
- "F12" => Some((Key::F12, KeyModifiers::empty())),
- "F13" => Some((Key::F13, KeyModifiers::empty())),
- "F14" => Some((Key::F14, KeyModifiers::empty())),
- "F15" => Some((Key::F15, KeyModifiers::empty())),
- "F16" => Some((Key::F16, KeyModifiers::empty())),
- "F17" => Some((Key::F17, KeyModifiers::empty())),
- "F18" => Some((Key::F18, KeyModifiers::empty())),
- "F19" => Some((Key::F19, KeyModifiers::empty())),
- "F20" => Some((Key::F20, KeyModifiers::empty())),
- "F21" => Some((Key::F21, KeyModifiers::empty())),
- "F22" => Some((Key::F22, KeyModifiers::empty())),
- "F23" => Some((Key::F23, KeyModifiers::empty())),
- "F24" => Some((Key::F24, KeyModifiers::empty())),
- "F25" => Some((Key::F25, KeyModifiers::empty())),
- /*"0" => Some((Key::Kp0, KeyModifiers::empty())),
- "1" => Some((Key::Kp1, KeyModifiers::empty())),
- "2" => Some((Key::Kp2, KeyModifiers::empty())),
- "3" => Some((Key::Kp3, KeyModifiers::empty())),
- "4" => Some((Key::Kp4, KeyModifiers::empty())),
- "5" => Some((Key::Kp5, KeyModifiers::empty())),
- "6" => Some((Key::Kp6, KeyModifiers::empty())),
- "7" => Some((Key::Kp7, KeyModifiers::empty())),
- "8" => Some((Key::Kp8, KeyModifiers::empty())),
- "9" => Some((Key::Kp9, KeyModifiers::empty())),
- "." => Some((Key::KpDecimal, KeyModifiers::empty())),
- "/" => Some((Key::KpDivide, KeyModifiers::empty())),
- "*" => Some((Key::KpMultiply, KeyModifiers::empty())),
- "-" => Some((Key::KpSubtract, KeyModifiers::empty())),
- "+" => Some((Key::KpAdd, KeyModifiers::empty())),
- "Enter" => Some((Key::KpEnter, KeyModifiers::empty())),
- "=" => Some((Key::KpEqual, KeyModifiers::empty())),*/
- "Shift" => Some((Key::LeftShift, SHIFT)),
- "Control" => Some((Key::LeftControl, CONTROL)),
- "Alt" => Some((Key::LeftAlt, ALT)),
- "Super" => Some((Key::LeftSuper, SUPER)),
- /*"Shift" => Some((Key::RightShift, SHIFT)),
- "Control" => Some((Key::RightControl, CONTROL)),
- "Alt" => Some((Key::RightAlt, ALT)),
- "Super" => Some((Key::RightSuper, SUPER)),*/
- "ContextMenu" => Some((Key::Menu, KeyModifiers::empty())),
+ " " => Some(Key::Space),
+ "\"" => Some(Key::Apostrophe),
+ "'" => Some(Key::Apostrophe),
+ "<" => Some(Key::Comma),
+ "," => Some(Key::Comma),
+ "_" => Some(Key::Minus),
+ "-" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Minus),
+ ">" => Some(Key::Period),
+ "." if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Period),
+ "?" => Some(Key::Slash),
+ "/" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Slash),
+ "~" => Some(Key::GraveAccent),
+ "`" => Some(Key::GraveAccent),
+ ")" => Some(Key::Num0),
+ "0" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num0),
+ "!" => Some(Key::Num1),
+ "1" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num1),
+ "@" => Some(Key::Num2),
+ "2" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num2),
+ "#" => Some(Key::Num3),
+ "3" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num3),
+ "$" => Some(Key::Num4),
+ "4" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num4),
+ "%" => Some(Key::Num5),
+ "5" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num5),
+ "^" => Some(Key::Num6),
+ "6" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num6),
+ "&" => Some(Key::Num7),
+ "7" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num7),
+ "*" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num8),
+ "8" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num8),
+ "(" => Some(Key::Num9),
+ "9" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Num9),
+ ":" => Some(Key::Semicolon),
+ ";" => Some(Key::Semicolon),
+ "+" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Equal),
+ "=" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Equal),
+ "A" => Some(Key::A),
+ "a" => Some(Key::A),
+ "B" => Some(Key::B),
+ "b" => Some(Key::B),
+ "C" => Some(Key::C),
+ "c" => Some(Key::C),
+ "D" => Some(Key::D),
+ "d" => Some(Key::D),
+ "E" => Some(Key::E),
+ "e" => Some(Key::E),
+ "F" => Some(Key::F),
+ "f" => Some(Key::F),
+ "G" => Some(Key::G),
+ "g" => Some(Key::G),
+ "H" => Some(Key::H),
+ "h" => Some(Key::H),
+ "I" => Some(Key::I),
+ "i" => Some(Key::I),
+ "J" => Some(Key::J),
+ "j" => Some(Key::J),
+ "K" => Some(Key::K),
+ "k" => Some(Key::K),
+ "L" => Some(Key::L),
+ "l" => Some(Key::L),
+ "M" => Some(Key::M),
+ "m" => Some(Key::M),
+ "N" => Some(Key::N),
+ "n" => Some(Key::N),
+ "O" => Some(Key::O),
+ "o" => Some(Key::O),
+ "P" => Some(Key::P),
+ "p" => Some(Key::P),
+ "Q" => Some(Key::Q),
+ "q" => Some(Key::Q),
+ "R" => Some(Key::R),
+ "r" => Some(Key::R),
+ "S" => Some(Key::S),
+ "s" => Some(Key::S),
+ "T" => Some(Key::T),
+ "t" => Some(Key::T),
+ "U" => Some(Key::U),
+ "u" => Some(Key::U),
+ "V" => Some(Key::V),
+ "v" => Some(Key::V),
+ "W" => Some(Key::W),
+ "w" => Some(Key::W),
+ "X" => Some(Key::X),
+ "x" => Some(Key::X),
+ "Y" => Some(Key::Y),
+ "y" => Some(Key::Y),
+ "Z" => Some(Key::Z),
+ "z" => Some(Key::Z),
+ "{" => Some(Key::LeftBracket),
+ "[" => Some(Key::LeftBracket),
+ "|" => Some(Key::Backslash),
+ "\\" => Some(Key::Backslash),
+ "}" => Some(Key::RightBracket),
+ "]" => Some(Key::RightBracket),
+ "Escape" => Some(Key::Escape),
+ "Enter" if location == KeyboardEventConstants::DOM_KEY_LOCATION_STANDARD => Some(Key::Enter),
+ "Tab" => Some(Key::Tab),
+ "Backspace" => Some(Key::Backspace),
+ "Insert" => Some(Key::Insert),
+ "Delete" => Some(Key::Delete),
+ "ArrowRight" => Some(Key::Right),
+ "ArrowLeft" => Some(Key::Left),
+ "ArrowDown" => Some(Key::Down),
+ "ArrowUp" => Some(Key::Up),
+ "PageUp" => Some(Key::PageUp),
+ "PageDown" => Some(Key::PageDown),
+ "Home" => Some(Key::Home),
+ "End" => Some(Key::End),
+ "CapsLock" => Some(Key::CapsLock),
+ "ScrollLock" => Some(Key::ScrollLock),
+ "NumLock" => Some(Key::NumLock),
+ "PrintScreen" => Some(Key::PrintScreen),
+ "Pause" => Some(Key::Pause),
+ "F1" => Some(Key::F1),
+ "F2" => Some(Key::F2),
+ "F3" => Some(Key::F3),
+ "F4" => Some(Key::F4),
+ "F5" => Some(Key::F5),
+ "F6" => Some(Key::F6),
+ "F7" => Some(Key::F7),
+ "F8" => Some(Key::F8),
+ "F9" => Some(Key::F9),
+ "F10" => Some(Key::F10),
+ "F11" => Some(Key::F11),
+ "F12" => Some(Key::F12),
+ "F13" => Some(Key::F13),
+ "F14" => Some(Key::F14),
+ "F15" => Some(Key::F15),
+ "F16" => Some(Key::F16),
+ "F17" => Some(Key::F17),
+ "F18" => Some(Key::F18),
+ "F19" => Some(Key::F19),
+ "F20" => Some(Key::F20),
+ "F21" => Some(Key::F21),
+ "F22" => Some(Key::F22),
+ "F23" => Some(Key::F23),
+ "F24" => Some(Key::F24),
+ "F25" => Some(Key::F25),
+ "0" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp0),
+ "1" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp1),
+ "2" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp2),
+ "3" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp3),
+ "4" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp4),
+ "5" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp5),
+ "6" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp6),
+ "7" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp7),
+ "8" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp8),
+ "9" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::Kp9),
+ "." if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpDecimal),
+ "/" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpDivide),
+ "*" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpMultiply),
+ "-" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpSubtract),
+ "+" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpAdd),
+ "Enter" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpEnter),
+ "=" if location == KeyboardEventConstants::DOM_KEY_LOCATION_NUMPAD => Some(Key::KpEqual),
+ "Shift" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT => Some(Key::LeftShift),
+ "Control" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT => Some(Key::LeftControl),
+ "Alt" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT => Some(Key::LeftAlt),
+ "Super" if location == KeyboardEventConstants::DOM_KEY_LOCATION_LEFT => Some(Key::LeftSuper),
+ "Shift" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT => Some(Key::RightShift),
+ "Control" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT => Some(Key::RightControl),
+ "Alt" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT => Some(Key::RightAlt),
+ "Super" if location == KeyboardEventConstants::DOM_KEY_LOCATION_RIGHT => Some(Key::RightSuper),
+ "ContextMenu" => Some(Key::Menu),
_ => None
}
}