51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
define(require => {
|
|
const {debounce} = require('/js/toolbox');
|
|
const {CodeMirror} = require('./codemirror-factory');
|
|
const editor = require('./editor');
|
|
|
|
// reroute handling to nearest editor when keypress resolves to one of these commands
|
|
const REROUTED = new Set([
|
|
'beautify',
|
|
'colorpicker',
|
|
'find',
|
|
'findNext',
|
|
'findPrev',
|
|
'jumpToLine',
|
|
'nextEditor',
|
|
'prevEditor',
|
|
'replace',
|
|
'replaceAll',
|
|
'save',
|
|
'toggleEditorFocus',
|
|
'toggleStyle',
|
|
]);
|
|
|
|
return function rerouteHotkeys(enable, immediately) {
|
|
if (!immediately) {
|
|
debounce(rerouteHotkeys, 0, enable, true);
|
|
} else {
|
|
document[enable ? 'on' : 'off']('keydown', rerouteHandler);
|
|
}
|
|
};
|
|
|
|
function rerouteHandler(event) {
|
|
const keyName = CodeMirror.keyName(event);
|
|
if (!keyName) {
|
|
return;
|
|
}
|
|
const rerouteCommand = name => {
|
|
if (REROUTED.has(name)) {
|
|
CodeMirror.commands[name](editor.closestVisible(event.target));
|
|
return true;
|
|
}
|
|
};
|
|
if (CodeMirror.lookupKey(keyName, CodeMirror.defaults.keyMap, rerouteCommand) === 'handled' ||
|
|
CodeMirror.lookupKey(keyName, CodeMirror.defaults.extraKeys, rerouteCommand) === 'handled') {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
}
|
|
}
|
|
});
|