aboutsummaryrefslogtreecommitdiffstats
path: root/src/webview/plugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/webview/plugin.js')
-rw-r--r--src/webview/plugin.js64
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 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { ContextMenuListener, ContextMenuBuilder } from 'electron-spellchecker';
3import path from 'path'; 2import path from 'path';
4 3
5import { isDevMode } from '../environment';
6import RecipeWebview from './lib/RecipeWebview'; 4import RecipeWebview from './lib/RecipeWebview';
7 5
8import Spellchecker from './spellchecker'; 6import spellchecker, { switchDict, disable as disableSpellchecker } from './spellchecker';
7import { injectDarkModeStyle, isDarkModeStyleInjected, removeDarkModeStyle } from './darkmode';
8import contextMenu from './contextMenu';
9import './notifications'; 9import './notifications';
10 10
11const debug = require('debug')('Plugin'); 11const debug = require('debug')('Franz:Plugin');
12
13window.franzSettings = {};
14let serviceData;
12 15
13ipcRenderer.on('initializeRecipe', (e, data) => { 16ipcRenderer.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
26const spellchecker = new Spellchecker(); 36// Needs to run asap to intialize dictionaries
27spellchecker.initialize(); 37(async () => {
38 const spellcheckingProvider = await spellchecker();
39 contextMenu(spellcheckingProvider);
40})();
28 41
29const contextMenuBuilder = new ContextMenuBuilder(spellchecker.handler, null, isDevMode); 42ipcRenderer.on('settings-update', async (e, data) => {
43 debug('Settings update received', data);
30 44
31new 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
35ipcRenderer.on('settings-update', (e, data) => { 54ipcRenderer.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 🤦‍
69ipcRenderer.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
42document.addEventListener('DOMContentLoaded', () => { 76document.addEventListener('DOMContentLoaded', () => {
43 ipcRenderer.sendToHost('hello'); 77 ipcRenderer.sendToHost('hello');
@@ -47,7 +81,7 @@ document.addEventListener('DOMContentLoaded', () => {
47const originalWindowOpen = window.open; 81const originalWindowOpen = window.open;
48 82
49window.open = (url, frameName, features) => { 83window.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 }