Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
terkelg
GitHub Repository: terkelg/ramme
Path: blob/master/app/src/main/menus.js
106 views
1
const os = require('os')
2
const path = require('path')
3
const isPlatform = require('./../common/is-platform')
4
const {app, BrowserWindow, Menu, shell, dialog, nativeImage} = require('electron')
5
const config = require('./config')
6
const win = BrowserWindow.getAllWindows()[0]
7
const appName = app.getName()
8
9
function sendAction (action) {
10
const win = BrowserWindow.getAllWindows()[0]
11
if (isPlatform('macOS')) {
12
win.restore()
13
}
14
15
win.webContents.send(action)
16
}
17
18
const helpSubmenu = [
19
{
20
label: `${appName} Website`,
21
click () {
22
shell.openExternal('https://github.com/terkelg/ramme')
23
}
24
},
25
{
26
label: 'Report an Issue...',
27
click () {
28
const body = `
29
<!-- Please succinctly describe your issue and steps to reproduce it. -->
30
31
-
32
33
${app.getName()} ${app.getVersion()}
34
Electron ${process.versions.electron}
35
${process.platform} ${process.arch} ${os.release()}`
36
37
shell.openExternal(`https://github.com/terkelg/ramme/issues/new?body=${encodeURIComponent(body)}`)
38
}
39
}
40
]
41
42
if (process.platform !== 'darwin') {
43
helpSubmenu.push({
44
type: 'separator'
45
}, {
46
role: 'about',
47
click () {
48
console.log(nativeImage.createFromPath(path.join(__dirname, 'assets/logo.png')))
49
dialog.showMessageBox({
50
title: `About ${appName}`,
51
message: `${appName} ${app.getVersion()}`,
52
detail: 'Created by Terkel Gjervig',
53
icon: nativeImage.createFromPath(path.join(__dirname, 'assets/logo.png')),
54
buttons: []
55
})
56
}
57
})
58
}
59
60
const template = [{
61
label: 'Edit',
62
submenu: [{
63
label: 'Back',
64
accelerator: 'Backspace',
65
enabled: false,
66
click () {
67
sendAction('go-back')
68
const win = BrowserWindow.getAllWindows()[0]
69
if (win.webContents.canGoBack()) {
70
win.webContents.goBack()
71
}
72
}
73
},
74
{
75
type: 'separator'
76
},
77
{
78
role: 'undo'
79
},
80
{
81
role: 'redo'
82
},
83
{
84
type: 'separator'
85
},
86
{
87
role: 'cut'
88
},
89
{
90
role: 'copy'
91
},
92
{
93
role: 'paste'
94
},
95
{
96
role: 'pasteandmatchstyle'
97
},
98
{
99
role: 'delete'
100
},
101
{
102
role: 'selectall'
103
}
104
]
105
},
106
{
107
label: 'View',
108
submenu: [{
109
label: 'Reload',
110
accelerator: 'CmdOrCtrl+R',
111
click (item, focusedWindow) {
112
if (focusedWindow) focusedWindow.reload()
113
}
114
},
115
{
116
label: 'Clear cache',
117
click (item, focusedWindow) {
118
if (focusedWindow) {
119
focusedWindow.webContents.session.clearCache(() => {
120
dialog.showMessageBox({
121
message: 'Cache cleared correctly!'
122
})
123
focusedWindow.reload()
124
})
125
}
126
}
127
},
128
{
129
type: 'separator'
130
},
131
{
132
label: 'Home',
133
accelerator: 'CmdOrCtrl+1',
134
click () {
135
sendAction('navigate-home')
136
}
137
},
138
{
139
label: 'Discover',
140
accelerator: 'CmdOrCtrl+2',
141
click () {
142
sendAction('navigate-discover')
143
}
144
},
145
{
146
label: 'Upload',
147
accelerator: 'CmdOrCtrl+3',
148
click () {
149
sendAction('navigate-upload')
150
}
151
},
152
{
153
label: 'Notifications',
154
accelerator: 'CmdOrCtrl+4',
155
click () {
156
sendAction('navigate-notifications')
157
}
158
},
159
{
160
label: 'Profile',
161
accelerator: 'CmdOrCtrl+5',
162
click () {
163
sendAction('navigate-profile')
164
}
165
},
166
{
167
type: 'separator'
168
},
169
{
170
label: 'Scroll a post up',
171
accelerator: 'Shift+Up',
172
click () {
173
sendAction('navigate-up')
174
}
175
},
176
{
177
label: 'Scroll a post down',
178
accelerator: 'Shift+Down',
179
click () {
180
sendAction('navigate-down')
181
}
182
},
183
{
184
type: 'separator'
185
},
186
{
187
label: 'Logout',
188
click () {
189
win.webContents.session.clearStorageData(() => {
190
win.webContents.loadURL('https://www.instagram.com/')
191
dialog.showMessageBox({
192
message: 'Logged out successfully!'
193
})
194
})
195
}
196
},
197
{
198
type: 'separator'
199
},
200
{
201
type: 'checkbox',
202
checked: config.get('darkMode'),
203
label: 'Toggle Dark Mode',
204
accelerator: 'CmdOrCtrl+D',
205
click () {
206
sendAction('toggle-dark-mode')
207
}
208
},
209
{
210
label: 'Toggle Developer Tools',
211
type: 'checkbox',
212
accelerator: (function () {
213
if (process.platform === 'darwin') {
214
return 'Alt+Command+I'
215
} else {
216
return 'Ctrl+Shift+I'
217
}
218
})(),
219
click: function (item, focusedWindow) {
220
if (focusedWindow) {
221
focusedWindow.toggleDevTools()
222
}
223
}
224
}
225
]
226
},
227
{
228
role: 'window',
229
submenu: [{
230
role: 'minimize'
231
}, {
232
role: 'close'
233
}, {
234
role: 'quit'
235
}]
236
},
237
{
238
role: 'help',
239
submenu: helpSubmenu
240
}
241
]
242
243
if (process.platform === 'darwin') {
244
template.unshift({
245
label: appName,
246
submenu: [{
247
role: 'about'
248
},
249
{
250
type: 'separator'
251
},
252
{
253
label: 'Toggle Dark Mode',
254
accelerator: 'CmdOrCtrl+D',
255
click () {
256
sendAction('toggle-dark-mode')
257
}
258
},
259
{
260
type: 'separator'
261
},
262
{
263
role: 'services',
264
submenu: []
265
},
266
{
267
type: 'separator'
268
},
269
{
270
role: 'hide'
271
},
272
{
273
role: 'hideothers'
274
},
275
{
276
role: 'unhide'
277
},
278
{
279
type: 'separator'
280
},
281
{
282
role: 'quit'
283
}
284
]
285
})
286
// Edit menu.
287
template[1].submenu.push({
288
type: 'separator'
289
}, {
290
label: 'Speech',
291
submenu: [{
292
role: 'startspeaking'
293
},
294
{
295
role: 'stopspeaking'
296
}
297
]
298
})
299
// Window menu.
300
template[3].submenu = [{
301
label: 'Close',
302
accelerator: 'CmdOrCtrl+W',
303
role: 'close'
304
},
305
{
306
label: 'Minimize',
307
accelerator: 'CmdOrCtrl+M',
308
role: 'minimize'
309
},
310
{
311
label: 'Zoom',
312
role: 'zoom'
313
},
314
{
315
type: 'separator'
316
},
317
{
318
label: 'Bring All to Front',
319
role: 'front'
320
}
321
]
322
}
323
324
module.exports = Menu.buildFromTemplate(template)
325
326