@readium/navigator
Version:
Next generation SDK for publications in Web Apps
54 lines (44 loc) • 1.91 kB
text/typescript
import {
KeyCombinationManager,
ActivityEventDispatcher,
KeyboardPeripheral
} from "@readium/navigator-html-injectables";
export const NAVIGATOR_KEYBOARD_PERIPHERAL_EVENT = "readium:navigator:keyboardPeripheral";
export interface KeyboardPeripheralOptions {
/** Array of keyboard peripherals to configure */
keyboardPeripherals?: KeyboardPeripheral[];
}
export class KeyboardPeripherals {
private keydownHandler?: (event: KeyboardEvent) => void;
private keyManager = new KeyCombinationManager();
constructor(options: KeyboardPeripheralOptions = {}) {
this.setupKeyboardPeripherals(options.keyboardPeripherals || []);
}
private setupKeyboardPeripherals(keyboardPeripherals: KeyboardPeripheral[]) {
if (keyboardPeripherals.length > 0) {
// Create activity event dispatcher
const dispatcher: ActivityEventDispatcher = (activityEvent) => {
const customEvent = new CustomEvent(NAVIGATOR_KEYBOARD_PERIPHERAL_EVENT, {
detail: activityEvent
});
window.dispatchEvent(customEvent);
};
// Create unified handler using the provided keyboard peripherals
this.keydownHandler = this.keyManager.createUnifiedHandler(
"", // Empty string as target frame source for main window
keyboardPeripherals,
dispatcher
);
if (this.keydownHandler) {
document.addEventListener("keydown", this.keydownHandler, true);
}
}
window.addEventListener("unload", () => this.destroy());
}
public destroy() {
if (this.keydownHandler) {
document.removeEventListener("keydown", this.keydownHandler, true);
this.keydownHandler = undefined;
}
}
}