2013-09-09 02:54:08 +00:00
var app = require ( 'app' ) ;
2014-05-05 08:35:06 +00:00
var dialog = require ( 'dialog' ) ;
2014-05-24 03:18:06 +00:00
var fs = require ( 'fs' ) ;
2013-07-17 08:21:33 +00:00
var path = require ( 'path' ) ;
2015-06-04 06:54:53 +00:00
var Menu = require ( 'menu' ) ;
var BrowserWindow = require ( 'browser-window' ) ;
2013-04-17 12:05:43 +00:00
2013-09-09 02:54:08 +00:00
// Quit when all windows are closed and no other one is listening to this.
app . on ( 'window-all-closed' , function ( ) {
if ( app . listeners ( 'window-all-closed' ) . length == 1 )
app . quit ( ) ;
} ) ;
2014-08-25 11:11:26 +00:00
// Parse command line options.
var argv = process . argv . slice ( 1 ) ;
2015-04-24 21:02:49 +00:00
var option = { file : null , help : null , version : null , webdriver : null } ;
2014-08-25 11:11:26 +00:00
for ( var i in argv ) {
if ( argv [ i ] == '--version' || argv [ i ] == '-v' ) {
option . version = true ;
break ;
2015-04-24 21:02:49 +00:00
} else if ( argv [ i ] == '--help' || argv [ i ] == '-h' ) {
option . help = true ;
break ;
2014-09-12 14:54:00 +00:00
} else if ( argv [ i ] == '--test-type=webdriver' ) {
option . webdriver = true ;
2014-08-25 11:11:26 +00:00
} else if ( argv [ i ] [ 0 ] == '-' ) {
continue ;
} else {
option . file = argv [ i ] ;
break ;
}
}
2013-10-03 03:36:17 +00:00
2015-06-04 06:54:53 +00:00
// Create default menu.
app . once ( 'ready' , function ( ) {
2015-06-29 05:11:53 +00:00
if ( Menu . getApplicationMenu ( ) )
return ;
2015-06-04 06:54:53 +00:00
var template ;
if ( process . platform == 'darwin' ) {
template = [
{
label : 'Electron' ,
submenu : [
{
label : 'About Electron' ,
selector : 'orderFrontStandardAboutPanel:'
} ,
{
type : 'separator'
} ,
{
label : 'Services' ,
submenu : [ ]
} ,
{
type : 'separator'
} ,
{
label : 'Hide Electron' ,
accelerator : 'Command+H' ,
selector : 'hide:'
} ,
{
label : 'Hide Others' ,
accelerator : 'Command+Shift+H' ,
selector : 'hideOtherApplications:'
} ,
{
label : 'Show All' ,
selector : 'unhideAllApplications:'
} ,
{
type : 'separator'
} ,
{
label : 'Quit' ,
accelerator : 'Command+Q' ,
click : function ( ) { app . quit ( ) ; }
} ,
]
} ,
{
label : 'Edit' ,
submenu : [
{
label : 'Undo' ,
accelerator : 'Command+Z' ,
selector : 'undo:'
} ,
{
label : 'Redo' ,
accelerator : 'Shift+Command+Z' ,
selector : 'redo:'
} ,
{
type : 'separator'
} ,
{
label : 'Cut' ,
accelerator : 'Command+X' ,
selector : 'cut:'
} ,
{
label : 'Copy' ,
accelerator : 'Command+C' ,
selector : 'copy:'
} ,
{
label : 'Paste' ,
accelerator : 'Command+V' ,
selector : 'paste:'
} ,
{
label : 'Select All' ,
accelerator : 'Command+A' ,
selector : 'selectAll:'
} ,
]
} ,
{
label : 'View' ,
submenu : [
{
label : 'Reload' ,
accelerator : 'Command+R' ,
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
2015-06-05 02:02:42 +00:00
focusedWindow . reload ( ) ;
2015-06-04 06:54:53 +00:00
}
} ,
{
label : 'Toggle Full Screen' ,
accelerator : 'Ctrl+Command+F' ,
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
focusedWindow . setFullScreen ( ! focusedWindow . isFullScreen ( ) ) ;
}
} ,
{
label : 'Toggle Developer Tools' ,
accelerator : 'Alt+Command+I' ,
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
focusedWindow . toggleDevTools ( ) ;
}
} ,
]
} ,
{
label : 'Window' ,
submenu : [
{
label : 'Minimize' ,
accelerator : 'Command+M' ,
selector : 'performMiniaturize:'
} ,
{
label : 'Close' ,
accelerator : 'Command+W' ,
selector : 'performClose:'
} ,
{
type : 'separator'
} ,
{
label : 'Bring All to Front' ,
selector : 'arrangeInFront:'
} ,
]
} ,
{
label : 'Help' ,
submenu : [
{
label : 'Learn More' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'http://electron.atom.io' ) }
} ,
{
label : 'Documentation' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'https://github.com/atom/electron/tree/master/docs#readme' ) }
} ,
{
label : 'Community Discussions' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'https://discuss.atom.io/c/electron' ) }
} ,
{
label : 'Search Issues' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'https://github.com/atom/electron/issues' ) }
}
]
}
] ;
} else {
template = [
{
label : '&File' ,
submenu : [
{
label : '&Open' ,
accelerator : 'Ctrl+O' ,
} ,
{
label : '&Close' ,
accelerator : 'Ctrl+W' ,
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
focusedWindow . close ( ) ;
}
} ,
]
} ,
{
label : '&View' ,
submenu : [
{
label : '&Reload' ,
accelerator : 'Ctrl+R' ,
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
focusedWindow . reload ( ) ;
}
} ,
{
label : 'Toggle &Full Screen' ,
accelerator : 'F11' ,
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
focusedWindow . setFullScreen ( ! focusedWindow . isFullScreen ( ) ) ;
}
} ,
{
label : 'Toggle &Developer Tools' ,
2015-07-15 20:11:01 +00:00
accelerator : 'Shift+Ctrl+I' ,
2015-06-04 06:54:53 +00:00
click : function ( ) {
var focusedWindow = BrowserWindow . getFocusedWindow ( ) ;
if ( focusedWindow )
focusedWindow . toggleDevTools ( ) ;
}
} ,
]
} ,
{
label : 'Help' ,
submenu : [
{
label : 'Learn More' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'http://electron.atom.io' ) }
} ,
{
label : 'Documentation' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'https://github.com/atom/electron/tree/master/docs#readme' ) }
} ,
{
label : 'Community Discussions' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'https://discuss.atom.io/c/electron' ) }
} ,
{
label : 'Search Issues' ,
click : function ( ) { require ( 'shell' ) . openExternal ( 'https://github.com/atom/electron/issues' ) }
}
]
}
] ;
}
var menu = Menu . buildFromTemplate ( template ) ;
Menu . setApplicationMenu ( menu ) ;
} ) ;
2013-07-17 08:21:33 +00:00
// Start the specified app if there is one specified in command line, otherwise
// start the default app.
2014-09-12 14:54:00 +00:00
if ( option . file && ! option . webdriver ) {
2013-07-24 07:20:59 +00:00
try {
2014-05-24 03:18:06 +00:00
// Override app name and version.
2014-08-25 11:11:26 +00:00
var packagePath = path . resolve ( option . file ) ;
2014-05-24 03:18:06 +00:00
var packageJsonPath = path . join ( packagePath , 'package.json' ) ;
if ( fs . existsSync ( packageJsonPath ) ) {
var packageJson = JSON . parse ( fs . readFileSync ( packageJsonPath ) ) ;
if ( packageJson . version )
app . setVersion ( packageJson . version ) ;
if ( packageJson . productName )
app . setName ( packageJson . productName ) ;
else if ( packageJson . name )
app . setName ( packageJson . name ) ;
2015-01-19 01:58:17 +00:00
app . setPath ( 'userData' , path . join ( app . getPath ( 'appData' ) , app . getName ( ) ) ) ;
2015-01-19 05:09:42 +00:00
app . setPath ( 'userCache' , path . join ( app . getPath ( 'cache' ) , app . getName ( ) ) ) ;
2015-07-06 09:35:35 +00:00
app . setAppPath ( packagePath ) ;
2014-05-24 03:18:06 +00:00
}
// Run the app.
2014-06-22 06:57:11 +00:00
require ( 'module' ) . _load ( packagePath , module , true ) ;
2013-07-24 07:20:59 +00:00
} catch ( e ) {
2014-05-14 08:27:40 +00:00
if ( e . code == 'MODULE_NOT_FOUND' ) {
app . focus ( ) ;
2015-05-29 06:53:32 +00:00
dialog . showErrorBox ( 'Error opening app' , 'The app provided is not a valid electron app, please read the docs on how to write one:\nhttps://github.com/atom/electron/tree/master/docs\n\n' + e . toString ( ) ) ;
2014-05-14 08:27:40 +00:00
process . exit ( 1 ) ;
} else {
2015-03-02 20:08:12 +00:00
console . error ( 'App threw an error when running' , e ) ;
2014-05-14 08:27:40 +00:00
throw e ;
}
2013-07-24 07:20:59 +00:00
}
2014-08-25 11:11:26 +00:00
} else if ( option . version ) {
2015-04-24 21:02:49 +00:00
console . log ( 'v' + process . versions . electron ) ;
process . exit ( 0 ) ;
} else if ( option . help ) {
var helpMessage = "Electron v" + process . versions . electron + " - Cross Platform Desktop Application Shell\n\n" ;
helpMessage += "Usage: electron [options] [path]\n\n" ;
2015-04-24 21:17:15 +00:00
helpMessage += "A path to an Electron application may be specified. The path must be to \n" ;
helpMessage += "an index.js file or to a folder containing a package.json or index.js file.\n\n" ;
2015-04-24 21:02:49 +00:00
helpMessage += "Options:\n" ;
helpMessage += " -h, --help Print this usage message.\n" ;
helpMessage += " -v, --version Print the version." ;
console . log ( helpMessage ) ;
2013-10-03 03:36:17 +00:00
process . exit ( 0 ) ;
2013-07-17 08:21:33 +00:00
} else {
require ( './default_app.js' ) ;
2013-04-15 07:39:54 +00:00
}