diff options
Diffstat (limited to 'src/webview/recipe.js')
-rw-r--r-- | src/webview/recipe.js | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/src/webview/recipe.js b/src/webview/recipe.js index 027d22c0a..2bf8f757a 100644 --- a/src/webview/recipe.js +++ b/src/webview/recipe.js | |||
@@ -1,8 +1,16 @@ | |||
1 | import { ipcRenderer } from 'electron'; | 1 | import { ipcRenderer } from 'electron'; |
2 | import path from 'path'; | 2 | import path from 'path'; |
3 | import { autorun, computed, observable } from 'mobx'; | 3 | import { autorun, computed, observable } from 'mobx'; |
4 | import fs from 'fs-extra'; | ||
4 | import { loadModule } from 'cld3-asm'; | 5 | import { loadModule } from 'cld3-asm'; |
5 | import { debounce } from 'lodash'; | 6 | import { debounce } from 'lodash'; |
7 | import { | ||
8 | enable as enableDarkMode, | ||
9 | disable as disableDarkMode, | ||
10 | } from 'darkreader'; | ||
11 | |||
12 | import ignoreList from './darkmode/ignore'; | ||
13 | import customDarkModeCss from './darkmode/custom'; | ||
6 | 14 | ||
7 | import RecipeWebview from './lib/RecipeWebview'; | 15 | import RecipeWebview from './lib/RecipeWebview'; |
8 | 16 | ||
@@ -14,7 +22,7 @@ import './notifications'; | |||
14 | import { DEFAULT_APP_SETTINGS } from '../config'; | 22 | import { DEFAULT_APP_SETTINGS } from '../config'; |
15 | import { isDevMode } from '../environment'; | 23 | import { isDevMode } from '../environment'; |
16 | 24 | ||
17 | const debug = require('debug')('Franz:Plugin'); | 25 | const debug = require('debug')('Ferdi:Plugin'); |
18 | 26 | ||
19 | class RecipeController { | 27 | class RecipeController { |
20 | @observable settings = { | 28 | @observable settings = { |
@@ -35,6 +43,8 @@ class RecipeController { | |||
35 | 'get-service-id': 'serviceIdEcho', | 43 | 'get-service-id': 'serviceIdEcho', |
36 | }; | 44 | }; |
37 | 45 | ||
46 | universalDarkModeInjected = false; | ||
47 | |||
38 | constructor() { | 48 | constructor() { |
39 | this.initialize(); | 49 | this.initialize(); |
40 | } | 50 | } |
@@ -112,10 +122,35 @@ class RecipeController { | |||
112 | 122 | ||
113 | if (this.settings.service.isDarkModeEnabled) { | 123 | if (this.settings.service.isDarkModeEnabled) { |
114 | debug('Enable dark mode'); | 124 | debug('Enable dark mode'); |
115 | injectDarkModeStyle(this.settings.service.recipe.path); | 125 | |
116 | } else if (isDarkModeStyleInjected()) { | 126 | // Check if recipe has a darkmode.css |
127 | const darkModeStyle = path.join(this.settings.service.recipe.path, 'darkmode.css'); | ||
128 | const darkModeExists = fs.pathExistsSync(darkModeStyle); | ||
129 | |||
130 | if (darkModeExists) { | ||
131 | injectDarkModeStyle(this.settings.service.recipe.path); | ||
132 | } else if (this.settings.app.universalDarkMode && !ignoreList.includes(window.location.host)) { | ||
133 | // Use darkreader instead | ||
134 | enableDarkMode({}, { | ||
135 | css: customDarkModeCss[window.location.host] || '', | ||
136 | }); | ||
137 | this.universalDarkModeInjected = true; | ||
138 | } | ||
139 | } else { | ||
117 | debug('Remove dark mode'); | 140 | debug('Remove dark mode'); |
118 | removeDarkModeStyle(); | 141 | |
142 | if (isDarkModeStyleInjected()) { | ||
143 | removeDarkModeStyle(); | ||
144 | } else { | ||
145 | disableDarkMode(); | ||
146 | this.universalDarkModeInjected = false; | ||
147 | } | ||
148 | } | ||
149 | |||
150 | // Remove dark reader if (universal) dark mode was just disabled | ||
151 | if (this.universalDarkModeInjected && (!this.settings.service.isDarkModeEnabled || !this.settings.app.universalDarkMode)) { | ||
152 | disableDarkMode(); | ||
153 | this.universalDarkModeInjected = false; | ||
119 | } | 154 | } |
120 | } | 155 | } |
121 | 156 | ||