2 * @param {Editor} editor
4 export function register(editor) {
6 for (let i = 1; i < 5; i++) {
7 editor.shortcuts.add(`meta+${i}`, '', ['FormatBlock', false, `h${i + 1}`]);
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');
22 // Save draft shortcut
23 editor.shortcuts.add('meta+S', '', () => {
24 window.$events.emit('editor-save-draft');
28 editor.shortcuts.add('meta+13', '', () => {
29 window.$events.emit('editor-save-page');
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;
37 const formats = ['info', 'success', 'warning', 'danger'];
38 const currentFormatIndex = formats.findIndex(format => {
39 return callout && callout.classList.contains(format);
41 const newFormatIndex = (currentFormatIndex + 1) % formats.length;
42 const newFormat = formats[newFormatIndex];
44 editor.formatter.apply(`callout${newFormat}`);
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)));
56 editor.formatter.apply('link', {href: entity.link});
59 editor.selection.collapse(false);
62 initialValue: selectionText,
63 searchEndpoint: '/search/entity-selector',
64 entityTypes: 'page,book,chapter,bookshelf',
65 entityPermission: 'view',