You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											6 years ago
										 | /* global exports, require */ | ||
|  | /* eslint-disable strict */ | ||
|  | 
 | ||
|  | const { Menu } = require('electron'); | ||
|  | const osLocale = require('os-locale'); | ||
|  | 
 | ||
|  | exports.setup = (browserWindow, messages) => { | ||
|  |   const { session } = browserWindow.webContents; | ||
|  |   const userLocale = osLocale.sync().replace(/_/g, '-'); | ||
|  |   const userLocales = [userLocale, userLocale.split('-')[0]]; | ||
|  | 
 | ||
|  |   const available = session.availableSpellCheckerLanguages; | ||
|  |   const languages = userLocales.filter(l => available.includes(l)); | ||
|  |   console.log(`spellcheck: user locale: ${userLocale}`); | ||
|  |   console.log('spellcheck: available spellchecker languages: ', available); | ||
|  |   console.log('spellcheck: setting languages to: ', languages); | ||
|  |   session.setSpellCheckerLanguages(languages); | ||
|  | 
 | ||
|  |   browserWindow.webContents.on('context-menu', (_event, params) => { | ||
|  |     const { editFlags } = params; | ||
|  |     const isMisspelled = Boolean(params.misspelledWord); | ||
|  |     const showMenu = params.isEditable || editFlags.canCopy; | ||
|  | 
 | ||
|  |     // Popup editor menu
 | ||
|  |     if (showMenu) { | ||
|  |       const template = []; | ||
|  | 
 | ||
|  |       if (isMisspelled) { | ||
|  |         if (params.dictionarySuggestions.length > 0) { | ||
|  |           template.push( | ||
|  |             ...params.dictionarySuggestions.map(label => ({ | ||
|  |               label, | ||
|  |               click: () => { | ||
|  |                 browserWindow.webContents.replaceMisspelling(label); | ||
|  |               }, | ||
|  |             })) | ||
|  |           ); | ||
|  |         } else { | ||
|  |           template.push({ | ||
|  |             label: messages.contextMenuNoSuggestions.message, | ||
|  |             enabled: false, | ||
|  |           }); | ||
|  |         } | ||
|  |         template.push({ type: 'separator' }); | ||
|  |       } | ||
|  | 
 | ||
|  |       if (params.isEditable) { | ||
|  |         if (editFlags.canUndo) { | ||
|  |           template.push({ label: messages.editMenuUndo.message, role: 'undo' }); | ||
|  |         } | ||
|  |         // This is only ever `true` if undo was triggered via the context menu
 | ||
|  |         // (not ctrl/cmd+z)
 | ||
|  |         if (editFlags.canRedo) { | ||
|  |           template.push({ label: messages.editMenuRedo.message, role: 'redo' }); | ||
|  |         } | ||
|  |         if (editFlags.canUndo || editFlags.canRedo) { | ||
|  |           template.push({ type: 'separator' }); | ||
|  |         } | ||
|  |         if (editFlags.canCut) { | ||
|  |           template.push({ label: messages.editMenuCut.message, role: 'cut' }); | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       if (editFlags.canPaste) { | ||
|  |         template.push({ label: messages.editMenuPaste.message, role: 'paste' }); | ||
|  |       } | ||
|  | 
 | ||
|  |       if (editFlags.canPaste) { | ||
|  |         template.push({ | ||
|  |           label: messages.editMenuPasteAndMatchStyle.message, | ||
|  |           role: 'pasteAndMatchStyle', | ||
|  |         }); | ||
|  |       } | ||
|  | 
 | ||
|  |       // Only enable select all in editors because select all in non-editors
 | ||
|  |       // results in all the UI being selected
 | ||
|  |       if (editFlags.canSelectAll && params.isEditable) { | ||
|  |         template.push({ | ||
|  |           label: messages.editMenuSelectAll.message, | ||
|  |           role: 'selectall', | ||
|  |         }); | ||
|  |       } | ||
|  | 
 | ||
|  |       const menu = Menu.buildFromTemplate(template); | ||
|  |       menu.popup(browserWindow); | ||
|  |     } | ||
|  |   }); | ||
|  | }; |