diff options
Diffstat (limited to 'src/webview/plugin.js')
-rw-r--r-- | src/webview/plugin.js | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/src/webview/plugin.js b/src/webview/plugin.js index c6530fef6..72530733d 100644 --- a/src/webview/plugin.js +++ b/src/webview/plugin.js | |||
@@ -1,14 +1,17 @@ | |||
1 | import { ipcRenderer } from 'electron'; | 1 | import { ipcRenderer } from 'electron'; |
2 | import { ContextMenuListener, ContextMenuBuilder } from 'electron-spellchecker'; | ||
3 | import path from 'path'; | 2 | import path from 'path'; |
4 | 3 | ||
5 | import { isDevMode } from '../environment'; | ||
6 | import RecipeWebview from './lib/RecipeWebview'; | 4 | import RecipeWebview from './lib/RecipeWebview'; |
7 | 5 | ||
8 | import Spellchecker from './spellchecker'; | 6 | import spellchecker, { switchDict, disable as disableSpellchecker } from './spellchecker'; |
7 | import { injectDarkModeStyle, isDarkModeStyleInjected, removeDarkModeStyle } from './darkmode'; | ||
8 | import contextMenu from './contextMenu'; | ||
9 | import './notifications'; | 9 | import './notifications'; |
10 | 10 | ||
11 | const debug = require('debug')('Plugin'); | 11 | const debug = require('debug')('Franz:Plugin'); |
12 | |||
13 | window.franzSettings = {}; | ||
14 | let serviceData; | ||
12 | 15 | ||
13 | ipcRenderer.on('initializeRecipe', (e, data) => { | 16 | ipcRenderer.on('initializeRecipe', (e, data) => { |
14 | const modulePath = path.join(data.recipe.path, 'webview.js'); | 17 | const modulePath = path.join(data.recipe.path, 'webview.js'); |
@@ -17,27 +20,58 @@ ipcRenderer.on('initializeRecipe', (e, data) => { | |||
17 | try { | 20 | try { |
18 | // eslint-disable-next-line | 21 | // eslint-disable-next-line |
19 | require(modulePath)(new RecipeWebview(), data); | 22 | require(modulePath)(new RecipeWebview(), data); |
20 | debug('Initialize Recipe'); | 23 | debug('Initialize Recipe', data); |
24 | |||
25 | serviceData = data; | ||
26 | |||
27 | if (data.isDarkModeEnabled) { | ||
28 | injectDarkModeStyle(data.recipe.path); | ||
29 | debug('Add dark theme styles'); | ||
30 | } | ||
21 | } catch (err) { | 31 | } catch (err) { |
22 | debug('Recipe initialization failed', err); | 32 | debug('Recipe initialization failed', err); |
23 | } | 33 | } |
24 | }); | 34 | }); |
25 | 35 | ||
26 | const spellchecker = new Spellchecker(); | 36 | // Needs to run asap to intialize dictionaries |
27 | spellchecker.initialize(); | 37 | (async () => { |
38 | const spellcheckingProvider = await spellchecker(); | ||
39 | contextMenu(spellcheckingProvider); | ||
40 | })(); | ||
28 | 41 | ||
29 | const contextMenuBuilder = new ContextMenuBuilder(spellchecker.handler, null, isDevMode); | 42 | ipcRenderer.on('settings-update', async (e, data) => { |
43 | debug('Settings update received', data); | ||
30 | 44 | ||
31 | new ContextMenuListener((info) => { // eslint-disable-line | 45 | if (data.enableSpellchecking) { |
32 | contextMenuBuilder.showPopupMenu(info); | 46 | switchDict(data.spellcheckerLanguage); |
47 | } else { | ||
48 | disableSpellchecker(); | ||
49 | } | ||
50 | |||
51 | window.franzSettings = data; | ||
33 | }); | 52 | }); |
34 | 53 | ||
35 | ipcRenderer.on('settings-update', (e, data) => { | 54 | ipcRenderer.on('service-settings-update', (e, data) => { |
36 | spellchecker.toggleSpellchecker(data.enableSpellchecking); | 55 | debug('Service settings update received', data); |
37 | debug('Settings update received', data); | 56 | |
57 | if (data.isDarkModeEnabled && !isDarkModeStyleInjected()) { | ||
58 | injectDarkModeStyle(serviceData.recipe.path); | ||
59 | |||
60 | debug('Enable service dark mode'); | ||
61 | } else if (!data.isDarkModeEnabled && isDarkModeStyleInjected()) { | ||
62 | removeDarkModeStyle(); | ||
63 | |||
64 | debug('Disable service dark mode'); | ||
65 | } | ||
66 | }); | ||
67 | |||
68 | // Needed for current implementation of electrons 'login' event 🤦 | ||
69 | ipcRenderer.on('get-service-id', (event) => { | ||
70 | debug('Asking for service id', event); | ||
71 | |||
72 | event.sender.send('service-id', serviceData.id); | ||
38 | }); | 73 | }); |
39 | 74 | ||
40 | // initSpellche | ||
41 | 75 | ||
42 | document.addEventListener('DOMContentLoaded', () => { | 76 | document.addEventListener('DOMContentLoaded', () => { |
43 | ipcRenderer.sendToHost('hello'); | 77 | ipcRenderer.sendToHost('hello'); |
@@ -47,7 +81,7 @@ document.addEventListener('DOMContentLoaded', () => { | |||
47 | const originalWindowOpen = window.open; | 81 | const originalWindowOpen = window.open; |
48 | 82 | ||
49 | window.open = (url, frameName, features) => { | 83 | window.open = (url, frameName, features) => { |
50 | // We need to differentiate if the link should be opened in a popup or in the systems default browser | 84 | // We need to differentiate if the link should be opened in a popup or in the systems default browser |
51 | if (!frameName && !features) { | 85 | if (!frameName && !features) { |
52 | return ipcRenderer.sendToHost('new-window', url); | 86 | return ipcRenderer.sendToHost('new-window', url); |
53 | } | 87 | } |