81 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
window.onload = function() {
 | 
						|
  // Use menu API to show context menu.
 | 
						|
  InspectorFrontendHost.showContextMenuAtPoint = createMenu;
 | 
						|
 | 
						|
  // Use dialog API to override file chooser dialog.
 | 
						|
  return 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() {
 | 
						|
        DevToolsAPI.contextMenuItemSelected(item.id);
 | 
						|
        return 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;
 | 
						|
};
 |