aboutsummaryrefslogtreecommitdiffstats
path: root/src/webview/spellchecker.js
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2017-12-24 22:11:36 +0100
committerLibravatar Stefan Malzner <stefan@adlk.io>2017-12-24 22:11:36 +0100
commitdf44b69c4655415fe1e44689ece443ec06ef0f52 (patch)
treee677ed5f5328bb3b14bc976c7392d8e259f89034 /src/webview/spellchecker.js
parent[wip] add icon upload (diff)
parentMerge pull request #494 from heavypackets/websecurity-enable-patch (diff)
downloadferdium-app-df44b69c4655415fe1e44689ece443ec06ef0f52.tar.gz
ferdium-app-df44b69c4655415fe1e44689ece443ec06ef0f52.tar.zst
ferdium-app-df44b69c4655415fe1e44689ece443ec06ef0f52.zip
Merge branch 'develop' into feature/icon-upload
Diffstat (limited to 'src/webview/spellchecker.js')
-rw-r--r--src/webview/spellchecker.js71
1 files changed, 60 insertions, 11 deletions
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index ec8807874..a504a4039 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.js
@@ -1,14 +1,63 @@
1import { SpellCheckHandler, ContextMenuListener, ContextMenuBuilder } from 'electron-spellchecker'; 1import { SpellCheckHandler } from 'electron-spellchecker';
2 2
3window.spellCheckHandler = new SpellCheckHandler(); 3import { isMac } from '../environment';
4setTimeout(() => {
5 window.spellCheckHandler.attachToInput();
6}, 1000);
7 4
8// TODO: should we set the language to user settings? 5export default class Spellchecker {
9// window.spellCheckHandler.switchLanguage('en-US'); 6 isInitialized = false;
7 handler = null;
8 initRetries = 0;
9 DOMCheckInterval = null;
10
11 get inputs() {
12 return document.querySelectorAll('input[type="text"], [contenteditable="true"], textarea');
13 }
14
15 initialize() {
16 this.handler = new SpellCheckHandler();
17
18 if (!isMac) {
19 this.attach();
20 } else {
21 this.isInitialized = true;
22 }
23 }
24
25 attach() {
26 let initFailed = false;
27
28 if (this.initRetries > 3) {
29 console.error('Could not initialize spellchecker');
30 return;
31 }
32
33 try {
34 this.handler.attachToInput();
35 this.handler.switchLanguage(navigator.language);
36 } catch (err) {
37 initFailed = true;
38 this.initRetries = +1;
39 setTimeout(() => { this.attach(); console.warn('Spellchecker init failed, trying again in 5s'); }, 5000);
40 }
41
42 if (!initFailed) {
43 this.isInitialized = true;
44 }
45 }
46
47 toggleSpellchecker(enable = false) {
48 this.inputs.forEach((input) => {
49 input.setAttribute('spellcheck', enable);
50 });
51
52 this.intervalHandler(enable);
53 }
54
55 intervalHandler(enable) {
56 clearInterval(this.DOMCheckInterval);
57
58 if (enable) {
59 this.DOMCheckInterval = setInterval(() => this.toggleSpellchecker(enable), 30000);
60 }
61 }
62}
10 63
11const contextMenuBuilder = new ContextMenuBuilder(window.spellCheckHandler);
12const contextMenuListener = new ContextMenuListener((info) => { // eslint-disable-line
13 contextMenuBuilder.showPopupMenu(info);
14});