diff options
author | Stefan Malzner <stefan@adlk.io> | 2019-06-05 17:18:52 +0200 |
---|---|---|
committer | Stefan Malzner <stefan@adlk.io> | 2019-09-27 13:13:36 +0200 |
commit | 1d6df88ef74d67cc76a4879d89e05b3bda1742a4 (patch) | |
tree | 838590b9efa9b8b851f269844630612a2954371f | |
parent | update electron & electron-builder to latest (diff) | |
download | ferdium-app-1d6df88ef74d67cc76a4879d89e05b3bda1742a4.tar.gz ferdium-app-1d6df88ef74d67cc76a4879d89e05b3bda1742a4.tar.zst ferdium-app-1d6df88ef74d67cc76a4879d89e05b3bda1742a4.zip |
Fix spellchecker integration
-rw-r--r-- | package-lock.json | 50 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | src/webview/contextMenu.js | 5 | ||||
-rw-r--r-- | src/webview/spellchecker.js | 18 |
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 | ||
299 | export default function contextMenu(spellcheckProvider, isSpellcheckEnabled, getDefaultSpellcheckerLanguage, getSpellcheckerLanguage) { | 299 | export 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 @@ | |||
1 | import { webFrame } from 'electron'; | 1 | import { webFrame } from 'electron'; |
2 | import { SpellCheckerProvider } from 'electron-hunspell'; | 2 | import { attachSpellCheckProvider, SpellCheckerProvider } from 'electron-hunspell'; |
3 | import { ENVIRONMENT } from 'hunspell-asm'; | ||
3 | import path from 'path'; | 4 | import path from 'path'; |
5 | import { readFileSync } from 'fs'; | ||
4 | 6 | ||
5 | import { DICTIONARY_PATH } from '../config'; | 7 | import { DICTIONARY_PATH } from '../config'; |
6 | import { SPELLCHECKER_LOCALES } from '../i18n/languages'; | 8 | import { SPELLCHECKER_LOCALES } from '../i18n/languages'; |
@@ -10,11 +12,12 @@ const debug = require('debug')('Franz:spellchecker'); | |||
10 | let provider; | 12 | let provider; |
11 | let currentDict; | 13 | let currentDict; |
12 | let _isEnabled = false; | 14 | let _isEnabled = false; |
15 | let attached; | ||
13 | 16 | ||
14 | async function loadDictionary(locale) { | 17 | async 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) { |