aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar vantezzen <hello@vantezzen.io>2019-10-17 21:48:38 +0200
committerLibravatar vantezzen <hello@vantezzen.io>2019-10-17 21:48:38 +0200
commitc44cb8dc2203262b4ad52210adf40e0d022671eb (patch)
tree8a3a15a161a048f06203b9ee66763df63ab3c3ba
parentMerge pull request #124 from getferdi/l10n_develop (diff)
downloadferdium-app-c44cb8dc2203262b4ad52210adf40e0d022671eb.tar.gz
ferdium-app-c44cb8dc2203262b4ad52210adf40e0d022671eb.tar.zst
ferdium-app-c44cb8dc2203262b4ad52210adf40e0d022671eb.zip
Add toggle to disable universal dark mode
-rw-r--r--src/components/settings/settings/EditSettingsForm.js22
-rw-r--r--src/config.js1
-rw-r--r--src/containers/settings/EditSettingsScreen.js11
-rw-r--r--src/i18n/locales/defaultMessages.json118
-rw-r--r--src/i18n/locales/en-US.json2
-rw-r--r--src/i18n/messages/src/components/settings/settings/EditSettingsForm.json69
-rw-r--r--src/i18n/messages/src/containers/settings/EditSettingsScreen.json49
-rw-r--r--src/stores/ServicesStore.js5
-rw-r--r--src/webview/recipe.js12
-rw-r--r--src/webview/spellchecker.js2
10 files changed, 197 insertions, 94 deletions
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index a826479ad..2be5c4ed7 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -79,6 +79,10 @@ const messages = defineMessages({
79 id: 'settings.app.headlineAppearance', 79 id: 'settings.app.headlineAppearance',
80 defaultMessage: '!!!Appearance', 80 defaultMessage: '!!!Appearance',
81 }, 81 },
82 universalDarkModeInfo: {
83 id: 'settings.app.universalDarkModeInfo',
84 defaultMessage: '!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.',
85 },
82 accentColorInfo: { 86 accentColorInfo: {
83 id: 'settings.app.accentColorInfo', 87 id: 'settings.app.accentColorInfo',
84 defaultMessage: '!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)', 88 defaultMessage: '!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)',
@@ -156,6 +160,7 @@ export default @observer class EditSettingsForm extends Component {
156 server: PropTypes.string.isRequired, 160 server: PropTypes.string.isRequired,
157 noUpdates: PropTypes.bool.isRequired, 161 noUpdates: PropTypes.bool.isRequired,
158 hibernationEnabled: PropTypes.bool.isRequired, 162 hibernationEnabled: PropTypes.bool.isRequired,
163 isDarkmodeEnabled: PropTypes.bool.isRequired,
159 openProcessManager: PropTypes.func.isRequired, 164 openProcessManager: PropTypes.func.isRequired,
160 }; 165 };
161 166
@@ -192,6 +197,7 @@ export default @observer class EditSettingsForm extends Component {
192 server, 197 server,
193 noUpdates, 198 noUpdates,
194 hibernationEnabled, 199 hibernationEnabled,
200 isDarkmodeEnabled,
195 openProcessManager, 201 openProcessManager,
196 } = this.props; 202 } = this.props;
197 const { intl } = this.context; 203 const { intl } = this.context;
@@ -377,6 +383,22 @@ export default @observer class EditSettingsForm extends Component {
377 <Toggle field={form.$('showDisabledServices')} /> 383 <Toggle field={form.$('showDisabledServices')} />
378 <Toggle field={form.$('showMessageBadgeWhenMuted')} /> 384 <Toggle field={form.$('showMessageBadgeWhenMuted')} />
379 <Toggle field={form.$('darkMode')} /> 385 <Toggle field={form.$('darkMode')} />
386 {isDarkmodeEnabled && (
387 <>
388 <Toggle field={form.$('universalDarkMode')} />
389 <p
390 className="settings__message"
391 style={{
392 borderTop: 0, marginTop: 0, paddingTop: 0, marginBottom: '2rem',
393 }}
394 >
395 <span>
396 { intl.formatMessage(messages.universalDarkModeInfo) }
397 </span>
398 </p>
399 </>
400 )}
401
380 <Input 402 <Input
381 placeholder="Accent Color" 403 placeholder="Accent Color"
382 onChange={e => this.submit(e)} 404 onChange={e => this.submit(e)}
diff --git a/src/config.js b/src/config.js
index d9ef67530..ae07ab0de 100644
--- a/src/config.js
+++ b/src/config.js
@@ -76,6 +76,7 @@ export const DEFAULT_APP_SETTINGS = {
76 hibernationStrategy: 300, 76 hibernationStrategy: 300,
77 noUpdates: false, 77 noUpdates: false,
78 showServiceNavigationBar: false, 78 showServiceNavigationBar: false,
79 universalDarkMode: true,
79 accentColor: '#7367f0', 80 accentColor: '#7367f0',
80}; 81};
81 82
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index 7b0633f79..e5dd2d4fc 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -98,6 +98,10 @@ const messages = defineMessages({
98 id: 'settings.app.form.darkMode', 98 id: 'settings.app.form.darkMode',
99 defaultMessage: '!!!Dark Mode', 99 defaultMessage: '!!!Dark Mode',
100 }, 100 },
101 universalDarkMode: {
102 id: 'settings.app.form.universalDarkMode',
103 defaultMessage: '!!!Enable universal Dark Mode',
104 },
101 accentColor: { 105 accentColor: {
102 id: 'settings.app.form.accentColor', 106 id: 'settings.app.form.accentColor',
103 defaultMessage: '!!!Accent color', 107 defaultMessage: '!!!Accent color',
@@ -176,6 +180,7 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e
176 enableGPUAcceleration: settingsData.enableGPUAcceleration, 180 enableGPUAcceleration: settingsData.enableGPUAcceleration,
177 showDisabledServices: settingsData.showDisabledServices, 181 showDisabledServices: settingsData.showDisabledServices,
178 darkMode: settingsData.darkMode, 182 darkMode: settingsData.darkMode,
183 universalDarkMode: settingsData.universalDarkMode,
179 accentColor: settingsData.accentColor, 184 accentColor: settingsData.accentColor,
180 showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted, 185 showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted,
181 enableSpellchecking: settingsData.enableSpellchecking, 186 enableSpellchecking: settingsData.enableSpellchecking,
@@ -345,6 +350,11 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e
345 value: settings.all.app.darkMode, 350 value: settings.all.app.darkMode,
346 default: DEFAULT_APP_SETTINGS.darkMode, 351 default: DEFAULT_APP_SETTINGS.darkMode,
347 }, 352 },
353 universalDarkMode: {
354 label: intl.formatMessage(messages.universalDarkMode),
355 value: settings.all.app.universalDarkMode,
356 default: DEFAULT_APP_SETTINGS.universalDarkMode,
357 },
348 accentColor: { 358 accentColor: {
349 label: intl.formatMessage(messages.accentColor), 359 label: intl.formatMessage(messages.accentColor),
350 value: settings.all.app.accentColor, 360 value: settings.all.app.accentColor,
@@ -435,6 +445,7 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e
435 lockingFeatureEnabled={lockingFeatureEnabled} 445 lockingFeatureEnabled={lockingFeatureEnabled}
436 noUpdates={this.props.stores.settings.app.noUpdates} 446 noUpdates={this.props.stores.settings.app.noUpdates}
437 hibernationEnabled={this.props.stores.settings.app.hibernate} 447 hibernationEnabled={this.props.stores.settings.app.hibernate}
448 isDarkmodeEnabled={this.props.stores.settings.app.darkMode}
438 openProcessManager={() => this.openProcessManager()} 449 openProcessManager={() => this.openProcessManager()}
439 /> 450 />
440 </ErrorBoundary> 451 </ErrorBoundary>
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index f9afe6213..6f380af3b 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -2657,185 +2657,198 @@
2657 } 2657 }
2658 }, 2658 },
2659 { 2659 {
2660 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)", 2660 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
2661 "end": { 2661 "end": {
2662 "column": 3, 2662 "column": 3,
2663 "line": 85 2663 "line": 85
2664 }, 2664 },
2665 "file": "src/components/settings/settings/EditSettingsForm.js", 2665 "file": "src/components/settings/settings/EditSettingsForm.js",
2666 "id": "settings.app.universalDarkModeInfo",
2667 "start": {
2668 "column": 25,
2669 "line": 82
2670 }
2671 },
2672 {
2673 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)",
2674 "end": {
2675 "column": 3,
2676 "line": 89
2677 },
2678 "file": "src/components/settings/settings/EditSettingsForm.js",
2666 "id": "settings.app.accentColorInfo", 2679 "id": "settings.app.accentColorInfo",
2667 "start": { 2680 "start": {
2668 "column": 19, 2681 "column": 19,
2669 "line": 82 2682 "line": 86
2670 } 2683 }
2671 }, 2684 },
2672 { 2685 {
2673 "defaultMessage": "!!!Advanced", 2686 "defaultMessage": "!!!Advanced",
2674 "end": { 2687 "end": {
2675 "column": 3, 2688 "column": 3,
2676 "line": 89 2689 "line": 93
2677 }, 2690 },
2678 "file": "src/components/settings/settings/EditSettingsForm.js", 2691 "file": "src/components/settings/settings/EditSettingsForm.js",
2679 "id": "settings.app.headlineAdvanced", 2692 "id": "settings.app.headlineAdvanced",
2680 "start": { 2693 "start": {
2681 "column": 20, 2694 "column": 20,
2682 "line": 86 2695 "line": 90
2683 } 2696 }
2684 }, 2697 },
2685 { 2698 {
2686 "defaultMessage": "!!!Help us to translate Ferdi into your language.", 2699 "defaultMessage": "!!!Help us to translate Ferdi into your language.",
2687 "end": { 2700 "end": {
2688 "column": 3, 2701 "column": 3,
2689 "line": 93 2702 "line": 97
2690 }, 2703 },
2691 "file": "src/components/settings/settings/EditSettingsForm.js", 2704 "file": "src/components/settings/settings/EditSettingsForm.js",
2692 "id": "settings.app.translationHelp", 2705 "id": "settings.app.translationHelp",
2693 "start": { 2706 "start": {
2694 "column": 19, 2707 "column": 19,
2695 "line": 90 2708 "line": 94
2696 } 2709 }
2697 }, 2710 },
2698 { 2711 {
2699 "defaultMessage": "!!!Cache", 2712 "defaultMessage": "!!!Cache",
2700 "end": { 2713 "end": {
2701 "column": 3, 2714 "column": 3,
2702 "line": 97 2715 "line": 101
2703 }, 2716 },
2704 "file": "src/components/settings/settings/EditSettingsForm.js", 2717 "file": "src/components/settings/settings/EditSettingsForm.js",
2705 "id": "settings.app.subheadlineCache", 2718 "id": "settings.app.subheadlineCache",
2706 "start": { 2719 "start": {
2707 "column": 20, 2720 "column": 20,
2708 "line": 94 2721 "line": 98
2709 } 2722 }
2710 }, 2723 },
2711 { 2724 {
2712 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", 2725 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.",
2713 "end": { 2726 "end": {
2714 "column": 3, 2727 "column": 3,
2715 "line": 101 2728 "line": 105
2716 }, 2729 },
2717 "file": "src/components/settings/settings/EditSettingsForm.js", 2730 "file": "src/components/settings/settings/EditSettingsForm.js",
2718 "id": "settings.app.cacheInfo", 2731 "id": "settings.app.cacheInfo",
2719 "start": { 2732 "start": {
2720 "column": 13, 2733 "column": 13,
2721 "line": 98 2734 "line": 102
2722 } 2735 }
2723 }, 2736 },
2724 { 2737 {
2725 "defaultMessage": "!!!Clear cache", 2738 "defaultMessage": "!!!Clear cache",
2726 "end": { 2739 "end": {
2727 "column": 3, 2740 "column": 3,
2728 "line": 105 2741 "line": 109
2729 }, 2742 },
2730 "file": "src/components/settings/settings/EditSettingsForm.js", 2743 "file": "src/components/settings/settings/EditSettingsForm.js",
2731 "id": "settings.app.buttonClearAllCache", 2744 "id": "settings.app.buttonClearAllCache",
2732 "start": { 2745 "start": {
2733 "column": 23, 2746 "column": 23,
2734 "line": 102 2747 "line": 106
2735 } 2748 }
2736 }, 2749 },
2737 { 2750 {
2738 "defaultMessage": "!!!Check for updates", 2751 "defaultMessage": "!!!Check for updates",
2739 "end": { 2752 "end": {
2740 "column": 3, 2753 "column": 3,
2741 "line": 109 2754 "line": 113
2742 }, 2755 },
2743 "file": "src/components/settings/settings/EditSettingsForm.js", 2756 "file": "src/components/settings/settings/EditSettingsForm.js",
2744 "id": "settings.app.buttonSearchForUpdate", 2757 "id": "settings.app.buttonSearchForUpdate",
2745 "start": { 2758 "start": {
2746 "column": 25, 2759 "column": 25,
2747 "line": 106 2760 "line": 110
2748 } 2761 }
2749 }, 2762 },
2750 { 2763 {
2751 "defaultMessage": "!!!Restart & install update", 2764 "defaultMessage": "!!!Restart & install update",
2752 "end": { 2765 "end": {
2753 "column": 3, 2766 "column": 3,
2754 "line": 113 2767 "line": 117
2755 }, 2768 },
2756 "file": "src/components/settings/settings/EditSettingsForm.js", 2769 "file": "src/components/settings/settings/EditSettingsForm.js",
2757 "id": "settings.app.buttonInstallUpdate", 2770 "id": "settings.app.buttonInstallUpdate",
2758 "start": { 2771 "start": {
2759 "column": 23, 2772 "column": 23,
2760 "line": 110 2773 "line": 114
2761 } 2774 }
2762 }, 2775 },
2763 { 2776 {
2764 "defaultMessage": "!!!Is searching for update", 2777 "defaultMessage": "!!!Is searching for update",
2765 "end": { 2778 "end": {
2766 "column": 3, 2779 "column": 3,
2767 "line": 117 2780 "line": 121
2768 }, 2781 },
2769 "file": "src/components/settings/settings/EditSettingsForm.js", 2782 "file": "src/components/settings/settings/EditSettingsForm.js",
2770 "id": "settings.app.updateStatusSearching", 2783 "id": "settings.app.updateStatusSearching",
2771 "start": { 2784 "start": {
2772 "column": 25, 2785 "column": 25,
2773 "line": 114 2786 "line": 118
2774 } 2787 }
2775 }, 2788 },
2776 { 2789 {
2777 "defaultMessage": "!!!Update available, downloading...", 2790 "defaultMessage": "!!!Update available, downloading...",
2778 "end": { 2791 "end": {
2779 "column": 3, 2792 "column": 3,
2780 "line": 121 2793 "line": 125
2781 }, 2794 },
2782 "file": "src/components/settings/settings/EditSettingsForm.js", 2795 "file": "src/components/settings/settings/EditSettingsForm.js",
2783 "id": "settings.app.updateStatusAvailable", 2796 "id": "settings.app.updateStatusAvailable",
2784 "start": { 2797 "start": {
2785 "column": 25, 2798 "column": 25,
2786 "line": 118 2799 "line": 122
2787 } 2800 }
2788 }, 2801 },
2789 { 2802 {
2790 "defaultMessage": "!!!You are using the latest version of Ferdi", 2803 "defaultMessage": "!!!You are using the latest version of Ferdi",
2791 "end": { 2804 "end": {
2792 "column": 3, 2805 "column": 3,
2793 "line": 125 2806 "line": 129
2794 }, 2807 },
2795 "file": "src/components/settings/settings/EditSettingsForm.js", 2808 "file": "src/components/settings/settings/EditSettingsForm.js",
2796 "id": "settings.app.updateStatusUpToDate", 2809 "id": "settings.app.updateStatusUpToDate",
2797 "start": { 2810 "start": {
2798 "column": 24, 2811 "column": 24,
2799 "line": 122 2812 "line": 126
2800 } 2813 }
2801 }, 2814 },
2802 { 2815 {
2803 "defaultMessage": "!!!Current version:", 2816 "defaultMessage": "!!!Current version:",
2804 "end": { 2817 "end": {
2805 "column": 3, 2818 "column": 3,
2806 "line": 129 2819 "line": 133
2807 }, 2820 },
2808 "file": "src/components/settings/settings/EditSettingsForm.js", 2821 "file": "src/components/settings/settings/EditSettingsForm.js",
2809 "id": "settings.app.currentVersion", 2822 "id": "settings.app.currentVersion",
2810 "start": { 2823 "start": {
2811 "column": 18, 2824 "column": 18,
2812 "line": 126 2825 "line": 130
2813 } 2826 }
2814 }, 2827 },
2815 { 2828 {
2816 "defaultMessage": "!!!Changes require restart", 2829 "defaultMessage": "!!!Changes require restart",
2817 "end": { 2830 "end": {
2818 "column": 3, 2831 "column": 3,
2819 "line": 133 2832 "line": 137
2820 }, 2833 },
2821 "file": "src/components/settings/settings/EditSettingsForm.js", 2834 "file": "src/components/settings/settings/EditSettingsForm.js",
2822 "id": "settings.app.restartRequired", 2835 "id": "settings.app.restartRequired",
2823 "start": { 2836 "start": {
2824 "column": 29, 2837 "column": 29,
2825 "line": 130 2838 "line": 134
2826 } 2839 }
2827 }, 2840 },
2828 { 2841 {
2829 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", 2842 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
2830 "end": { 2843 "end": {
2831 "column": 3, 2844 "column": 3,
2832 "line": 137 2845 "line": 141
2833 }, 2846 },
2834 "file": "src/components/settings/settings/EditSettingsForm.js", 2847 "file": "src/components/settings/settings/EditSettingsForm.js",
2835 "id": "settings.app.languageDisclaimer", 2848 "id": "settings.app.languageDisclaimer",
2836 "start": { 2849 "start": {
2837 "column": 22, 2850 "column": 22,
2838 "line": 134 2851 "line": 138
2839 } 2852 }
2840 } 2853 }
2841 ], 2854 ],
@@ -4032,120 +4045,133 @@
4032 } 4045 }
4033 }, 4046 },
4034 { 4047 {
4035 "defaultMessage": "!!!Accent color", 4048 "defaultMessage": "!!!Enable universal Dark Mode",
4036 "end": { 4049 "end": {
4037 "column": 3, 4050 "column": 3,
4038 "line": 104 4051 "line": 104
4039 }, 4052 },
4040 "file": "src/containers/settings/EditSettingsScreen.js", 4053 "file": "src/containers/settings/EditSettingsScreen.js",
4054 "id": "settings.app.form.universalDarkMode",
4055 "start": {
4056 "column": 21,
4057 "line": 101
4058 }
4059 },
4060 {
4061 "defaultMessage": "!!!Accent color",
4062 "end": {
4063 "column": 3,
4064 "line": 108
4065 },
4066 "file": "src/containers/settings/EditSettingsScreen.js",
4041 "id": "settings.app.form.accentColor", 4067 "id": "settings.app.form.accentColor",
4042 "start": { 4068 "start": {
4043 "column": 15, 4069 "column": 15,
4044 "line": 101 4070 "line": 105
4045 } 4071 }
4046 }, 4072 },
4047 { 4073 {
4048 "defaultMessage": "!!!Display disabled services tabs", 4074 "defaultMessage": "!!!Display disabled services tabs",
4049 "end": { 4075 "end": {
4050 "column": 3, 4076 "column": 3,
4051 "line": 108 4077 "line": 112
4052 }, 4078 },
4053 "file": "src/containers/settings/EditSettingsScreen.js", 4079 "file": "src/containers/settings/EditSettingsScreen.js",
4054 "id": "settings.app.form.showDisabledServices", 4080 "id": "settings.app.form.showDisabledServices",
4055 "start": { 4081 "start": {
4056 "column": 24, 4082 "column": 24,
4057 "line": 105 4083 "line": 109
4058 } 4084 }
4059 }, 4085 },
4060 { 4086 {
4061 "defaultMessage": "!!!Show unread message badge when notifications are disabled", 4087 "defaultMessage": "!!!Show unread message badge when notifications are disabled",
4062 "end": { 4088 "end": {
4063 "column": 3, 4089 "column": 3,
4064 "line": 112 4090 "line": 116
4065 }, 4091 },
4066 "file": "src/containers/settings/EditSettingsScreen.js", 4092 "file": "src/containers/settings/EditSettingsScreen.js",
4067 "id": "settings.app.form.showMessagesBadgesWhenMuted", 4093 "id": "settings.app.form.showMessagesBadgesWhenMuted",
4068 "start": { 4094 "start": {
4069 "column": 29, 4095 "column": 29,
4070 "line": 109 4096 "line": 113
4071 } 4097 }
4072 }, 4098 },
4073 { 4099 {
4074 "defaultMessage": "!!!Enable spell checking", 4100 "defaultMessage": "!!!Enable spell checking",
4075 "end": { 4101 "end": {
4076 "column": 3, 4102 "column": 3,
4077 "line": 116 4103 "line": 120
4078 }, 4104 },
4079 "file": "src/containers/settings/EditSettingsScreen.js", 4105 "file": "src/containers/settings/EditSettingsScreen.js",
4080 "id": "settings.app.form.enableSpellchecking", 4106 "id": "settings.app.form.enableSpellchecking",
4081 "start": { 4107 "start": {
4082 "column": 23, 4108 "column": 23,
4083 "line": 113 4109 "line": 117
4084 } 4110 }
4085 }, 4111 },
4086 { 4112 {
4087 "defaultMessage": "!!!Enable GPU Acceleration", 4113 "defaultMessage": "!!!Enable GPU Acceleration",
4088 "end": { 4114 "end": {
4089 "column": 3, 4115 "column": 3,
4090 "line": 120 4116 "line": 124
4091 }, 4117 },
4092 "file": "src/containers/settings/EditSettingsScreen.js", 4118 "file": "src/containers/settings/EditSettingsScreen.js",
4093 "id": "settings.app.form.enableGPUAcceleration", 4119 "id": "settings.app.form.enableGPUAcceleration",
4094 "start": { 4120 "start": {
4095 "column": 25, 4121 "column": 25,
4096 "line": 117 4122 "line": 121
4097 } 4123 }
4098 }, 4124 },
4099 { 4125 {
4100 "defaultMessage": "!!!Include beta versions", 4126 "defaultMessage": "!!!Include beta versions",
4101 "end": { 4127 "end": {
4102 "column": 3, 4128 "column": 3,
4103 "line": 124 4129 "line": 128
4104 }, 4130 },
4105 "file": "src/containers/settings/EditSettingsScreen.js", 4131 "file": "src/containers/settings/EditSettingsScreen.js",
4106 "id": "settings.app.form.beta", 4132 "id": "settings.app.form.beta",
4107 "start": { 4133 "start": {
4108 "column": 8, 4134 "column": 8,
4109 "line": 121 4135 "line": 125
4110 } 4136 }
4111 }, 4137 },
4112 { 4138 {
4113 "defaultMessage": "!!!Disable updates", 4139 "defaultMessage": "!!!Disable updates",
4114 "end": { 4140 "end": {
4115 "column": 3, 4141 "column": 3,
4116 "line": 128 4142 "line": 132
4117 }, 4143 },
4118 "file": "src/containers/settings/EditSettingsScreen.js", 4144 "file": "src/containers/settings/EditSettingsScreen.js",
4119 "id": "settings.app.form.noUpdates", 4145 "id": "settings.app.form.noUpdates",
4120 "start": { 4146 "start": {
4121 "column": 13, 4147 "column": 13,
4122 "line": 125 4148 "line": 129
4123 } 4149 }
4124 }, 4150 },
4125 { 4151 {
4126 "defaultMessage": "!!!Enable Franz Todos", 4152 "defaultMessage": "!!!Enable Franz Todos",
4127 "end": { 4153 "end": {
4128 "column": 3, 4154 "column": 3,
4129 "line": 132 4155 "line": 136
4130 }, 4156 },
4131 "file": "src/containers/settings/EditSettingsScreen.js", 4157 "file": "src/containers/settings/EditSettingsScreen.js",
4132 "id": "settings.app.form.enableTodos", 4158 "id": "settings.app.form.enableTodos",
4133 "start": { 4159 "start": {
4134 "column": 15, 4160 "column": 15,
4135 "line": 129 4161 "line": 133
4136 } 4162 }
4137 }, 4163 },
4138 { 4164 {
4139 "defaultMessage": "!!!Keep all workspaces loaded", 4165 "defaultMessage": "!!!Keep all workspaces loaded",
4140 "end": { 4166 "end": {
4141 "column": 3, 4167 "column": 3,
4142 "line": 136 4168 "line": 140
4143 }, 4169 },
4144 "file": "src/containers/settings/EditSettingsScreen.js", 4170 "file": "src/containers/settings/EditSettingsScreen.js",
4145 "id": "settings.app.form.keepAllWorkspacesLoaded", 4171 "id": "settings.app.form.keepAllWorkspacesLoaded",
4146 "start": { 4172 "start": {
4147 "column": 27, 4173 "column": 27,
4148 "line": 133 4174 "line": 137
4149 } 4175 }
4150 } 4176 }
4151 ], 4177 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index d3dabc364..e1ee6f824 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -247,6 +247,7 @@
247 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 247 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
248 "settings.app.form.showServiceNavigationBar": "Always show service navigation bar", 248 "settings.app.form.showServiceNavigationBar": "Always show service navigation bar",
249 "settings.app.form.todoServer": "Todo Server", 249 "settings.app.form.todoServer": "Todo Server",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
250 "settings.app.headline": "Settings", 251 "settings.app.headline": "Settings",
251 "settings.app.headlineAdvanced": "Advanced", 252 "settings.app.headlineAdvanced": "Advanced",
252 "settings.app.headlineAppearance": "Appearance", 253 "settings.app.headlineAppearance": "Appearance",
@@ -266,6 +267,7 @@
266 "settings.app.subheadlineCache": "Cache", 267 "settings.app.subheadlineCache": "Cache",
267 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature. (default: https://app.franztodos.com)", 268 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature. (default: https://app.franztodos.com)",
268 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 269 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
270 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
269 "settings.app.updateStatusAvailable": "Update available, downloading...", 271 "settings.app.updateStatusAvailable": "Update available, downloading...",
270 "settings.app.updateStatusSearching": "Is searching for update", 272 "settings.app.updateStatusSearching": "Is searching for update",
271 "settings.app.updateStatusUpToDate": "You are using the latest version of Ferdi", 273 "settings.app.updateStatusUpToDate": "You are using the latest version of Ferdi",
diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
index 16d8e7816..70c4fb87f 100644
--- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
+++ b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
@@ -182,15 +182,28 @@
182 } 182 }
183 }, 183 },
184 { 184 {
185 "id": "settings.app.universalDarkModeInfo",
186 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
187 "file": "src/components/settings/settings/EditSettingsForm.js",
188 "start": {
189 "line": 82,
190 "column": 25
191 },
192 "end": {
193 "line": 85,
194 "column": 3
195 }
196 },
197 {
185 "id": "settings.app.accentColorInfo", 198 "id": "settings.app.accentColorInfo",
186 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)", 199 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)",
187 "file": "src/components/settings/settings/EditSettingsForm.js", 200 "file": "src/components/settings/settings/EditSettingsForm.js",
188 "start": { 201 "start": {
189 "line": 82, 202 "line": 86,
190 "column": 19 203 "column": 19
191 }, 204 },
192 "end": { 205 "end": {
193 "line": 85, 206 "line": 89,
194 "column": 3 207 "column": 3
195 } 208 }
196 }, 209 },
@@ -199,11 +212,11 @@
199 "defaultMessage": "!!!Advanced", 212 "defaultMessage": "!!!Advanced",
200 "file": "src/components/settings/settings/EditSettingsForm.js", 213 "file": "src/components/settings/settings/EditSettingsForm.js",
201 "start": { 214 "start": {
202 "line": 86, 215 "line": 90,
203 "column": 20 216 "column": 20
204 }, 217 },
205 "end": { 218 "end": {
206 "line": 89, 219 "line": 93,
207 "column": 3 220 "column": 3
208 } 221 }
209 }, 222 },
@@ -212,11 +225,11 @@
212 "defaultMessage": "!!!Help us to translate Ferdi into your language.", 225 "defaultMessage": "!!!Help us to translate Ferdi into your language.",
213 "file": "src/components/settings/settings/EditSettingsForm.js", 226 "file": "src/components/settings/settings/EditSettingsForm.js",
214 "start": { 227 "start": {
215 "line": 90, 228 "line": 94,
216 "column": 19 229 "column": 19
217 }, 230 },
218 "end": { 231 "end": {
219 "line": 93, 232 "line": 97,
220 "column": 3 233 "column": 3
221 } 234 }
222 }, 235 },
@@ -225,11 +238,11 @@
225 "defaultMessage": "!!!Cache", 238 "defaultMessage": "!!!Cache",
226 "file": "src/components/settings/settings/EditSettingsForm.js", 239 "file": "src/components/settings/settings/EditSettingsForm.js",
227 "start": { 240 "start": {
228 "line": 94, 241 "line": 98,
229 "column": 20 242 "column": 20
230 }, 243 },
231 "end": { 244 "end": {
232 "line": 97, 245 "line": 101,
233 "column": 3 246 "column": 3
234 } 247 }
235 }, 248 },
@@ -238,11 +251,11 @@
238 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", 251 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.",
239 "file": "src/components/settings/settings/EditSettingsForm.js", 252 "file": "src/components/settings/settings/EditSettingsForm.js",
240 "start": { 253 "start": {
241 "line": 98, 254 "line": 102,
242 "column": 13 255 "column": 13
243 }, 256 },
244 "end": { 257 "end": {
245 "line": 101, 258 "line": 105,
246 "column": 3 259 "column": 3
247 } 260 }
248 }, 261 },
@@ -251,11 +264,11 @@
251 "defaultMessage": "!!!Clear cache", 264 "defaultMessage": "!!!Clear cache",
252 "file": "src/components/settings/settings/EditSettingsForm.js", 265 "file": "src/components/settings/settings/EditSettingsForm.js",
253 "start": { 266 "start": {
254 "line": 102, 267 "line": 106,
255 "column": 23 268 "column": 23
256 }, 269 },
257 "end": { 270 "end": {
258 "line": 105, 271 "line": 109,
259 "column": 3 272 "column": 3
260 } 273 }
261 }, 274 },
@@ -264,11 +277,11 @@
264 "defaultMessage": "!!!Check for updates", 277 "defaultMessage": "!!!Check for updates",
265 "file": "src/components/settings/settings/EditSettingsForm.js", 278 "file": "src/components/settings/settings/EditSettingsForm.js",
266 "start": { 279 "start": {
267 "line": 106, 280 "line": 110,
268 "column": 25 281 "column": 25
269 }, 282 },
270 "end": { 283 "end": {
271 "line": 109, 284 "line": 113,
272 "column": 3 285 "column": 3
273 } 286 }
274 }, 287 },
@@ -277,11 +290,11 @@
277 "defaultMessage": "!!!Restart & install update", 290 "defaultMessage": "!!!Restart & install update",
278 "file": "src/components/settings/settings/EditSettingsForm.js", 291 "file": "src/components/settings/settings/EditSettingsForm.js",
279 "start": { 292 "start": {
280 "line": 110, 293 "line": 114,
281 "column": 23 294 "column": 23
282 }, 295 },
283 "end": { 296 "end": {
284 "line": 113, 297 "line": 117,
285 "column": 3 298 "column": 3
286 } 299 }
287 }, 300 },
@@ -290,11 +303,11 @@
290 "defaultMessage": "!!!Is searching for update", 303 "defaultMessage": "!!!Is searching for update",
291 "file": "src/components/settings/settings/EditSettingsForm.js", 304 "file": "src/components/settings/settings/EditSettingsForm.js",
292 "start": { 305 "start": {
293 "line": 114, 306 "line": 118,
294 "column": 25 307 "column": 25
295 }, 308 },
296 "end": { 309 "end": {
297 "line": 117, 310 "line": 121,
298 "column": 3 311 "column": 3
299 } 312 }
300 }, 313 },
@@ -303,11 +316,11 @@
303 "defaultMessage": "!!!Update available, downloading...", 316 "defaultMessage": "!!!Update available, downloading...",
304 "file": "src/components/settings/settings/EditSettingsForm.js", 317 "file": "src/components/settings/settings/EditSettingsForm.js",
305 "start": { 318 "start": {
306 "line": 118, 319 "line": 122,
307 "column": 25 320 "column": 25
308 }, 321 },
309 "end": { 322 "end": {
310 "line": 121, 323 "line": 125,
311 "column": 3 324 "column": 3
312 } 325 }
313 }, 326 },
@@ -316,11 +329,11 @@
316 "defaultMessage": "!!!You are using the latest version of Ferdi", 329 "defaultMessage": "!!!You are using the latest version of Ferdi",
317 "file": "src/components/settings/settings/EditSettingsForm.js", 330 "file": "src/components/settings/settings/EditSettingsForm.js",
318 "start": { 331 "start": {
319 "line": 122, 332 "line": 126,
320 "column": 24 333 "column": 24
321 }, 334 },
322 "end": { 335 "end": {
323 "line": 125, 336 "line": 129,
324 "column": 3 337 "column": 3
325 } 338 }
326 }, 339 },
@@ -329,11 +342,11 @@
329 "defaultMessage": "!!!Current version:", 342 "defaultMessage": "!!!Current version:",
330 "file": "src/components/settings/settings/EditSettingsForm.js", 343 "file": "src/components/settings/settings/EditSettingsForm.js",
331 "start": { 344 "start": {
332 "line": 126, 345 "line": 130,
333 "column": 18 346 "column": 18
334 }, 347 },
335 "end": { 348 "end": {
336 "line": 129, 349 "line": 133,
337 "column": 3 350 "column": 3
338 } 351 }
339 }, 352 },
@@ -342,11 +355,11 @@
342 "defaultMessage": "!!!Changes require restart", 355 "defaultMessage": "!!!Changes require restart",
343 "file": "src/components/settings/settings/EditSettingsForm.js", 356 "file": "src/components/settings/settings/EditSettingsForm.js",
344 "start": { 357 "start": {
345 "line": 130, 358 "line": 134,
346 "column": 29 359 "column": 29
347 }, 360 },
348 "end": { 361 "end": {
349 "line": 133, 362 "line": 137,
350 "column": 3 363 "column": 3
351 } 364 }
352 }, 365 },
@@ -355,11 +368,11 @@
355 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", 368 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
356 "file": "src/components/settings/settings/EditSettingsForm.js", 369 "file": "src/components/settings/settings/EditSettingsForm.js",
357 "start": { 370 "start": {
358 "line": 134, 371 "line": 138,
359 "column": 22 372 "column": 22
360 }, 373 },
361 "end": { 374 "end": {
362 "line": 137, 375 "line": 141,
363 "column": 3 376 "column": 3
364 } 377 }
365 } 378 }
diff --git a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json
index bd5efb82e..5ec8fdba7 100644
--- a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json
+++ b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json
@@ -234,15 +234,28 @@
234 } 234 }
235 }, 235 },
236 { 236 {
237 "id": "settings.app.form.universalDarkMode",
238 "defaultMessage": "!!!Enable universal Dark Mode",
239 "file": "src/containers/settings/EditSettingsScreen.js",
240 "start": {
241 "line": 101,
242 "column": 21
243 },
244 "end": {
245 "line": 104,
246 "column": 3
247 }
248 },
249 {
237 "id": "settings.app.form.accentColor", 250 "id": "settings.app.form.accentColor",
238 "defaultMessage": "!!!Accent color", 251 "defaultMessage": "!!!Accent color",
239 "file": "src/containers/settings/EditSettingsScreen.js", 252 "file": "src/containers/settings/EditSettingsScreen.js",
240 "start": { 253 "start": {
241 "line": 101, 254 "line": 105,
242 "column": 15 255 "column": 15
243 }, 256 },
244 "end": { 257 "end": {
245 "line": 104, 258 "line": 108,
246 "column": 3 259 "column": 3
247 } 260 }
248 }, 261 },
@@ -251,11 +264,11 @@
251 "defaultMessage": "!!!Display disabled services tabs", 264 "defaultMessage": "!!!Display disabled services tabs",
252 "file": "src/containers/settings/EditSettingsScreen.js", 265 "file": "src/containers/settings/EditSettingsScreen.js",
253 "start": { 266 "start": {
254 "line": 105, 267 "line": 109,
255 "column": 24 268 "column": 24
256 }, 269 },
257 "end": { 270 "end": {
258 "line": 108, 271 "line": 112,
259 "column": 3 272 "column": 3
260 } 273 }
261 }, 274 },
@@ -264,11 +277,11 @@
264 "defaultMessage": "!!!Show unread message badge when notifications are disabled", 277 "defaultMessage": "!!!Show unread message badge when notifications are disabled",
265 "file": "src/containers/settings/EditSettingsScreen.js", 278 "file": "src/containers/settings/EditSettingsScreen.js",
266 "start": { 279 "start": {
267 "line": 109, 280 "line": 113,
268 "column": 29 281 "column": 29
269 }, 282 },
270 "end": { 283 "end": {
271 "line": 112, 284 "line": 116,
272 "column": 3 285 "column": 3
273 } 286 }
274 }, 287 },
@@ -277,11 +290,11 @@
277 "defaultMessage": "!!!Enable spell checking", 290 "defaultMessage": "!!!Enable spell checking",
278 "file": "src/containers/settings/EditSettingsScreen.js", 291 "file": "src/containers/settings/EditSettingsScreen.js",
279 "start": { 292 "start": {
280 "line": 113, 293 "line": 117,
281 "column": 23 294 "column": 23
282 }, 295 },
283 "end": { 296 "end": {
284 "line": 116, 297 "line": 120,
285 "column": 3 298 "column": 3
286 } 299 }
287 }, 300 },
@@ -290,11 +303,11 @@
290 "defaultMessage": "!!!Enable GPU Acceleration", 303 "defaultMessage": "!!!Enable GPU Acceleration",
291 "file": "src/containers/settings/EditSettingsScreen.js", 304 "file": "src/containers/settings/EditSettingsScreen.js",
292 "start": { 305 "start": {
293 "line": 117, 306 "line": 121,
294 "column": 25 307 "column": 25
295 }, 308 },
296 "end": { 309 "end": {
297 "line": 120, 310 "line": 124,
298 "column": 3 311 "column": 3
299 } 312 }
300 }, 313 },
@@ -303,11 +316,11 @@
303 "defaultMessage": "!!!Include beta versions", 316 "defaultMessage": "!!!Include beta versions",
304 "file": "src/containers/settings/EditSettingsScreen.js", 317 "file": "src/containers/settings/EditSettingsScreen.js",
305 "start": { 318 "start": {
306 "line": 121, 319 "line": 125,
307 "column": 8 320 "column": 8
308 }, 321 },
309 "end": { 322 "end": {
310 "line": 124, 323 "line": 128,
311 "column": 3 324 "column": 3
312 } 325 }
313 }, 326 },
@@ -316,11 +329,11 @@
316 "defaultMessage": "!!!Disable updates", 329 "defaultMessage": "!!!Disable updates",
317 "file": "src/containers/settings/EditSettingsScreen.js", 330 "file": "src/containers/settings/EditSettingsScreen.js",
318 "start": { 331 "start": {
319 "line": 125, 332 "line": 129,
320 "column": 13 333 "column": 13
321 }, 334 },
322 "end": { 335 "end": {
323 "line": 128, 336 "line": 132,
324 "column": 3 337 "column": 3
325 } 338 }
326 }, 339 },
@@ -329,11 +342,11 @@
329 "defaultMessage": "!!!Enable Franz Todos", 342 "defaultMessage": "!!!Enable Franz Todos",
330 "file": "src/containers/settings/EditSettingsScreen.js", 343 "file": "src/containers/settings/EditSettingsScreen.js",
331 "start": { 344 "start": {
332 "line": 129, 345 "line": 133,
333 "column": 15 346 "column": 15
334 }, 347 },
335 "end": { 348 "end": {
336 "line": 132, 349 "line": 136,
337 "column": 3 350 "column": 3
338 } 351 }
339 }, 352 },
@@ -342,11 +355,11 @@
342 "defaultMessage": "!!!Keep all workspaces loaded", 355 "defaultMessage": "!!!Keep all workspaces loaded",
343 "file": "src/containers/settings/EditSettingsScreen.js", 356 "file": "src/containers/settings/EditSettingsScreen.js",
344 "start": { 357 "start": {
345 "line": 133, 358 "line": 137,
346 "column": 27 359 "column": 27
347 }, 360 },
348 "end": { 361 "end": {
349 "line": 136, 362 "line": 140,
350 "column": 3 363 "column": 3
351 } 364 }
352 } 365 }
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 9e952a6b1..185a6f0ae 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -112,6 +112,11 @@ export default class ServicesStore extends Store {
112 () => this.stores.settings.app.darkMode, 112 () => this.stores.settings.app.darkMode,
113 () => this._shareSettingsWithServiceProcess(), 113 () => this._shareSettingsWithServiceProcess(),
114 ); 114 );
115
116 reaction(
117 () => this.stores.settings.app.universalDarkMode,
118 () => this._shareSettingsWithServiceProcess(),
119 );
115 } 120 }
116 121
117 @computed get all() { 122 @computed get all() {
diff --git a/src/webview/recipe.js b/src/webview/recipe.js
index 6068e6c4a..d18d16082 100644
--- a/src/webview/recipe.js
+++ b/src/webview/recipe.js
@@ -43,6 +43,8 @@ class RecipeController {
43 'get-service-id': 'serviceIdEcho', 43 'get-service-id': 'serviceIdEcho',
44 }; 44 };
45 45
46 universalDarkModeInjected = false;
47
46 constructor() { 48 constructor() {
47 this.initialize(); 49 this.initialize();
48 } 50 }
@@ -127,11 +129,12 @@ class RecipeController {
127 129
128 if (darkModeExists) { 130 if (darkModeExists) {
129 injectDarkModeStyle(this.settings.service.recipe.path); 131 injectDarkModeStyle(this.settings.service.recipe.path);
130 } else if (!ignoreList.includes(window.location.host)) { 132 } else if (this.settings.app.universalDarkMode && !ignoreList.includes(window.location.host)) {
131 // Use darkreader instead 133 // Use darkreader instead
132 enableDarkMode({}, { 134 enableDarkMode({}, {
133 css: customDarkModeCss[window.location.host] || '', 135 css: customDarkModeCss[window.location.host] || '',
134 }); 136 });
137 this.universalDarkModeInjected = true;
135 } 138 }
136 } else { 139 } else {
137 debug('Remove dark mode'); 140 debug('Remove dark mode');
@@ -140,8 +143,15 @@ class RecipeController {
140 removeDarkModeStyle(); 143 removeDarkModeStyle();
141 } else { 144 } else {
142 disableDarkMode(); 145 disableDarkMode();
146 this.universalDarkModeInjected = false;
143 } 147 }
144 } 148 }
149
150 // Remove dark reader if (universal) dark mode was just disabled
151 if (this.universalDarkModeInjected && (!this.settings.app.darkMode || !this.settings.app.universalDarkMode)) {
152 disableDarkMode();
153 this.universalDarkModeInjected = false;
154 }
145 } 155 }
146 156
147 updateAppSettings(event, data) { 157 updateAppSettings(event, data) {
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index 27380676d..1cb449110 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.js
@@ -96,7 +96,7 @@ export function isEnabled() {
96 96
97export function disable() { 97export function disable() {
98 if (isEnabled()) { 98 if (isEnabled()) {
99 webFrame.setSpellCheckProvider(currentDict, true, { spellCheck: () => true }); 99 webFrame.setSpellCheckProvider(currentDict, { spellCheck: () => true });
100 _isEnabled = false; 100 _isEnabled = false;
101 currentDict = null; 101 currentDict = null;
102 } 102 }