// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Handles user keyboard input events.
*/
import {TestImportManager} from '/common/testing/test_import_manager.js';
import {Command} from './command.js';
import {KeyMap} from './key_map.js';
import {KeyUtil} from './key_util.js';
export namespace ChromeVoxKbHandler {
/** The key map */
export const handlerKeyMap = KeyMap.get();
/**
* Handler for ChromeVox commands. Returns undefined if the command does not
* exist. Otherwise, returns the result of executing the command.
*/
export let commandHandler: (command: Command) => (boolean | undefined);
/**
* Handles key down events.
*
* @param evt The key down event to process.
* @return True if the default action should be performed.
*/
export const basicKeyDownActionsListener = function(evt: KeyboardEvent):
boolean {
const keySequence = KeyUtil.keyEventToKeySequence(evt);
const functionName =
ChromeVoxKbHandler.handlerKeyMap.commandForKey(keySequence);
// TODO (clchen): Disambiguate why functions are null. If the user
// pressed something that is not a valid combination, make an error
// noise so there is some feedback.
if (!functionName) {
return !KeyUtil.sequencing;
}
// This is the key event handler return value - true if the event should
// propagate and the default action should be performed, false if we eat
// the key.
let returnValue = true;
const commandResult = ChromeVoxKbHandler.commandHandler(functionName);
if (commandResult !== undefined) {
returnValue = commandResult;
} else if (keySequence.cvoxModifier) {
// Modifier/prefix is active -- prevent default action
returnValue = false;
}
return returnValue;
};
}
TestImportManager.exportForTesting(['ChromeVoxKbHandler', ChromeVoxKbHandler]);