81 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
window.onload = function () {
 | 
						|
  // Use menu API to show context menu.
 | 
						|
  window.InspectorFrontendHost.showContextMenuAtPoint = createMenu
 | 
						|
 | 
						|
  // Use dialog API to override file chooser dialog.
 | 
						|
  window.WebInspector.createFileSelectorElement = createFileSelectorElement
 | 
						|
}
 | 
						|
 | 
						|
var convertToMenuTemplate = function (items) {
 | 
						|
  var fn, i, item, len, template
 | 
						|
  template = []
 | 
						|
  fn = function (item) {
 | 
						|
    var transformed
 | 
						|
    transformed = item.type === 'subMenu' ? {
 | 
						|
      type: 'submenu',
 | 
						|
      label: item.label,
 | 
						|
      enabled: item.enabled,
 | 
						|
      submenu: convertToMenuTemplate(item.subItems)
 | 
						|
    } : item.type === 'separator' ? {
 | 
						|
      type: 'separator'
 | 
						|
    } : item.type === 'checkbox' ? {
 | 
						|
      type: 'checkbox',
 | 
						|
      label: item.label,
 | 
						|
      enabled: item.enabled,
 | 
						|
      checked: item.checked
 | 
						|
    } : {
 | 
						|
      type: 'normal',
 | 
						|
      label: item.label,
 | 
						|
      enabled: item.enabled
 | 
						|
    }
 | 
						|
    if (item.id != null) {
 | 
						|
      transformed.click = function () {
 | 
						|
        window.DevToolsAPI.contextMenuItemSelected(item.id)
 | 
						|
        return window.DevToolsAPI.contextMenuCleared()
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return template.push(transformed)
 | 
						|
  }
 | 
						|
  for (i = 0, len = items.length; i < len; i++) {
 | 
						|
    item = items[i]
 | 
						|
    fn(item)
 | 
						|
  }
 | 
						|
  return template
 | 
						|
}
 | 
						|
 | 
						|
var createMenu = function (x, y, items) {
 | 
						|
  const remote = require('electron').remote
 | 
						|
  const Menu = remote.Menu
 | 
						|
  const menu = Menu.buildFromTemplate(convertToMenuTemplate(items))
 | 
						|
 | 
						|
  // The menu is expected to show asynchronously.
 | 
						|
  return setTimeout(function () {
 | 
						|
    return menu.popup(remote.getCurrentWindow())
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
var showFileChooserDialog = function (callback) {
 | 
						|
  var dialog, files, remote
 | 
						|
  remote = require('electron').remote
 | 
						|
  dialog = remote.dialog
 | 
						|
  files = dialog.showOpenDialog({})
 | 
						|
  if (files != null) {
 | 
						|
    return callback(pathToHtml5FileObject(files[0]))
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
var pathToHtml5FileObject = function (path) {
 | 
						|
  var blob, fs
 | 
						|
  fs = require('fs')
 | 
						|
  blob = new Blob([fs.readFileSync(path)])
 | 
						|
  blob.name = path
 | 
						|
  return blob
 | 
						|
}
 | 
						|
 | 
						|
var createFileSelectorElement = function (callback) {
 | 
						|
  var fileSelectorElement
 | 
						|
  fileSelectorElement = document.createElement('span')
 | 
						|
  fileSelectorElement.style.display = 'none'
 | 
						|
  fileSelectorElement.click = showFileChooserDialog.bind(this, callback)
 | 
						|
  return fileSelectorElement
 | 
						|
}
 |