aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Vijay Aravamudhan <vraravam@users.noreply.github.com>2022-05-23 05:52:50 -0500
committerLibravatar GitHub <noreply@github.com>2022-05-23 10:52:50 +0000
commitba2ac8d2c9ebb9b45325acf455bf7bf2995cdddf (patch)
tree51d72e5c62e4b32e72adb6647faf7216f69ab952
parent6.0.0-nightly.44 [skip ci] (diff)
downloadferdium-app-ba2ac8d2c9ebb9b45325acf455bf7bf2995cdddf.tar.gz
ferdium-app-ba2ac8d2c9ebb9b45325acf455bf7bf2995cdddf.tar.zst
ferdium-app-ba2ac8d2c9ebb9b45325acf455bf7bf2995cdddf.zip
Add new service-level option 'trapLinkUrls' (#154)
This option can be used to allow the user to choose how to handle links (whether to open in the default browser or within the Ferdium service itself) Co-authored-by: André Oliveira <oliveira.andrerodrigues95@gmail.com>
-rw-r--r--src/components/settings/services/EditServiceForm.js17
-rw-r--r--src/config.ts1
-rw-r--r--src/containers/settings/EditServiceScreen.js9
-rw-r--r--src/i18n/locales/en-US.json3
-rw-r--r--src/internal-server/app/Controllers/Http/ServiceController.js3
-rw-r--r--src/models/Service.js7
-rw-r--r--src/stores/ServicesStore.js1
-rw-r--r--src/webview/recipe.js6
8 files changed, 43 insertions, 4 deletions
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js
index 42e21dbc8..e426d2d73 100644
--- a/src/components/settings/services/EditServiceForm.js
+++ b/src/components/settings/services/EditServiceForm.js
@@ -108,6 +108,10 @@ const messages = defineMessages({
108 id: 'settings.service.form.headlineGeneral', 108 id: 'settings.service.form.headlineGeneral',
109 defaultMessage: 'General', 109 defaultMessage: 'General',
110 }, 110 },
111 headlineAppearance: {
112 id: 'settings.service.form.headlineAppearance',
113 defaultMessage: 'Appearance',
114 },
111 headlineDarkReaderSettings: { 115 headlineDarkReaderSettings: {
112 id: 'settings.service.form.headlineDarkReaderSettings', 116 id: 'settings.service.form.headlineDarkReaderSettings',
113 defaultMessage: 'Dark Reader Settings', 117 defaultMessage: 'Dark Reader Settings',
@@ -133,6 +137,10 @@ const messages = defineMessages({
133 defaultMessage: 137 defaultMessage:
134 'Proxy settings will not be synchronized with the Ferdium servers.', 138 'Proxy settings will not be synchronized with the Ferdium servers.',
135 }, 139 },
140 serviceReloadRequired: {
141 id: 'settings.service.reloadRequired',
142 defaultMessage: 'Changes require reload of the service',
143 },
136}); 144});
137 145
138class EditServiceForm extends Component { 146class EditServiceForm extends Component {
@@ -360,6 +368,15 @@ class EditServiceForm extends Component {
360 {intl.formatMessage(messages.isHibernationEnabledInfo)} 368 {intl.formatMessage(messages.isHibernationEnabledInfo)}
361 </p> 369 </p>
362 <Toggle field={form.$('isWakeUpEnabled')} /> 370 <Toggle field={form.$('isWakeUpEnabled')} />
371 <Toggle field={form.$('trapLinkClicks')} />
372 {/* TODO: Need to figure out how to effect this change without a reload of the recipe */}
373 <p className="settings__help indented__help">
374 {intl.formatMessage(messages.serviceReloadRequired)}
375 </p>
376 </div>
377
378 <div className="settings__settings-group">
379 <H3>{intl.formatMessage(messages.headlineAppearance)}</H3>
363 <Toggle field={form.$('isDarkModeEnabled')} /> 380 <Toggle field={form.$('isDarkModeEnabled')} />
364 {form.$('isDarkModeEnabled').value && ( 381 {form.$('isDarkModeEnabled').value && (
365 <> 382 <>
diff --git a/src/config.ts b/src/config.ts
index c72edb012..f602f473b 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -272,6 +272,7 @@ export const DEFAULT_SERVICE_SETTINGS = {
272 isWakeUpEnabled: true, 272 isWakeUpEnabled: true,
273 isNotificationEnabled: true, 273 isNotificationEnabled: true,
274 isBadgeEnabled: true, 274 isBadgeEnabled: true,
275 trapLinkClicks: false,
275 isMuted: false, 276 isMuted: false,
276 customIcon: false, 277 customIcon: false,
277 isDarkModeEnabled: false, 278 isDarkModeEnabled: false,
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js
index 24b827993..db8602c10 100644
--- a/src/containers/settings/EditServiceScreen.js
+++ b/src/containers/settings/EditServiceScreen.js
@@ -85,6 +85,10 @@ const messages = defineMessages({
85 id: 'settings.service.form.darkReaderSepia', 85 id: 'settings.service.form.darkReaderSepia',
86 defaultMessage: 'Dark Reader Sepia', 86 defaultMessage: 'Dark Reader Sepia',
87 }, 87 },
88 trapLinkClicks: {
89 id: 'settings.service.form.trapLinkClicks',
90 defaultMessage: 'Open URLs within Ferdium',
91 },
88 onlyShowFavoritesInUnreadCount: { 92 onlyShowFavoritesInUnreadCount: {
89 id: 'settings.service.form.onlyShowFavoritesInUnreadCount', 93 id: 'settings.service.form.onlyShowFavoritesInUnreadCount',
90 defaultMessage: 'Only show Favorites in unread count', 94 defaultMessage: 'Only show Favorites in unread count',
@@ -198,6 +202,11 @@ class EditServiceScreen extends Component {
198 value: service.isBadgeEnabled, 202 value: service.isBadgeEnabled,
199 default: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled, 203 default: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
200 }, 204 },
205 trapLinkClicks: {
206 label: intl.formatMessage(messages.trapLinkClicks),
207 value: service.trapLinkClicks,
208 default: DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
209 },
201 isMuted: { 210 isMuted: {
202 label: intl.formatMessage(messages.enableAudio), 211 label: intl.formatMessage(messages.enableAudio),
203 value: !service.isMuted, 212 value: !service.isMuted,
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 8a971cb6a..b4460c28e 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -323,6 +323,7 @@
323 "settings.service.form.enableNotification": "Enable notifications", 323 "settings.service.form.enableNotification": "Enable notifications",
324 "settings.service.form.enableService": "Enable service", 324 "settings.service.form.enableService": "Enable service",
325 "settings.service.form.enableWakeUp": "Enable wake up", 325 "settings.service.form.enableWakeUp": "Enable wake up",
326 "settings.service.form.headlineAppearance": "Appearance",
326 "settings.service.form.headlineBadges": "Unread message badges", 327 "settings.service.form.headlineBadges": "Unread message badges",
327 "settings.service.form.headlineDarkReaderSettings": "Dark Reader Settings", 328 "settings.service.form.headlineDarkReaderSettings": "Dark Reader Settings",
328 "settings.service.form.headlineGeneral": "General", 329 "settings.service.form.headlineGeneral": "General",
@@ -352,8 +353,10 @@
352 "settings.service.form.tabHosted": "Hosted", 353 "settings.service.form.tabHosted": "Hosted",
353 "settings.service.form.tabOnPremise": "Self hosted ⭐️", 354 "settings.service.form.tabOnPremise": "Self hosted ⭐️",
354 "settings.service.form.team": "Team", 355 "settings.service.form.team": "Team",
356 "settings.service.form.trapLinkClicks": "Open URLs within Ferdium",
355 "settings.service.form.useHostedService": "Use the hosted {name} service.", 357 "settings.service.form.useHostedService": "Use the hosted {name} service.",
356 "settings.service.form.yourServices": "Your services", 358 "settings.service.form.yourServices": "Your services",
359 "settings.service.reloadRequired": "Changes require reload of the service",
357 "settings.services.deletedInfo": "Service has been deleted", 360 "settings.services.deletedInfo": "Service has been deleted",
358 "settings.services.discoverServices": "Discover services", 361 "settings.services.discoverServices": "Discover services",
359 "settings.services.headline": "Your services", 362 "settings.services.headline": "Your services",
diff --git a/src/internal-server/app/Controllers/Http/ServiceController.js b/src/internal-server/app/Controllers/Http/ServiceController.js
index 8be5aa9c5..4b26f4747 100644
--- a/src/internal-server/app/Controllers/Http/ServiceController.js
+++ b/src/internal-server/app/Controllers/Http/ServiceController.js
@@ -48,6 +48,7 @@ class ServiceController {
48 isEnabled: DEFAULT_SERVICE_SETTINGS.isEnabled, 48 isEnabled: DEFAULT_SERVICE_SETTINGS.isEnabled,
49 isNotificationEnabled: DEFAULT_SERVICE_SETTINGS.isNotificationEnabled, 49 isNotificationEnabled: DEFAULT_SERVICE_SETTINGS.isNotificationEnabled,
50 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled, 50 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
51 trapLinkClicks: DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
51 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted, 52 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted,
52 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work. 53 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work.
53 spellcheckerLanguage: '', 54 spellcheckerLanguage: '',
@@ -76,6 +77,7 @@ class ServiceController {
76 customRecipe: false, 77 customRecipe: false,
77 hasCustomIcon: false, 78 hasCustomIcon: false,
78 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled, 79 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
80 trapLinkClicks: DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
79 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work. 81 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work.
80 isEnabled: DEFAULT_SERVICE_SETTINGS.isEnabled, 82 isEnabled: DEFAULT_SERVICE_SETTINGS.isEnabled,
81 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted, 83 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted,
@@ -219,6 +221,7 @@ class ServiceController {
219 customRecipe: false, 221 customRecipe: false,
220 hasCustomIcon: DEFAULT_SERVICE_SETTINGS.customIcon, 222 hasCustomIcon: DEFAULT_SERVICE_SETTINGS.customIcon,
221 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled, 223 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
224 trapLinkClicks: DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
222 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work. 225 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work.
223 isEnabled: DEFAULT_SERVICE_SETTINGS.isEnabled, 226 isEnabled: DEFAULT_SERVICE_SETTINGS.isEnabled,
224 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted, 227 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted,
diff --git a/src/models/Service.js b/src/models/Service.js
index af42f9548..e2b9ae7c6 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -54,6 +54,8 @@ export default class Service {
54 54
55 @observable isBadgeEnabled = true; 55 @observable isBadgeEnabled = true;
56 56
57 @observable trapLinkClicks = false;
58
57 @observable isIndirectMessageBadgeEnabled = true; 59 @observable isIndirectMessageBadgeEnabled = true;
58 60
59 @observable iconUrl = ''; 61 @observable iconUrl = '';
@@ -134,6 +136,10 @@ export default class Service {
134 data.isBadgeEnabled, 136 data.isBadgeEnabled,
135 this.isBadgeEnabled, 137 this.isBadgeEnabled,
136 ); 138 );
139 this.trapLinkClicks = ifUndefinedBoolean(
140 data.trapLinkClicks,
141 this.trapLinkClicks,
142 );
137 this.isIndirectMessageBadgeEnabled = ifUndefinedBoolean( 143 this.isIndirectMessageBadgeEnabled = ifUndefinedBoolean(
138 data.isIndirectMessageBadgeEnabled, 144 data.isIndirectMessageBadgeEnabled,
139 this.isIndirectMessageBadgeEnabled, 145 this.isIndirectMessageBadgeEnabled,
@@ -207,6 +213,7 @@ export default class Service {
207 url: this.url, 213 url: this.url,
208 hasCustomIcon: this.hasCustomIcon, 214 hasCustomIcon: this.hasCustomIcon,
209 onlyShowFavoritesInUnreadCount: this.onlyShowFavoritesInUnreadCount, 215 onlyShowFavoritesInUnreadCount: this.onlyShowFavoritesInUnreadCount,
216 trapLinkClicks: this.trapLinkClicks,
210 }; 217 };
211 } 218 }
212 219
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 3f551eddb..6b1ceb51f 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -410,6 +410,7 @@ export default class ServicesStore extends Store {
410 isWakeUpEnabled: DEFAULT_SERVICE_SETTINGS.isWakeUpEnabled, 410 isWakeUpEnabled: DEFAULT_SERVICE_SETTINGS.isWakeUpEnabled,
411 isNotificationEnabled: DEFAULT_SERVICE_SETTINGS.isNotificationEnabled, 411 isNotificationEnabled: DEFAULT_SERVICE_SETTINGS.isNotificationEnabled,
412 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled, 412 isBadgeEnabled: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
413 trapLinkClicks: DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
413 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted, 414 isMuted: DEFAULT_SERVICE_SETTINGS.isMuted,
414 customIcon: DEFAULT_SERVICE_SETTINGS.customIcon, 415 customIcon: DEFAULT_SERVICE_SETTINGS.customIcon,
415 isDarkModeEnabled: DEFAULT_SERVICE_SETTINGS.isDarkModeEnabled, 416 isDarkModeEnabled: DEFAULT_SERVICE_SETTINGS.isDarkModeEnabled,
diff --git a/src/webview/recipe.js b/src/webview/recipe.js
index eff20c2d3..a14c01b68 100644
--- a/src/webview/recipe.js
+++ b/src/webview/recipe.js
@@ -49,6 +49,7 @@ import {
49} from './spellchecker'; 49} from './spellchecker';
50 50
51import { DEFAULT_APP_SETTINGS } from '../config'; 51import { DEFAULT_APP_SETTINGS } from '../config';
52import { ifUndefinedString } from '../jsUtils';
52 53
53const debug = require('../preload-safe-debug')('Ferdium:Plugin'); 54const debug = require('../preload-safe-debug')('Ferdium:Plugin');
54 55
@@ -157,10 +158,7 @@ class RecipeController {
157 } 158 }
158 159
159 @computed get spellcheckerLanguage() { 160 @computed get spellcheckerLanguage() {
160 const selected = 161 return ifUndefinedString(this.settings.service.spellcheckerLanguage, this.settings.app.spellcheckerLanguage);
161 this.settings.service.spellcheckerLanguage ||
162 this.settings.app.spellcheckerLanguage;
163 return selected;
164 } 162 }
165 163
166 cldIdentifier = null; 164 cldIdentifier = null;