mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-26 10:13:38 +08:00
3e738b1471
- Fixed some keybindings not running as expected, due to some editor defaults overriding or further actions taking place since the action would not indicate it's been dealt with (by returning boolean). - Fixed spacing/border-radius being used on codeblocks on non-intended areas like the MD editor. - Fixed lack of BG on default light theme, visible on full screen md editor. - Fixed error thrown when the user does not have access to change the current editor (Likely non-cm related existing issue)
64 lines
2.2 KiB
JavaScript
64 lines
2.2 KiB
JavaScript
/**
|
|
* Provide shortcuts for the editor instance.
|
|
* @param {MarkdownEditor} editor
|
|
* @returns {Object<String, Function>}
|
|
*/
|
|
function provide(editor) {
|
|
const shortcuts = {};
|
|
|
|
// Insert Image shortcut
|
|
shortcuts['Shift-Mod-i'] = cm => editor.actions.insertImage();
|
|
|
|
// Save draft
|
|
shortcuts['Mod-s'] = cm => window.$events.emit('editor-save-draft');
|
|
|
|
// Save page
|
|
shortcuts['Mod-Enter'] = cm => window.$events.emit('editor-save-page');
|
|
|
|
// Show link selector
|
|
shortcuts['Shift-Mod-k'] = cm => editor.actions.showLinkSelector();
|
|
|
|
// Insert Link
|
|
shortcuts['Mod-k'] = cm => editor.actions.insertLink();
|
|
|
|
// FormatShortcuts
|
|
shortcuts['Mod-1'] = cm => editor.actions.replaceLineStart('##');
|
|
shortcuts['Mod-2'] = cm => editor.actions.replaceLineStart('###');
|
|
shortcuts['Mod-3'] = cm => editor.actions.replaceLineStart('####');
|
|
shortcuts['Mod-4'] = cm => editor.actions.replaceLineStart('#####');
|
|
shortcuts['Mod-5'] = cm => editor.actions.replaceLineStart('');
|
|
shortcuts['Mod-d'] = cm => editor.actions.replaceLineStart('');
|
|
shortcuts['Mod-6'] = cm => editor.actions.replaceLineStart('>');
|
|
shortcuts['Mod-q'] = cm => editor.actions.replaceLineStart('>');
|
|
shortcuts['Mod-7'] = cm => editor.actions.wrapSelection('\n```\n', '\n```');
|
|
shortcuts['Mod-8'] = cm => editor.actions.wrapSelection('`', '`');
|
|
shortcuts['Shift-Mod-e'] = cm => editor.actions.wrapSelection('`', '`');
|
|
shortcuts['Mod-9'] = cm => editor.actions.cycleCalloutTypeAtSelection();
|
|
shortcuts['Mod-p'] = cm => editor.actions.replaceLineStart('-')
|
|
shortcuts['Mod-o'] = cm => editor.actions.replaceLineStartForOrderedList()
|
|
|
|
return shortcuts;
|
|
}
|
|
|
|
/**
|
|
* Get the editor shortcuts in CodeMirror keybinding format.
|
|
* @param {MarkdownEditor} editor
|
|
* @return {{key: String, run: function, preventDefault: boolean}[]}
|
|
*/
|
|
export function provideKeyBindings(editor) {
|
|
const shortcuts= provide(editor);
|
|
const keyBindings = [];
|
|
|
|
const wrapAction = (action) => {
|
|
return () => {
|
|
action();
|
|
return true;
|
|
};
|
|
};
|
|
|
|
for (const [shortcut, action] of Object.entries(shortcuts)) {
|
|
keyBindings.push({key: shortcut, run: wrapAction(action), preventDefault: true});
|
|
}
|
|
|
|
return keyBindings;
|
|
} |