aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-06-05 17:18:52 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-09-27 13:13:36 +0200
commit1d6df88ef74d67cc76a4879d89e05b3bda1742a4 (patch)
tree838590b9efa9b8b851f269844630612a2954371f
parentupdate electron & electron-builder to latest (diff)
downloadferdium-app-1d6df88ef74d67cc76a4879d89e05b3bda1742a4.tar.gz
ferdium-app-1d6df88ef74d67cc76a4879d89e05b3bda1742a4.tar.zst
ferdium-app-1d6df88ef74d67cc76a4879d89e05b3bda1742a4.zip
Fix spellchecker integration
-rw-r--r--package-lock.json50
-rw-r--r--package.json2
-rw-r--r--src/webview/contextMenu.js5
-rw-r--r--src/webview/spellchecker.js18
4 files changed, 50 insertions, 25 deletions
diff --git a/package-lock.json b/package-lock.json
index 68420c01d..e670c2a03 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7190,14 +7190,12 @@
7190 } 7190 }
7191 }, 7191 },
7192 "electron-hunspell": { 7192 "electron-hunspell": {
7193 "version": "0.1.1", 7193 "version": "1.0.0-beta.7",
7194 "resolved": "https://registry.npmjs.org/electron-hunspell/-/electron-hunspell-0.1.1.tgz", 7194 "resolved": "https://registry.npmjs.org/electron-hunspell/-/electron-hunspell-1.0.0-beta.7.tgz",
7195 "integrity": "sha512-B3nOQqHexIX+8bz72FZkNk+iFBrdqS9DpV2SaH+t7T9SLbONBVBRLJ2Jj2ytXFUzvw81q7vz2dfxPCddh/E3ww==", 7195 "integrity": "sha512-BByCXqU8sZbuzyoxKcBYjycp8ORiqjeYZd2OT8RNjVW+XGPmZkHewXUu4tUa1IXW6ij6IqojV5kr+xhYKLN1DA==",
7196 "requires": { 7196 "requires": {
7197 "hunspell-asm": "1.0.2", 7197 "hunspell-asm": "^2.0.0",
7198 "lodash": "^4.17.11", 7198 "tslib": "1.9.3"
7199 "tslib": "1.9.3",
7200 "unixify": "1.0.0"
7201 } 7199 }
7202 }, 7200 },
7203 "electron-is-dev": { 7201 "electron-is-dev": {
@@ -11506,14 +11504,34 @@
11506 } 11504 }
11507 }, 11505 },
11508 "hunspell-asm": { 11506 "hunspell-asm": {
11509 "version": "1.0.2", 11507 "version": "2.0.0",
11510 "resolved": "https://registry.npmjs.org/hunspell-asm/-/hunspell-asm-1.0.2.tgz", 11508 "resolved": "https://registry.npmjs.org/hunspell-asm/-/hunspell-asm-2.0.0.tgz",
11511 "integrity": "sha512-UTLBvc0yZiIcHl9qrgxnFTZbX3zF4CprzEY+u+N0iXlUKZnUJRIgvgppTdgiQTsucm5b0aN/rHsgXz2q/0kBRA==", 11509 "integrity": "sha512-FMIUBpy+bRREFAvC63RcYEK9U6+FdlEojGSVsvMTpuZ2CekYyUBwEfG4+ExIQOQyEN0U6f1MoVgrFqvgPNSA2g==",
11512 "requires": { 11510 "requires": {
11513 "emscripten-wasm-loader": "^1.0.0", 11511 "emscripten-wasm-loader": "^2.2.3",
11514 "nanoid": "^1.0.2", 11512 "nanoid": "^2.0.1",
11515 "tslib": "^1.9.0", 11513 "tslib": "^1.9.3",
11516 "unixify": "^1.0.0" 11514 "unixify": "^1.0.0"
11515 },
11516 "dependencies": {
11517 "emscripten-wasm-loader": {
11518 "version": "2.2.3",
11519 "resolved": "https://registry.npmjs.org/emscripten-wasm-loader/-/emscripten-wasm-loader-2.2.3.tgz",
11520 "integrity": "sha512-//gI0afvtVnY7smttrPOW/BM+pTJLmdIcXAQV3fgRdQ0o6wm2vdSI0kjLYVOeo/rbtRsGgVuMLu6fT+O//EfaA==",
11521 "requires": {
11522 "getroot": "^1.0.0",
11523 "nanoid": "^1.3.4",
11524 "tslib": "^1.9.3",
11525 "unixify": "^1.0.0"
11526 },
11527 "dependencies": {
11528 "nanoid": {
11529 "version": "1.3.4",
11530 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-1.3.4.tgz",
11531 "integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ=="
11532 }
11533 }
11534 }
11517 } 11535 }
11518 }, 11536 },
11519 "husky": { 11537 "husky": {
@@ -14507,9 +14525,9 @@
14507 "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" 14525 "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="
14508 }, 14526 },
14509 "nanoid": { 14527 "nanoid": {
14510 "version": "1.3.4", 14528 "version": "2.0.3",
14511 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-1.3.4.tgz", 14529 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.3.tgz",
14512 "integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ==" 14530 "integrity": "sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw=="
14513 }, 14531 },
14514 "nanomatch": { 14532 "nanomatch": {
14515 "version": "1.2.13", 14533 "version": "1.2.13",
diff --git a/package.json b/package.json
index 3b932aae4..2814df2ab 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
48 "du": "^0.1.0", 48 "du": "^0.1.0",
49 "electron-dl": "1.12.0", 49 "electron-dl": "1.12.0",
50 "electron-fetch": "1.3.0", 50 "electron-fetch": "1.3.0",
51 "electron-hunspell": "0.1.1", 51 "electron-hunspell": "1.0.0-beta.7",
52 "electron-is-dev": "1.0.1", 52 "electron-is-dev": "1.0.1",
53 "electron-react-titlebar": "0.8.1", 53 "electron-react-titlebar": "0.8.1",
54 "electron-updater": "4.0.6", 54 "electron-updater": "4.0.6",
diff --git a/src/webview/contextMenu.js b/src/webview/contextMenu.js
index 83914f581..2fdbcdca6 100644
--- a/src/webview/contextMenu.js
+++ b/src/webview/contextMenu.js
@@ -297,12 +297,13 @@ const buildMenuTpl = (props, suggestions, isSpellcheckEnabled, defaultSpellcheck
297}; 297};
298 298
299export default function contextMenu(spellcheckProvider, isSpellcheckEnabled, getDefaultSpellcheckerLanguage, getSpellcheckerLanguage) { 299export default function contextMenu(spellcheckProvider, isSpellcheckEnabled, getDefaultSpellcheckerLanguage, getSpellcheckerLanguage) {
300 webContents.on('context-menu', (e, props) => { 300 webContents.on('context-menu', async (e, props) => {
301 e.preventDefault(); 301 e.preventDefault();
302 302
303 let suggestions = []; 303 let suggestions = [];
304 if (spellcheckProvider && props.misspelledWord) { 304 if (spellcheckProvider && props.misspelledWord) {
305 suggestions = spellcheckProvider.getSuggestion(props.misspelledWord); 305 debug('Mispelled word', props.misspelledWord);
306 suggestions = await spellcheckProvider.getSuggestion(props.misspelledWord);
306 307
307 debug('Suggestions', suggestions); 308 debug('Suggestions', suggestions);
308 } 309 }
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index 9158b3b94..64575753f 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.js
@@ -1,6 +1,8 @@
1import { webFrame } from 'electron'; 1import { webFrame } from 'electron';
2import { SpellCheckerProvider } from 'electron-hunspell'; 2import { attachSpellCheckProvider, SpellCheckerProvider } from 'electron-hunspell';
3import { ENVIRONMENT } from 'hunspell-asm';
3import path from 'path'; 4import path from 'path';
5import { readFileSync } from 'fs';
4 6
5import { DICTIONARY_PATH } from '../config'; 7import { DICTIONARY_PATH } from '../config';
6import { SPELLCHECKER_LOCALES } from '../i18n/languages'; 8import { SPELLCHECKER_LOCALES } from '../i18n/languages';
@@ -10,11 +12,12 @@ const debug = require('debug')('Franz:spellchecker');
10let provider; 12let provider;
11let currentDict; 13let currentDict;
12let _isEnabled = false; 14let _isEnabled = false;
15let attached;
13 16
14async function loadDictionary(locale) { 17async function loadDictionary(locale) {
15 try { 18 try {
16 const fileLocation = path.join(DICTIONARY_PATH, `hunspell-dict-${locale}/${locale}`); 19 const fileLocation = path.join(DICTIONARY_PATH, `hunspell-dict-${locale}/${locale}`);
17 await provider.loadDictionary(locale, `${fileLocation}.dic`, `${fileLocation}.aff`); 20 await provider.loadDictionary(locale, readFileSync(`${fileLocation}.dic`), readFileSync(`${fileLocation}.aff`));
18 debug('Loaded dictionary', locale, 'from', fileLocation); 21 debug('Loaded dictionary', locale, 'from', fileLocation);
19 } catch (err) { 22 } catch (err) {
20 console.error('Could not load dictionary', err); 23 console.error('Could not load dictionary', err);
@@ -41,7 +44,7 @@ export async function switchDict(locale) {
41 provider.unloadDictionary(locale); 44 provider.unloadDictionary(locale);
42 } 45 }
43 loadDictionary(locale); 46 loadDictionary(locale);
44 provider.switchDictionary(locale); 47 attached.switchLanguage(locale);
45 48
46 debug('Switched dictionary to', locale); 49 debug('Switched dictionary to', locale);
47 50
@@ -58,12 +61,15 @@ export default async function initialize(languageCode = 'en-us') {
58 const locale = languageCode.toLowerCase(); 61 const locale = languageCode.toLowerCase();
59 62
60 debug('Init spellchecker'); 63 debug('Init spellchecker');
61 await provider.initialize(); 64 await provider.initialize({ environment: ENVIRONMENT.NODE });
62 // await loadDictionaries(); 65
66 debug('Attaching spellcheck provider');
67 attached = await attachSpellCheckProvider(provider);
63 68
64 debug('Available spellchecker dictionaries', provider.availableDictionaries); 69 debug('Available spellchecker dictionaries', provider.availableDictionaries);
65 70
66 switchDict(locale); 71 attached.switchLanguage(locale);
72 console.log('seas oida', attached, provider);
67 73
68 return provider; 74 return provider;
69 } catch (err) { 75 } catch (err) {