mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-15 04:45:06 +01:00
38 lines
No EOL
1.2 KiB
JavaScript
38 lines
No EOL
1.2 KiB
JavaScript
import Mousetrap from 'mousetrap';
|
|
import DefaultKeymap from './keymaps/default';
|
|
|
|
import {createToken} from "bus";
|
|
import {TOKENS as ACTION_TOKENS} from "../actions/actionSystemPlugin";
|
|
import {isMenuAction, TOKENS as MENU_TOKENS} from "../dom/menu/menuPlugin";
|
|
|
|
export function activate({bus, services}) {
|
|
bus.enableState(TOKENS.KEYMAP, 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);
|
|
let actionToken = ACTION_TOKENS.actionRun(action);
|
|
Mousetrap.bind(keymap[action], () => bus.dispatch(actionToken, dataProvider ? dataProvider() : undefined));
|
|
}
|
|
Mousetrap.bind('esc', () => bus.dispatch(MENU_TOKENS.CLOSE_ALL));
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
export const TOKENS = {
|
|
KEYMAP: createToken('keymap')
|
|
}; |