diff --git a/app-menu.js b/app-menu.js new file mode 100644 index 00000000..c9416cfd --- /dev/null +++ b/app-menu.js @@ -0,0 +1,110 @@ +'use strict'; + +var Menu = require('menu'); + +var createMenu = function(mainWindow){ + return Menu.buildFromTemplate(createTemplate(mainWindow)); +} + +var createTemplate = function(mainWindow){ + var first_menu_name = (process.platform == 'darwin') ? require('app').getName() : 'File'; + var template = []; + template.push({ + label: first_menu_name, + submenu: [ + { + label: 'Settings', + click: function(item, focusedWindow){ + mainWindow.loadUrl(__dirname + '/settings.html'); + } + }, + { + label: 'Quit', + accelerator: 'CmdOrCtrl+Q', + click: function(item, focusedWindow){ + require('app').quit(); + } + } + ] + }); + template.push({ + 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: 'Paste', + accelerator: 'CmdOrCtrl+V', + role: 'paste' + }, + { + label: 'Select All', + accelerator: 'CmdOrCtrl+A', + role: 'selectall' + }, + ] + }); + template.push({ + label: 'View', + submenu: [ + { + label: 'Reload', + accelerator: 'CmdOrCtrl+R', + click: function(item, focusedWindow) { + if (focusedWindow) + focusedWindow.reload(); + } + }, + { + label: 'Toggle Full Screen', + accelerator: (function() { + if (process.platform == 'darwin') + return 'Ctrl+Command+F'; + else + return 'F11'; + })(), + click: function(item, focusedWindow) { + if (focusedWindow) + focusedWindow.setFullScreen(!focusedWindow.isFullScreen()); + } + }, + { + label: 'Toggle Developer Tools', + accelerator: (function() { + if (process.platform == 'darwin') + return 'Alt+Command+I'; + else + return 'Ctrl+Shift+I'; + })(), + click: function(item, focusedWindow) { + if (focusedWindow) + focusedWindow.toggleDevTools(); + } + }, + ] + }); + return template; +} + +module.exports = { createMenu: createMenu }; diff --git a/main.js b/main.js index 726d4a32..9f9a612e 100644 --- a/main.js +++ b/main.js @@ -3,6 +3,7 @@ var app = require('app'); // Module to control application life. var BrowserWindow = require('browser-window'); // Module to create native browser window. var Menu = require('menu'); +var appMenu = require('./app-menu'); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -63,29 +64,8 @@ app.on('ready', function() { } }); - if(process.platform==='win32'){ - var menu = Menu.buildFromTemplate([ - { - label: 'Menu', - submenu: [ - { - label: 'Settings', - click: function(item, focusedWindow){ - mainWindow.loadUrl(__dirname + '/settings.html'); - } - }, - { - label: 'Quit', - accelerator: 'Ctrl + Q', - click: function(item, focusedWindow){ - app.quit(); - } - } - ] - } - ]); - Menu.setApplicationMenu(menu); - } + var menu = appMenu.createMenu(mainWindow); + Menu.setApplicationMenu(menu); // Emitted when the window is closed. mainWindow.on('closed', function() {