jsketcher/web/app/cad/keyboard/keyboardBundle.js
2022-08-14 20:48:44 -07:00

36 lines
1,023 B
JavaScript

import Mousetrap from 'mousetrap';
import DefaultKeymap from './keymaps/default';
import {isMenuAction} from '../dom/menu/menuBundle';
import {state} from 'lstream';
export const BundleName = "@Keyboard";
export function activate(ctx) {
const {services, streams} = ctx;
streams.ui.keymap = state(DefaultKeymap);
let keymap = DefaultKeymap;
//to attach to a dom element: Mousetrap(domElement).bind(...
for (let action of Object.keys(keymap)) {
const dataProvider = getDataProvider(action, services);
Mousetrap.bind(keymap[action], () => ctx.actionService.run(action, dataProvider ? dataProvider() : undefined));
}
Mousetrap.bind('esc', services.menu.closeAll)
}
function getDataProvider(action, services) {
if (isMenuAction(action)) {
return function() {
let {left, top, width, height} = services.dom.viewerContainer.getBoundingClientRect();
return {
x: left + width * 0.5,
y: top + height * 0.5,
centered: true
}
}
}
return null;
}