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.
		
		
		
		
		
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
(function () {
 | 
						|
  'use strict';
 | 
						|
  console.log('preload');
 | 
						|
  const electron = require('electron')
 | 
						|
 | 
						|
  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();
 | 
						|
 | 
						|
  // 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,
 | 
						|
    new SpellCheckProvider('en-US').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);
 | 
						|
      }
 | 
						|
    }));
 | 
						|
 | 
						|
  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);
 | 
						|
  });
 | 
						|
 | 
						|
})();
 |