2013-12-15 08:21:23 +00:00
|
|
|
path = require 'path'
|
|
|
|
timers = require 'timers'
|
2013-12-15 08:11:00 +00:00
|
|
|
Module = require 'module'
|
2013-12-15 06:20:28 +00:00
|
|
|
|
|
|
|
# Expose information of current process.
|
|
|
|
process.__atom_type = 'renderer'
|
|
|
|
process.resourcesPath = path.resolve process.argv[1], '..', '..', '..'
|
|
|
|
|
|
|
|
# We modified the original process.argv to let node.js load the
|
|
|
|
# atom-renderer.js, we need to restore it here.
|
|
|
|
process.argv.splice 1, 1
|
|
|
|
|
|
|
|
# Add renderer/api/lib to require's search paths, which contains javascript part
|
|
|
|
# of Atom's built-in libraries.
|
2013-12-15 08:11:00 +00:00
|
|
|
globalPaths = Module.globalPaths
|
|
|
|
globalPaths.push path.join(process.resourcesPath, 'renderer', 'api', 'lib')
|
|
|
|
# And also common/api/lib.
|
|
|
|
globalPaths.push path.join(process.resourcesPath, 'common', 'api', 'lib')
|
|
|
|
# And also app.
|
|
|
|
globalPaths.push path.join(process.resourcesPath, 'app')
|
2013-12-15 06:20:28 +00:00
|
|
|
|
|
|
|
# Expose global variables.
|
|
|
|
global.require = require
|
|
|
|
global.module = module
|
2013-12-15 11:09:00 +00:00
|
|
|
|
|
|
|
# setImmediate and process.nextTick makes use of uv_check and uv_prepare to
|
|
|
|
# run the callbacks, however since we only run uv loop on requests, the
|
|
|
|
# callbacks wouldn't be called until something else activated the uv loop,
|
|
|
|
# which would delay the callbacks for arbitrary long time. So we should
|
|
|
|
# initiatively activate the uv loop once setImmediate and process.nextTick is
|
|
|
|
# called.
|
|
|
|
wrapWithActivateUvLoop = (func) ->
|
|
|
|
->
|
|
|
|
process.activateUvLoop()
|
|
|
|
func.apply this, arguments
|
|
|
|
process.nextTick = wrapWithActivateUvLoop process.nextTick
|
|
|
|
global.setImmediate = wrapWithActivateUvLoop timers.setImmediate
|
2013-12-15 08:21:23 +00:00
|
|
|
global.clearImmediate = timers.clearImmediate
|
2013-12-15 08:11:00 +00:00
|
|
|
|
2014-01-13 03:52:24 +00:00
|
|
|
# The child_process module also needs to activate the uv loop to make the ipc
|
|
|
|
# channel setup.
|
|
|
|
# TODO(zcbenz): Find out why this is needed.
|
|
|
|
childProcess = require 'child_process'
|
|
|
|
childProcess.spawn = wrapWithActivateUvLoop childProcess.spawn
|
|
|
|
childProcess.fork = wrapWithActivateUvLoop childProcess.fork
|
|
|
|
|
2013-12-15 08:11:00 +00:00
|
|
|
# Set the __filename to the path of html file if it's file:// protocol.
|
|
|
|
if window.location.protocol is 'file:'
|
2013-12-17 14:16:15 +00:00
|
|
|
global.__filename =
|
|
|
|
if process.platform is 'win32'
|
|
|
|
window.location.pathname.substr 1
|
|
|
|
else
|
|
|
|
window.location.pathname
|
2013-12-15 08:11:00 +00:00
|
|
|
global.__dirname = path.dirname global.__filename
|
|
|
|
|
2014-01-07 06:30:18 +00:00
|
|
|
# Set module's filename so relative require can work as expected.
|
|
|
|
module.filename = global.__filename
|
|
|
|
|
2013-12-15 08:11:00 +00:00
|
|
|
# Also search for module under the html file.
|
|
|
|
module.paths = module.paths.concat Module._nodeModulePaths(global.__dirname)
|
|
|
|
else
|
|
|
|
global.__filename = __filename
|
|
|
|
global.__dirname = __dirname
|
2013-12-15 08:32:41 +00:00
|
|
|
|
|
|
|
# Redirect window.onerror to uncaughtException.
|
|
|
|
window.onerror = (error) ->
|
|
|
|
if global.process.listeners('uncaughtException').length > 0
|
|
|
|
global.process.emit 'uncaughtException', error
|
|
|
|
true
|
|
|
|
else
|
|
|
|
false
|
2013-12-27 06:39:23 +00:00
|
|
|
|
|
|
|
# Override default window.open.
|
2013-12-27 06:57:53 +00:00
|
|
|
window.open = (url, name, features) ->
|
|
|
|
options = {}
|
|
|
|
for feature in features.split ','
|
|
|
|
[name, value] = feature.split '='
|
|
|
|
options[name] =
|
|
|
|
if value is 'yes'
|
|
|
|
true
|
|
|
|
else if value is 'no'
|
|
|
|
false
|
|
|
|
else
|
|
|
|
value
|
|
|
|
|
|
|
|
options.x ?= options.left
|
|
|
|
options.y ?= options.top
|
|
|
|
options.title ?= name
|
|
|
|
options.width ?= 800
|
|
|
|
options.height ?= 600
|
|
|
|
|
2013-12-27 06:39:23 +00:00
|
|
|
BrowserWindow = require('remote').require 'browser-window'
|
2013-12-27 06:57:53 +00:00
|
|
|
browser = new BrowserWindow options
|
2013-12-27 06:39:23 +00:00
|
|
|
browser.loadUrl url
|
|
|
|
browser
|