]> BookStack Code Mirror - bookstack/blob - resources/js/wysiwyg/shortcuts.js
Added a custom link context toolbar
[bookstack] / resources / js / wysiwyg / shortcuts.js
1 /**
2  * @param {Editor} editor
3  */
4 export function register(editor) {
5     // Headers
6     for (let i = 1; i < 5; i++) {
7         editor.shortcuts.add('meta+' + i, '', ['FormatBlock', false, 'h' + (i+1)]);
8     }
9
10     // Other block shortcuts
11     editor.shortcuts.add('meta+5', '', ['FormatBlock', false, 'p']);
12     editor.shortcuts.add('meta+d', '', ['FormatBlock', false, 'p']);
13     editor.shortcuts.add('meta+6', '', ['FormatBlock', false, 'blockquote']);
14     editor.shortcuts.add('meta+q', '', ['FormatBlock', false, 'blockquote']);
15     editor.shortcuts.add('meta+7', '', ['codeeditor', false, 'pre']);
16     editor.shortcuts.add('meta+e', '', ['codeeditor', false, 'pre']);
17     editor.shortcuts.add('meta+8', '', ['FormatBlock', false, 'code']);
18     editor.shortcuts.add('meta+shift+E', '', ['FormatBlock', false, 'code']);
19
20     // Save draft shortcut
21     editor.shortcuts.add('meta+S', '', () => {
22         window.$events.emit('editor-save-draft');
23     });
24
25     // Save page shortcut
26     editor.shortcuts.add('meta+13', '', () => {
27         window.$events.emit('editor-save-page');
28     });
29
30     // Loop through callout styles
31     editor.shortcuts.add('meta+9', '', function() {
32         const selectedNode = editor.selection.getNode();
33         const callout = selectedNode ? selectedNode.closest('.callout') : null;
34
35         const formats = ['info', 'success', 'warning', 'danger'];
36         const currentFormatIndex = formats.findIndex(format => callout && callout.classList.contains(format));
37         const newFormatIndex = (currentFormatIndex + 1) % formats.length;
38         const newFormat = formats[newFormatIndex];
39
40         editor.formatter.apply('callout' + newFormat);
41     });
42
43     // Link selector shortcut
44     editor.shortcuts.add('meta+shift+K', '', function() {
45         window.EntitySelectorPopup.show(function(entity) {
46
47             if (editor.selection.isCollapsed()) {
48                 editor.insertContent(editor.dom.createHTML('a', {href: entity.link}, editor.dom.encode(entity.name)));
49             } else {
50                 editor.formatter.apply('link', {href: entity.link});
51             }
52
53             editor.selection.collapse(false);
54             editor.focus();
55         })
56     });
57 }