65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
import { OHIF } from 'meteor/ohif:core';
|
|
|
|
export class HotkeysContext {
|
|
constructor(name, definitions, enabled) {
|
|
this.name = name;
|
|
this.definitions = Object.assign({}, definitions);
|
|
this.enabled = enabled;
|
|
}
|
|
|
|
extend(definitions={}) {
|
|
if (typeof definitions !== 'object') return;
|
|
this.definitions = Object.assign({}, definitions);
|
|
Object.keys(definitions).forEach(command => {
|
|
const hotkey = definitions[command];
|
|
this.unregister(command);
|
|
if (hotkey) {
|
|
this.register(command, hotkey);
|
|
}
|
|
|
|
this.definitions[command] = hotkey;
|
|
});
|
|
}
|
|
|
|
register(command, hotkey) {
|
|
if (!hotkey) {
|
|
return;
|
|
}
|
|
|
|
if (!command) {
|
|
return OHIF.log.warn(`No command was defined for hotkey "${hotkey}"`);
|
|
}
|
|
|
|
const bindingKey = `keydown.hotkey.${this.name}.${command}`;
|
|
const bind = hotkey => $(document).bind(bindingKey, hotkey, event => {
|
|
if (!this.enabled.get()) return;
|
|
OHIF.commands.run(command);
|
|
});
|
|
|
|
if (hotkey instanceof Array) {
|
|
hotkey.forEach(hotkey => bind(hotkey));
|
|
} else {
|
|
bind(hotkey);
|
|
}
|
|
}
|
|
|
|
unregister(command) {
|
|
const bindingKey = `keydown.hotkey.${this.name}.${command}`;
|
|
if (this.definitions[command]) {
|
|
$(document).unbind(bindingKey);
|
|
delete this.definitions[command];
|
|
}
|
|
}
|
|
|
|
initialize() {
|
|
Object.keys(this.definitions).forEach(command => {
|
|
const hotkey = this.definitions[command];
|
|
this.register(command, hotkey);
|
|
});
|
|
}
|
|
|
|
destroy() {
|
|
$(document).unbind(`keydown.hotkey.${this.name}`);
|
|
}
|
|
}
|