 d6a7ced32c
			
		
	
	
	d6a7ced32c
	
	
	
		
			
			On OS X, the standard label that's used for the 'close' role is 'Close Window'. You can see this in the default macOS apps from Apple.
		
			
				
	
	
		
			144 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const {app} = require('electron')
 | |
| 
 | |
| const roles = {
 | |
|   about: {
 | |
|     get label () {
 | |
|       return process.platform === 'linux' ? 'About' : `About ${app.getName()}`
 | |
|     }
 | |
|   },
 | |
|   close: {
 | |
|     label: process.platform === 'darwin' ? 'Close Window' : 'Close',
 | |
|     accelerator: 'CommandOrControl+W',
 | |
|     windowMethod: 'close'
 | |
|   },
 | |
|   copy: {
 | |
|     label: 'Copy',
 | |
|     accelerator: 'CommandOrControl+C',
 | |
|     webContentsMethod: 'copy'
 | |
|   },
 | |
|   cut: {
 | |
|     label: 'Cut',
 | |
|     accelerator: 'CommandOrControl+X',
 | |
|     webContentsMethod: 'cut'
 | |
|   },
 | |
|   delete: {
 | |
|     label: 'Delete',
 | |
|     webContentsMethod: 'delete'
 | |
|   },
 | |
|   front: {
 | |
|     label: 'Bring All to Front'
 | |
|   },
 | |
|   help: {
 | |
|     label: 'Help'
 | |
|   },
 | |
|   hide: {
 | |
|     get label () {
 | |
|       return `Hide ${app.getName()}`
 | |
|     },
 | |
|     accelerator: 'Command+H'
 | |
|   },
 | |
|   hideothers: {
 | |
|     label: 'Hide Others',
 | |
|     accelerator: 'Command+Alt+H'
 | |
|   },
 | |
|   minimize: {
 | |
|     label: 'Minimize',
 | |
|     accelerator: 'CommandOrControl+M',
 | |
|     windowMethod: 'minimize'
 | |
|   },
 | |
|   paste: {
 | |
|     label: 'Paste',
 | |
|     accelerator: 'CommandOrControl+V',
 | |
|     webContentsMethod: 'paste'
 | |
|   },
 | |
|   pasteandmatchstyle: {
 | |
|     label: 'Paste and Match Style',
 | |
|     accelerator: 'Shift+CommandOrControl+V',
 | |
|     webContentsMethod: 'pasteAndMatchStyle'
 | |
|   },
 | |
|   quit: {
 | |
|     get label () {
 | |
|       switch (process.platform) {
 | |
|         case 'darwin': return `Quit ${app.getName()}`
 | |
|         case 'win32': return 'Exit'
 | |
|         default: return 'Quit'
 | |
|       }
 | |
|     },
 | |
|     accelerator: process.platform === 'win32' ? null : 'CommandOrControl+Q',
 | |
|     appMethod: 'quit'
 | |
|   },
 | |
|   redo: {
 | |
|     label: 'Redo',
 | |
|     accelerator: 'Shift+CommandOrControl+Z',
 | |
|     webContentsMethod: 'redo'
 | |
|   },
 | |
|   selectall: {
 | |
|     label: 'Select All',
 | |
|     accelerator: 'CommandOrControl+A',
 | |
|     webContentsMethod: 'selectAll'
 | |
|   },
 | |
|   services: {
 | |
|     label: 'Services'
 | |
|   },
 | |
|   togglefullscreen: {
 | |
|     label: 'Toggle Full Screen',
 | |
|     accelerator: process.platform === 'darwin' ? 'Control+Command+F' : 'F11',
 | |
|     windowMethod: function (window) {
 | |
|       window.setFullScreen(!window.isFullScreen())
 | |
|     }
 | |
|   },
 | |
|   undo: {
 | |
|     label: 'Undo',
 | |
|     accelerator: 'CommandOrControl+Z',
 | |
|     webContentsMethod: 'undo'
 | |
|   },
 | |
|   unhide: {
 | |
|     label: 'Show All'
 | |
|   },
 | |
|   window: {
 | |
|     label: 'Window'
 | |
|   },
 | |
|   zoom: {
 | |
|     label: 'Zoom'
 | |
|   }
 | |
| }
 | |
| 
 | |
| exports.getDefaultLabel = (role) => {
 | |
|   if (roles.hasOwnProperty(role)) {
 | |
|     return roles[role].label
 | |
|   } else {
 | |
|     return ''
 | |
|   }
 | |
| }
 | |
| 
 | |
| exports.getDefaultAccelerator = (role) => {
 | |
|   if (roles.hasOwnProperty(role)) return roles[role].accelerator
 | |
| }
 | |
| 
 | |
| exports.execute = (role, focusedWindow, focusedWebContents) => {
 | |
|   if (!roles.hasOwnProperty(role)) return false
 | |
|   if (process.platform === 'darwin') return false
 | |
| 
 | |
|   const {appMethod, webContentsMethod, windowMethod} = roles[role]
 | |
| 
 | |
|   if (appMethod) {
 | |
|     app[appMethod]()
 | |
|     return true
 | |
|   }
 | |
| 
 | |
|   if (windowMethod && focusedWindow != null) {
 | |
|     if (typeof windowMethod === 'function') {
 | |
|       windowMethod(focusedWindow)
 | |
|     } else {
 | |
|       focusedWindow[windowMethod]()
 | |
|     }
 | |
|     return true
 | |
|   }
 | |
| 
 | |
|   if (webContentsMethod && focusedWebContents != null) {
 | |
|     focusedWebContents[webContentsMethod]()
 | |
|     return true
 | |
|   }
 | |
| 
 | |
|   return false
 | |
| }
 |