diff options
Diffstat (limited to 'src/webview/spellchecker.js')
-rw-r--r-- | src/webview/spellchecker.js | 73 |
1 files changed, 25 insertions, 48 deletions
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js index 287c9cf11..e7ef102e9 100644 --- a/src/webview/spellchecker.js +++ b/src/webview/spellchecker.js | |||
@@ -1,64 +1,41 @@ | |||
1 | import { webFrame } from 'electron'; | 1 | import { |
2 | remote, | ||
3 | } from 'electron'; | ||
2 | import { SPELLCHECKER_LOCALES } from '../i18n/languages'; | 4 | import { SPELLCHECKER_LOCALES } from '../i18n/languages'; |
3 | import setupContextMenu from './contextMenu'; | 5 | import { isMac } from '../environment'; |
4 | 6 | ||
5 | const debug = require('debug')('Franz:spellchecker'); | 7 | const debug = require('debug')('Franz:spellchecker'); |
6 | 8 | ||
7 | let _isEnabled = false; | 9 | const webContents = remote.getCurrentWebContents(); |
10 | const [defaultLocale] = webContents.session.getSpellCheckerLanguages(); | ||
11 | debug('Spellchecker default locale is', defaultLocale); | ||
8 | 12 | ||
9 | export async function switchDict(locales) { | 13 | export function getSpellcheckerLocaleByFuzzyIdentifier(identifier) { |
10 | const { platform } = process; | 14 | const locales = Object.keys(SPELLCHECKER_LOCALES).filter(key => key.toLocaleLowerCase() === identifier.toLowerCase() || key.split('-')[0] === identifier.toLowerCase()); |
11 | if (platform === 'darwin') { | ||
12 | // MacOS uses the build-in languages which cannot be changed | ||
13 | return; | ||
14 | } | ||
15 | |||
16 | try { | ||
17 | debug('Trying to load dictionary', locales); | ||
18 | |||
19 | webFrame.session.setSpellCheckerLanguages([...locales, 'en-US']); | ||
20 | |||
21 | debug('Switched dictionary to', locales); | ||
22 | |||
23 | _isEnabled = true; | ||
24 | } catch (err) { | ||
25 | console.error(err); | ||
26 | } | ||
27 | } | ||
28 | |||
29 | export default async function initialize(languages = ['en-us']) { | ||
30 | try { | ||
31 | debug('Init spellchecker'); | ||
32 | |||
33 | switchDict([ | ||
34 | navigator.language, | ||
35 | ...languages, | ||
36 | ]); | ||
37 | setupContextMenu(); | ||
38 | 15 | ||
39 | return true; | 16 | if (locales.length >= 1) { |
40 | } catch (err) { | 17 | return locales[0]; |
41 | console.error(err); | ||
42 | return false; | ||
43 | } | 18 | } |
44 | } | ||
45 | 19 | ||
46 | export function isEnabled() { | 20 | return null; |
47 | return _isEnabled; | ||
48 | } | 21 | } |
49 | 22 | ||
50 | export function disable() { | 23 | export function switchDict(locale) { |
51 | if (isEnabled()) { | 24 | if (isMac) { |
52 | // TODO: How to disable build-in spellchecker? | 25 | debug('Ignoring dictionary changes on macOS'); |
26 | return; | ||
53 | } | 27 | } |
54 | } | ||
55 | 28 | ||
56 | export function getSpellcheckerLocaleByFuzzyIdentifier(identifier) { | 29 | debug('Setting spellchecker locale to', locale); |
57 | const locales = Object.keys(SPELLCHECKER_LOCALES).filter(key => key === identifier.toLowerCase() || key.split('-')[0] === identifier.toLowerCase()); | ||
58 | 30 | ||
59 | if (locales.length >= 1) { | 31 | const locales = []; |
60 | return locales[0]; | 32 | const foundLocale = getSpellcheckerLocaleByFuzzyIdentifier(locale); |
33 | |||
34 | if (foundLocale) { | ||
35 | locales.push(foundLocale); | ||
61 | } | 36 | } |
62 | 37 | ||
63 | return null; | 38 | locales.push(defaultLocale, 'de'); |
39 | |||
40 | webContents.session.setSpellCheckerLanguages(locales); | ||
64 | } | 41 | } |