forked from marktext/marktext
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathformat.js
More file actions
104 lines (85 loc) · 2.72 KB
/
format.js
File metadata and controls
104 lines (85 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { COMMANDS } from '../../commands'
const MENU_ID_FORMAT_MAP = Object.freeze({
strongMenuItem: 'strong',
emphasisMenuItem: 'em',
inlineCodeMenuItem: 'inline_code',
strikeMenuItem: 'del',
hyperlinkMenuItem: 'link',
imageMenuItem: 'image',
inlineMathMenuItem: 'inline_math'
})
const format = (win, type) => {
if (win && win.webContents) {
win.webContents.send('mt::editor-format-action', { type })
}
}
export const clearFormat = win => {
format(win, 'clear')
}
export const emphasis = win => {
format(win, 'em')
}
export const highlight = win => {
format(win, 'mark')
}
export const hyperlink = win => {
format(win, 'link')
}
export const image = win => {
format(win, 'image')
}
export const inlineCode = win => {
format(win, 'inline_code')
}
export const inlineMath = win => {
format(win, 'inline_math')
}
export const strikethrough = win => {
format(win, 'del')
}
export const strong = win => {
format(win, 'strong')
}
export const subscript = win => {
format(win, 'sub')
}
export const superscript = win => {
format(win, 'sup')
}
export const underline = win => {
format(win, 'u')
}
// --- Commands -------------------------------------------------------------
export const loadFormatCommands = commandManager => {
commandManager.add(COMMANDS.FORMAT_CLEAR_FORMAT, clearFormat)
commandManager.add(COMMANDS.FORMAT_EMPHASIS, emphasis)
commandManager.add(COMMANDS.FORMAT_HIGHLIGHT, highlight)
commandManager.add(COMMANDS.FORMAT_HYPERLINK, hyperlink)
commandManager.add(COMMANDS.FORMAT_IMAGE, image)
commandManager.add(COMMANDS.FORMAT_INLINE_CODE, inlineCode)
commandManager.add(COMMANDS.FORMAT_INLINE_MATH, inlineMath)
commandManager.add(COMMANDS.FORMAT_STRIKE, strikethrough)
commandManager.add(COMMANDS.FORMAT_STRONG, strong)
commandManager.add(COMMANDS.FORMAT_SUBSCRIPT, subscript)
commandManager.add(COMMANDS.FORMAT_SUPERSCRIPT, superscript)
commandManager.add(COMMANDS.FORMAT_UNDERLINE, underline)
}
// --- IPC events -------------------------------------------------------------
// NOTE: Don't use static `getMenuItemById` here, instead request the menu by
// window id from `AppMenu` manager.
/**
* Update format menu entires from given state.
*
* @param {Electron.MenuItem} applicationMenu The application menu instance.
* @param {Object.<string, boolean>} formats A object map with selected formats.
*/
export const updateFormatMenu = (applicationMenu, formats) => {
const formatMenuItem = applicationMenu.getMenuItemById('formatMenuItem')
formatMenuItem.submenu.items.forEach(item => (item.checked = false))
formatMenuItem.submenu.items
.forEach(item => {
if (item.id && formats[MENU_ID_FORMAT_MAP[item.id]]) {
item.checked = true
}
})
}