electron/atom/renderer/lib/override.coffee

62 lines
1.8 KiB
CoffeeScript
Raw Normal View History

process = global.process
ipc = require 'ipc'
remote = require 'remote'
2014-03-01 12:00:39 +00:00
# Window object returned by "window.open".
class FakeWindow
constructor: (@embedderId, @guestId) ->
close: ->
ipc.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_CLOSE', @embedderId, @guestId
2014-10-27 15:03:05 +00:00
focus: ->
ipc.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_METHOD', @guestId, 'focus'
blur: ->
ipc.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_METHOD', @guestId, 'blur'
2014-10-27 15:07:41 +00:00
eval: (args...) ->
ipc.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WEB_CONTENTS_METHOD', @guestId, 'executeJavaScript', args...
unless process.guestInstanceId?
# Override default window.close.
window.close = ->
remote.getCurrentWindow().close()
2014-03-01 12:00:39 +00:00
# Make the browser window or guest view emit "new-window" event.
window.open = (url, frameName='', 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
2014-03-01 12:00:39 +00:00
[embedderId, guestId] = ipc.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, options
new FakeWindow(embedderId, guestId)
# Use the dialog API to implement alert().
window.alert = (message, title='') ->
dialog = remote.require 'dialog'
buttons = ['OK']
dialog.showMessageBox remote.getCurrentWindow(), {message, title, buttons}
2014-03-01 12:03:49 +00:00
# And the confirm().
window.confirm = (message, title='') ->
dialog = remote.require 'dialog'
buttons = ['OK', 'Cancel']
not dialog.showMessageBox remote.getCurrentWindow(), {message, title, buttons}
2014-03-01 12:05:52 +00:00
# But we do not support prompt().
window.prompt = ->
throw new Error('prompt() is and will not be supported in atom-shell.')