]> BookStack Code Mirror - bookstack/blob - resources/js/wysiwyg-tinymce/shortcuts.js
Lexical: Added about button/view
[bookstack] / resources / js / wysiwyg-tinymce / 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     editor.shortcuts.add('meta+o', '', 'InsertOrderedList');
20     editor.shortcuts.add('meta+p', '', 'InsertUnorderedList');
21
22     // Save draft shortcut
23     editor.shortcuts.add('meta+S', '', () => {
24         window.$events.emit('editor-save-draft');
25     });
26
27     // Save page shortcut
28     editor.shortcuts.add('meta+13', '', () => {
29         window.$events.emit('editor-save-page');
30     });
31
32     // Loop through callout styles
33     editor.shortcuts.add('meta+9', '', () => {
34         const selectedNode = editor.selection.getNode();
35         const callout = selectedNode ? selectedNode.closest('.callout') : null;
36
37         const formats = ['info', 'success', 'warning', 'danger'];
38         const currentFormatIndex = formats.findIndex(format => {
39             return callout && callout.classList.contains(format);
40         });
41         const newFormatIndex = (currentFormatIndex + 1) % formats.length;
42         const newFormat = formats[newFormatIndex];
43
44         editor.formatter.apply(`callout${newFormat}`);
45     });
46
47     // Link selector shortcut
48     editor.shortcuts.add('meta+shift+K', '', () => {
49         /** @var {EntitySelectorPopup} * */
50         const selectorPopup = window.$components.first('entity-selector-popup');
51         const selectionText = editor.selection.getContent({format: 'text'}).trim();
52         selectorPopup.show(entity => {
53             if (editor.selection.isCollapsed()) {
54                 editor.insertContent(editor.dom.createHTML('a', {href: entity.link}, editor.dom.encode(entity.name)));
55             } else {
56                 editor.formatter.apply('link', {href: entity.link});
57             }
58
59             editor.selection.collapse(false);
60             editor.focus();
61         }, {
62             initialValue: selectionText,
63             searchEndpoint: '/search/entity-selector',
64             entityTypes: 'page,book,chapter,bookshelf',
65             entityPermission: 'view',
66         });
67     });
68 }