electron/atom/renderer/lib/inspector.coffee
2014-11-16 22:34:29 +08:00

59 lines
1.8 KiB
CoffeeScript

window.onload = ->
# Use menu API to show context menu.
InspectorFrontendHost.showContextMenuAtPoint = (x, y, items, document) ->
createMenu items
# Use dialog API to override file chooser dialog.
WebInspector.createFileSelectorElement = (callback) ->
fileSelectorElement = document.createElement 'span'
fileSelectorElement.style.display = 'none'
fileSelectorElement.click = showFileChooserDialog.bind this, callback
return fileSelectorElement
convertToMenuTemplate = (items) ->
template = []
for item in items
do (item) ->
transformed =
if item.type is 'subMenu'
type: 'submenu'
label: item.label
enabled: item.enabled
submenu: convertToMenuTemplate item.subItems
else if item.type is 'separator'
type: 'separator'
else if item.type is 'checkbox'
type: 'checkbox'
label: item.label
enabled: item.enabled
checked: item.checked
else
type: 'normal'
label: item.label
enabled: item.enabled
if item.id?
transformed.click = -> InspectorFrontendAPI.contextMenuItemSelected item.id
template.push transformed
template
createMenu = (items) ->
remote = require 'remote'
Menu = remote.require 'menu'
menu = Menu.buildFromTemplate convertToMenuTemplate(items)
# The menu is expected to show asynchronously.
setImmediate ->
menu.popup remote.getCurrentWindow()
InspectorFrontendAPI.contextMenuCleared()
showFileChooserDialog = (callback) ->
remote = require 'remote'
dialog = remote.require 'dialog'
files = dialog.showOpenDialog remote.getCurrentWindow(), null
callback pathToHtml5FileObject files[0] if files?
pathToHtml5FileObject = (path) ->
fs = require 'fs'
blob = new Blob([fs.readFileSync(path)])
blob.name = path
blob