|  |  |  | (function () { | 
					
						
							|  |  |  |   'use strict'; | 
					
						
							|  |  |  |   console.log('preload'); | 
					
						
							|  |  |  |   const electron = require('electron') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.PROTO_ROOT = 'protos'; | 
					
						
							|  |  |  |   window.config = require('url').parse(window.location.toString(), true).query; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const ipc = electron.ipcRenderer | 
					
						
							|  |  |  |   window.config.localeMessages = ipc.sendSync('locale-data'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.setBadgeCount = function(count) { | 
					
						
							|  |  |  |     ipc.send('set-badge-count', count); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   window.drawAttention = function() { | 
					
						
							|  |  |  |     console.log('draw attention'); | 
					
						
							|  |  |  |     ipc.send('draw-attention'); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   window.showWindow = function() { | 
					
						
							|  |  |  |     console.log('show window'); | 
					
						
							|  |  |  |     ipc.send('show-window'); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   window.restart = function() { | 
					
						
							|  |  |  |     console.log('restart'); | 
					
						
							|  |  |  |     ipc.send('restart'); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |   * Enables spell-checking and the right-click context menu in text editors. | 
					
						
							|  |  |  |   * Electron (`webFrame.setSpellCheckProvider`) only underlines misspelled words; | 
					
						
							|  |  |  |   * we must manage the menu ourselves. | 
					
						
							|  |  |  |   * | 
					
						
							|  |  |  |   * Run this in the renderer process. | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  |   var remote = electron.remote; | 
					
						
							|  |  |  |   var webFrame = electron.webFrame; | 
					
						
							|  |  |  |   var SpellCheckProvider = require('electron-spell-check-provider'); | 
					
						
							|  |  |  |   // `remote.require` since `Menu` is a main-process module.
 | 
					
						
							|  |  |  |   var buildEditorContextMenu = remote.require('electron-editor-context-menu'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   var selection; | 
					
						
							|  |  |  |   function resetSelection() { | 
					
						
							|  |  |  |     selection = { | 
					
						
							|  |  |  |       isMisspelled: false, | 
					
						
							|  |  |  |       spellingSuggestions: [] | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   resetSelection(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.spellChecker = new SpellCheckProvider(window.config.locale).on('misspelling', function(suggestions) { | 
					
						
							|  |  |  |       // Prime the context menu with spelling suggestions _if_ the user has selected text. Electron
 | 
					
						
							|  |  |  |       // may sometimes re-run the spell-check provider for an outdated selection e.g. if the user
 | 
					
						
							|  |  |  |       // right-clicks some misspelled text and then an image.
 | 
					
						
							|  |  |  |       if (window.getSelection().toString()) { | 
					
						
							|  |  |  |         selection.isMisspelled = true; | 
					
						
							|  |  |  |         // Take the first three suggestions if any.
 | 
					
						
							|  |  |  |         selection.spellingSuggestions = suggestions.slice(0, 3); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Reset the selection when clicking around, before the spell-checker runs and the context menu shows.
 | 
					
						
							|  |  |  |   window.addEventListener('mousedown', resetSelection); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // The spell-checker runs when the user clicks on text and before the 'contextmenu' event fires.
 | 
					
						
							|  |  |  |   // Thus, we may retrieve spell-checking suggestions to put in the menu just before it shows.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   webFrame.setSpellCheckProvider( | 
					
						
							|  |  |  |     'en-US', | 
					
						
							|  |  |  |     // Not sure what this parameter (`autoCorrectWord`) does: https://github.com/atom/electron/issues/4371
 | 
					
						
							|  |  |  |     // The documentation for `webFrame.setSpellCheckProvider` passes `true` so we do too.
 | 
					
						
							|  |  |  |     true, | 
					
						
							|  |  |  |     spellChecker | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.addEventListener('contextmenu', function(e) { | 
					
						
							|  |  |  |     // Only show the context menu in text editors.
 | 
					
						
							|  |  |  |     if (!e.target.closest('textarea, input, [contenteditable="true"]')) return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var menu = buildEditorContextMenu(selection); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // The 'contextmenu' event is emitted after 'selectionchange' has fired but possibly before the
 | 
					
						
							|  |  |  |     // visible selection has changed. Try to wait to show the menu until after that, otherwise the
 | 
					
						
							|  |  |  |     // visible selection will update after the menu dismisses and look weird.
 | 
					
						
							|  |  |  |     setTimeout(function() { | 
					
						
							|  |  |  |       menu.popup(remote.getCurrentWindow()); | 
					
						
							|  |  |  |     }, 30); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | })(); |