Nativefier/app/src/components/menu/menu.js

239 lines
7.1 KiB
JavaScript
Raw Normal View History

var electron = require('electron');
var Menu = electron.Menu;
var shell = electron.shell;
const clipboard = electron.clipboard;
/**
*
* @param {string} nativefierVersion
* @param {function} onQuit should be from app.quit
* @param {function} onGoBack
* @param {electron} onGoForward
* @param {function} onZoomIn
* @param {function} onZoomOut
* @param {function} getUrl
*/
function createMenu(nativefierVersion, onQuit, onGoBack, onGoForward, onZoomIn, onZoomOut, getUrl) {
2016-01-23 19:02:23 +01:00
if (Menu.getApplicationMenu()) {
return;
2016-01-23 19:02:23 +01:00
}
var template = [
{
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
role: 'undo'
},
{
label: 'Redo',
accelerator: 'Shift+CmdOrCtrl+Z',
role: 'redo'
},
{
type: 'separator'
},
{
label: 'Cut',
accelerator: 'CmdOrCtrl+X',
role: 'cut'
},
{
label: 'Copy',
accelerator: 'CmdOrCtrl+C',
role: 'copy'
},
{
label: 'Copy Current URL',
accelerator: 'CmdOrCtrl+C',
click: () => {
const currentURL = getUrl();
clipboard.writeText(currentURL);
}
},
{
label: 'Paste',
accelerator: 'CmdOrCtrl+V',
role: 'paste'
},
{
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
2016-01-23 19:02:23 +01:00
}
]
},
{
label: 'View',
submenu: [
{
label: 'Back',
2016-01-23 19:02:23 +01:00
click: function() {
onGoBack();
}
},
{
label: 'Forward',
2016-01-23 19:02:23 +01:00
click: function() {
onGoForward();
}
},
{
label: 'Reload',
accelerator: 'CmdOrCtrl+R',
2016-01-23 19:02:23 +01:00
click: function(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.reload();
2016-01-23 19:02:23 +01:00
}
}
},
{
type: 'separator'
},
{
label: 'Toggle Full Screen',
2016-01-23 19:02:23 +01:00
accelerator: (function() {
if (process.platform === 'darwin') {
return 'Ctrl+Command+F';
2016-01-23 19:02:23 +01:00
}
return 'F11';
})(),
2016-01-23 19:02:23 +01:00
click: function(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
2016-01-23 19:02:23 +01:00
}
}
},
{
label: 'Zoom In',
2016-01-23 19:02:23 +01:00
accelerator: (function() {
if (process.platform === 'darwin') {
return 'Command+=';
2016-01-23 19:02:23 +01:00
}
return 'Ctrl+=';
})(),
2016-01-23 19:02:23 +01:00
click: function() {
onZoomIn();
}
},
{
label: 'Zoom Out',
2016-01-23 19:02:23 +01:00
accelerator: (function() {
if (process.platform === 'darwin') {
return 'Command+-';
2016-01-23 19:02:23 +01:00
}
return 'Ctrl+-';
})(),
2016-01-23 19:02:23 +01:00
click: function() {
onZoomOut();
}
},
{
label: 'Toggle Window Developer Tools',
2016-01-23 19:02:23 +01:00
accelerator: (function() {
if (process.platform === 'darwin') {
return 'Alt+Command+I';
2016-01-23 19:02:23 +01:00
}
return 'Ctrl+Shift+I';
})(),
2016-01-23 19:02:23 +01:00
click: function(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.toggleDevTools();
2016-01-23 19:02:23 +01:00
}
}
}
]
},
{
label: 'Window',
role: 'window',
submenu: [
{
label: 'Minimize',
accelerator: 'CmdOrCtrl+M',
role: 'minimize'
},
{
label: 'Close',
accelerator: 'CmdOrCtrl+W',
role: 'close'
2016-01-23 19:02:23 +01:00
}
]
},
{
label: 'Help',
role: 'help',
submenu: [
{
label: `Built with Nativefier v${nativefierVersion}`,
2016-01-23 19:02:23 +01:00
click: function() {
shell.openExternal('https://github.com/jiahaog/nativefier');
}
},
{
label: 'Report an Issue',
2016-01-23 19:02:23 +01:00
click: function() {
shell.openExternal('https://github.com/jiahaog/nativefier/issues');
}
}
]
}
];
2016-01-23 19:02:23 +01:00
if (process.platform === 'darwin') {
template.unshift({
label: 'Electron',
submenu: [
{
label: 'Services',
role: 'services',
submenu: []
},
{
type: 'separator'
},
{
label: 'Hide App',
accelerator: 'Command+H',
role: 'hide'
},
{
label: 'Hide Others',
accelerator: 'Command+Shift+H',
role: 'hideothers'
},
{
label: 'Show All',
role: 'unhide'
},
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'Command+Q',
2016-01-23 19:02:23 +01:00
click: function() {
onQuit();
}
2016-01-23 19:02:23 +01:00
}
]
});
template[3].submenu.push(
{
type: 'separator'
},
{
label: 'Bring All to Front',
role: 'front'
}
);
}
var menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
}
module.exports = createMenu;