aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-10-23 14:17:57 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-10-23 14:17:57 +0200
commit6180bbbecca8687eb786b0e3cd22eefbc828bea2 (patch)
tree86fd7132b26ee523e84904c832632e01eb9a647c /src
parentAutomatic i18n update (i18n.meetfranz.com) (diff)
parentUpdate strings (diff)
downloadferdium-app-6180bbbecca8687eb786b0e3cd22eefbc828bea2.tar.gz
ferdium-app-6180bbbecca8687eb786b0e3cd22eefbc828bea2.tar.zst
ferdium-app-6180bbbecca8687eb786b0e3cd22eefbc828bea2.zip
Merge branch 'release/5.4.0-beta.3' into i18n
Diffstat (limited to 'src')
-rw-r--r--src/electron/Settings.js4
-rw-r--r--src/features/planSelection/components/PlanSelection.js51
-rw-r--r--src/features/planSelection/containers/PlanSelectionScreen.js10
-rw-r--r--src/features/planSelection/store.js4
-rw-r--r--src/i18n/locales/defaultMessages.json57
-rw-r--r--src/i18n/locales/en-US.json1
-rw-r--r--src/i18n/messages/src/features/planSelection/components/PlanSelection.json57
-rw-r--r--src/index.js13
-rw-r--r--src/webview/spellchecker.js2
9 files changed, 130 insertions, 69 deletions
diff --git a/src/electron/Settings.js b/src/electron/Settings.js
index 63f43b6b7..e4ad6b612 100644
--- a/src/electron/Settings.js
+++ b/src/electron/Settings.js
@@ -47,7 +47,9 @@ export default class Settings {
47 } 47 }
48 48
49 _writeFile() { 49 _writeFile() {
50 outputJsonSync(this.settingsFile, this.store); 50 outputJsonSync(this.settingsFile, this.store, {
51 spaces: 2,
52 });
51 debug('Write settings file', this.type, toJS(this.store)); 53 debug('Write settings file', this.type, toJS(this.store));
52 } 54 }
53 55
diff --git a/src/features/planSelection/components/PlanSelection.js b/src/features/planSelection/components/PlanSelection.js
index 355187516..b6bb9d32d 100644
--- a/src/features/planSelection/components/PlanSelection.js
+++ b/src/features/planSelection/components/PlanSelection.js
@@ -6,12 +6,13 @@ import { defineMessages, intlShape } from 'react-intl';
6import { H1, H2, Icon } from '@meetfranz/ui'; 6import { H1, H2, Icon } from '@meetfranz/ui';
7import color from 'color'; 7import color from 'color';
8 8
9import { mdiRocket } from '@mdi/js'; 9import { mdiRocket, mdiArrowRight } from '@mdi/js';
10import PlanItem from './PlanItem'; 10import PlanItem from './PlanItem';
11import { i18nPlanName } from '../../../helpers/plan-helpers'; 11import { i18nPlanName } from '../../../helpers/plan-helpers';
12import { PLANS } from '../../../config'; 12import { PLANS } from '../../../config';
13import { FeatureList } from '../../../components/ui/FeatureList'; 13import { FeatureList } from '../../../components/ui/FeatureList';
14import Appear from '../../../components/ui/effects/Appear'; 14import Appear from '../../../components/ui/effects/Appear';
15import { gaPage } from '../../../lib/analytics';
15 16
16const messages = defineMessages({ 17const messages = defineMessages({
17 welcome: { 18 welcome: {
@@ -58,6 +59,10 @@ const messages = defineMessages({
58 id: 'feature.planSelection.fullFeatureList', 59 id: 'feature.planSelection.fullFeatureList',
59 defaultMessage: '!!!Complete comparison of all plans', 60 defaultMessage: '!!!Complete comparison of all plans',
60 }, 61 },
62 pricesBasedOnAnnualPayment: {
63 id: 'feature.planSelection.pricesBasedOnAnnualPayment',
64 defaultMessage: '!!!All prices based on yearly payment',
65 },
61}); 66});
62 67
63const styles = theme => ({ 68const styles = theme => ({
@@ -131,11 +136,23 @@ const styles = theme => ({
131 borderBottom: [1, 'solid', '#CECECE'], 136 borderBottom: [1, 'solid', '#CECECE'],
132 }, 137 },
133 }, 138 },
139 footer: {
140 display: 'flex',
141 color: theme.styleTypes.primary.contrast,
142 marginTop: 20,
143 padding: [0, 15],
144 },
134 fullFeatureList: { 145 fullFeatureList: {
135 marginTop: 40, 146 marginRight: 'auto',
136 textAlign: 'center', 147 textAlign: 'center',
137 display: 'block', 148 display: 'flex',
149 justifyContent: 'center',
150 alignItems: 'center',
138 color: `${theme.styleTypes.primary.contrast} !important`, 151 color: `${theme.styleTypes.primary.contrast} !important`,
152
153 '& svg': {
154 marginRight: 5,
155 },
139 }, 156 },
140 scrollContainer: { 157 scrollContainer: {
141 border: '1px solid red', 158 border: '1px solid red',
@@ -144,6 +161,10 @@ const styles = theme => ({
144 featuredPlan: { 161 featuredPlan: {
145 transform: 'scale(1.05)', 162 transform: 'scale(1.05)',
146 }, 163 },
164 disclaimer: {
165 textAlign: 'right',
166 margin: [10, 15, 0, 0],
167 },
147}); 168});
148 169
149@injectSheet(styles) @observer 170@injectSheet(styles) @observer
@@ -163,6 +184,10 @@ class PlanSelection extends Component {
163 intl: intlShape, 184 intl: intlShape,
164 }; 185 };
165 186
187 componentDidMount() {
188 gaPage('/select-plan');
189 }
190
166 render() { 191 render() {
167 const { 192 const {
168 classes, 193 classes,
@@ -233,13 +258,19 @@ class PlanSelection extends Component {
233 /> 258 />
234 </PlanItem> 259 </PlanItem>
235 </div> 260 </div>
236 <a 261 <div className={classes.footer}>
237 href="https://meetfranz.com/pricing" 262 <a
238 target="_blank" 263 href="https://meetfranz.com/pricing"
239 className={classes.fullFeatureList} 264 target="_blank"
240 > 265 className={classes.fullFeatureList}
241 {intl.formatMessage(messages.fullFeatureList)} 266 >
242 </a> 267 <Icon icon={mdiArrowRight} />
268 {intl.formatMessage(messages.fullFeatureList)}
269 </a>
270 {/* <p className={classes.disclaimer}> */}
271 {intl.formatMessage(messages.pricesBasedOnAnnualPayment)}
272 {/* </p> */}
273 </div>
243 </div> 274 </div>
244 </div> 275 </div>
245 </Appear> 276 </Appear>
diff --git a/src/features/planSelection/containers/PlanSelectionScreen.js b/src/features/planSelection/containers/PlanSelectionScreen.js
index 6e8cdbf47..cb62f45d3 100644
--- a/src/features/planSelection/containers/PlanSelectionScreen.js
+++ b/src/features/planSelection/containers/PlanSelectionScreen.js
@@ -9,7 +9,7 @@ import UserStore from '../../../stores/UserStore';
9import PlanSelection from '../components/PlanSelection'; 9import PlanSelection from '../components/PlanSelection';
10import ErrorBoundary from '../../../components/util/ErrorBoundary'; 10import ErrorBoundary from '../../../components/util/ErrorBoundary';
11import { planSelectionStore, GA_CATEGORY_PLAN_SELECTION } from '..'; 11import { planSelectionStore, GA_CATEGORY_PLAN_SELECTION } from '..';
12import { gaEvent } from '../../../lib/analytics'; 12import { gaEvent, gaPage } from '../../../lib/analytics';
13 13
14const { dialog, app } = remote; 14const { dialog, app } = remote;
15 15
@@ -38,10 +38,6 @@ class PlanSelectionScreen extends Component {
38 intl: intlShape, 38 intl: intlShape,
39 }; 39 };
40 40
41 componentDidMount() {
42 gaEvent(GA_CATEGORY_PLAN_SELECTION, 'show');
43 }
44
45 upgradeAccount(planId) { 41 upgradeAccount(planId) {
46 const { upgradeAccount } = this.props.actions.payment; 42 const { upgradeAccount } = this.props.actions.payment;
47 43
@@ -80,6 +76,8 @@ class PlanSelectionScreen extends Component {
80 } 76 }
81 }} 77 }}
82 stayOnFree={() => { 78 stayOnFree={() => {
79 gaPage('/select-plan/downgrade');
80
83 const selection = dialog.showMessageBoxSync(app.mainWindow, { 81 const selection = dialog.showMessageBoxSync(app.mainWindow, {
84 type: 'question', 82 type: 'question',
85 message: intl.formatMessage(messages.dialogTitle), 83 message: intl.formatMessage(messages.dialogTitle),
@@ -101,7 +99,7 @@ class PlanSelectionScreen extends Component {
101 } else { 99 } else {
102 this.upgradeAccount(plans.personal.yearly.id); 100 this.upgradeAccount(plans.personal.yearly.id);
103 101
104 gaEvent(GA_CATEGORY_PLAN_SELECTION, 'SelectPlan', 'Revoke'); 102 gaEvent(GA_CATEGORY_PLAN_SELECTION, 'SelectPlan', 'Downgrade');
105 } 103 }
106 }} 104 }}
107 subscriptionExpired={user.team && user.team.state === 'expired' && !user.team.userHasDowngraded} 105 subscriptionExpired={user.team && user.team.state === 'expired' && !user.team.userHasDowngraded}
diff --git a/src/features/planSelection/store.js b/src/features/planSelection/store.js
index 8622d4e5a..448e323ff 100644
--- a/src/features/planSelection/store.js
+++ b/src/features/planSelection/store.js
@@ -19,8 +19,8 @@ export default class PlanSelectionStore extends FeatureStore {
19 @observable hideOverlay = false; 19 @observable hideOverlay = false;
20 20
21 @computed get showPlanSelectionOverlay() { 21 @computed get showPlanSelectionOverlay() {
22 const { team } = this.stores.user; 22 const { team, isPremium } = this.stores.user;
23 if (team && !this.hideOverlay) { 23 if (team && !this.hideOverlay && !isPremium) {
24 return team.state === 'expired' && !team.userHasDowngraded; 24 return team.state === 'expired' && !team.userHasDowngraded;
25 } 25 }
26 26
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 9818dca87..9cfeaed42 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -3998,143 +3998,156 @@
3998 "defaultMessage": "!!!Are you ready to choose, {name}", 3998 "defaultMessage": "!!!Are you ready to choose, {name}",
3999 "end": { 3999 "end": {
4000 "column": 3, 4000 "column": 3,
4001 "line": 20 4001 "line": 21
4002 }, 4002 },
4003 "file": "src/features/planSelection/components/PlanSelection.js", 4003 "file": "src/features/planSelection/components/PlanSelection.js",
4004 "id": "feature.planSelection.fullscreen.welcome", 4004 "id": "feature.planSelection.fullscreen.welcome",
4005 "start": { 4005 "start": {
4006 "column": 11, 4006 "column": 11,
4007 "line": 17 4007 "line": 18
4008 } 4008 }
4009 }, 4009 },
4010 { 4010 {
4011 "defaultMessage": "!!!It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.", 4011 "defaultMessage": "!!!It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.",
4012 "end": { 4012 "end": {
4013 "column": 3, 4013 "column": 3,
4014 "line": 24 4014 "line": 25
4015 }, 4015 },
4016 "file": "src/features/planSelection/components/PlanSelection.js", 4016 "file": "src/features/planSelection/components/PlanSelection.js",
4017 "id": "feature.planSelection.fullscreen.subheadline", 4017 "id": "feature.planSelection.fullscreen.subheadline",
4018 "start": { 4018 "start": {
4019 "column": 15, 4019 "column": 15,
4020 "line": 21 4020 "line": 22
4021 } 4021 }
4022 }, 4022 },
4023 { 4023 {
4024 "defaultMessage": "!!!Basic functionality", 4024 "defaultMessage": "!!!Basic functionality",
4025 "end": { 4025 "end": {
4026 "column": 3, 4026 "column": 3,
4027 "line": 28 4027 "line": 29
4028 }, 4028 },
4029 "file": "src/features/planSelection/components/PlanSelection.js", 4029 "file": "src/features/planSelection/components/PlanSelection.js",
4030 "id": "feature.planSelection.free.text", 4030 "id": "feature.planSelection.free.text",
4031 "start": { 4031 "start": {
4032 "column": 12, 4032 "column": 12,
4033 "line": 25 4033 "line": 26
4034 } 4034 }
4035 }, 4035 },
4036 { 4036 {
4037 "defaultMessage": "!!!More services, no waiting - ideal for personal use.", 4037 "defaultMessage": "!!!More services, no waiting - ideal for personal use.",
4038 "end": { 4038 "end": {
4039 "column": 3, 4039 "column": 3,
4040 "line": 32 4040 "line": 33
4041 }, 4041 },
4042 "file": "src/features/planSelection/components/PlanSelection.js", 4042 "file": "src/features/planSelection/components/PlanSelection.js",
4043 "id": "feature.planSelection.personal.text", 4043 "id": "feature.planSelection.personal.text",
4044 "start": { 4044 "start": {
4045 "column": 16, 4045 "column": 16,
4046 "line": 29 4046 "line": 30
4047 } 4047 }
4048 }, 4048 },
4049 { 4049 {
4050 "defaultMessage": "!!!Unlimited services and professional features for you - and your team.", 4050 "defaultMessage": "!!!Unlimited services and professional features for you - and your team.",
4051 "end": { 4051 "end": {
4052 "column": 3, 4052 "column": 3,
4053 "line": 36 4053 "line": 37
4054 }, 4054 },
4055 "file": "src/features/planSelection/components/PlanSelection.js", 4055 "file": "src/features/planSelection/components/PlanSelection.js",
4056 "id": "feature.planSelection.pro.text", 4056 "id": "feature.planSelection.pro.text",
4057 "start": { 4057 "start": {
4058 "column": 20, 4058 "column": 20,
4059 "line": 33 4059 "line": 34
4060 } 4060 }
4061 }, 4061 },
4062 { 4062 {
4063 "defaultMessage": "!!!Stay on Free", 4063 "defaultMessage": "!!!Stay on Free",
4064 "end": { 4064 "end": {
4065 "column": 3, 4065 "column": 3,
4066 "line": 40 4066 "line": 41
4067 }, 4067 },
4068 "file": "src/features/planSelection/components/PlanSelection.js", 4068 "file": "src/features/planSelection/components/PlanSelection.js",
4069 "id": "feature.planSelection.cta.stayOnFree", 4069 "id": "feature.planSelection.cta.stayOnFree",
4070 "start": { 4070 "start": {
4071 "column": 17, 4071 "column": 17,
4072 "line": 37 4072 "line": 38
4073 } 4073 }
4074 }, 4074 },
4075 { 4075 {
4076 "defaultMessage": "!!!Downgrade to Free", 4076 "defaultMessage": "!!!Downgrade to Free",
4077 "end": { 4077 "end": {
4078 "column": 3, 4078 "column": 3,
4079 "line": 44 4079 "line": 45
4080 }, 4080 },
4081 "file": "src/features/planSelection/components/PlanSelection.js", 4081 "file": "src/features/planSelection/components/PlanSelection.js",
4082 "id": "feature.planSelection.cta.ctaDowngradeFree", 4082 "id": "feature.planSelection.cta.ctaDowngradeFree",
4083 "start": { 4083 "start": {
4084 "column": 20, 4084 "column": 20,
4085 "line": 41 4085 "line": 42
4086 } 4086 }
4087 }, 4087 },
4088 { 4088 {
4089 "defaultMessage": "!!!Start my free 14-days Trial", 4089 "defaultMessage": "!!!Start my free 14-days Trial",
4090 "end": { 4090 "end": {
4091 "column": 3, 4091 "column": 3,
4092 "line": 48 4092 "line": 49
4093 }, 4093 },
4094 "file": "src/features/planSelection/components/PlanSelection.js", 4094 "file": "src/features/planSelection/components/PlanSelection.js",
4095 "id": "feature.planSelection.cta.trial", 4095 "id": "feature.planSelection.cta.trial",
4096 "start": { 4096 "start": {
4097 "column": 15, 4097 "column": 15,
4098 "line": 45 4098 "line": 46
4099 } 4099 }
4100 }, 4100 },
4101 { 4101 {
4102 "defaultMessage": "!!!Choose Personal", 4102 "defaultMessage": "!!!Choose Personal",
4103 "end": { 4103 "end": {
4104 "column": 3, 4104 "column": 3,
4105 "line": 52 4105 "line": 53
4106 }, 4106 },
4107 "file": "src/features/planSelection/components/PlanSelection.js", 4107 "file": "src/features/planSelection/components/PlanSelection.js",
4108 "id": "feature.planSelection.cta.upgradePersonal", 4108 "id": "feature.planSelection.cta.upgradePersonal",
4109 "start": { 4109 "start": {
4110 "column": 23, 4110 "column": 23,
4111 "line": 49 4111 "line": 50
4112 } 4112 }
4113 }, 4113 },
4114 { 4114 {
4115 "defaultMessage": "!!!Choose Professional", 4115 "defaultMessage": "!!!Choose Professional",
4116 "end": { 4116 "end": {
4117 "column": 3, 4117 "column": 3,
4118 "line": 56 4118 "line": 57
4119 }, 4119 },
4120 "file": "src/features/planSelection/components/PlanSelection.js", 4120 "file": "src/features/planSelection/components/PlanSelection.js",
4121 "id": "feature.planSelection.cta.upgradePro", 4121 "id": "feature.planSelection.cta.upgradePro",
4122 "start": { 4122 "start": {
4123 "column": 18, 4123 "column": 18,
4124 "line": 53 4124 "line": 54
4125 } 4125 }
4126 }, 4126 },
4127 { 4127 {
4128 "defaultMessage": "!!!Complete comparison of all plans", 4128 "defaultMessage": "!!!Complete comparison of all plans",
4129 "end": { 4129 "end": {
4130 "column": 3, 4130 "column": 3,
4131 "line": 60 4131 "line": 61
4132 }, 4132 },
4133 "file": "src/features/planSelection/components/PlanSelection.js", 4133 "file": "src/features/planSelection/components/PlanSelection.js",
4134 "id": "feature.planSelection.fullFeatureList", 4134 "id": "feature.planSelection.fullFeatureList",
4135 "start": { 4135 "start": {
4136 "column": 19, 4136 "column": 19,
4137 "line": 57 4137 "line": 58
4138 }
4139 },
4140 {
4141 "defaultMessage": "!!!All prices based on yearly payment",
4142 "end": {
4143 "column": 3,
4144 "line": 65
4145 },
4146 "file": "src/features/planSelection/components/PlanSelection.js",
4147 "id": "feature.planSelection.pricesBasedOnAnnualPayment",
4148 "start": {
4149 "column": 30,
4150 "line": 62
4138 } 4151 }
4139 } 4152 }
4140 ], 4153 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 8bef09d4d..a701836dc 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -23,6 +23,7 @@
23 "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.", 23 "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.",
24 "feature.planSelection.fullscreen.welcome": "Are you ready to choose, {name}?", 24 "feature.planSelection.fullscreen.welcome": "Are you ready to choose, {name}?",
25 "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.", 25 "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.",
26 "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment",
26 "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", 27 "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.",
27 "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", 28 "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.",
28 "feature.shareFranz.action.email": "Send as email", 29 "feature.shareFranz.action.email": "Send as email",
diff --git a/src/i18n/messages/src/features/planSelection/components/PlanSelection.json b/src/i18n/messages/src/features/planSelection/components/PlanSelection.json
index 2e66c8dfe..7f1de6cfd 100644
--- a/src/i18n/messages/src/features/planSelection/components/PlanSelection.json
+++ b/src/i18n/messages/src/features/planSelection/components/PlanSelection.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Are you ready to choose, {name}", 4 "defaultMessage": "!!!Are you ready to choose, {name}",
5 "file": "src/features/planSelection/components/PlanSelection.js", 5 "file": "src/features/planSelection/components/PlanSelection.js",
6 "start": { 6 "start": {
7 "line": 17, 7 "line": 18,
8 "column": 11 8 "column": 11
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 20, 11 "line": 21,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.", 17 "defaultMessage": "!!!It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.",
18 "file": "src/features/planSelection/components/PlanSelection.js", 18 "file": "src/features/planSelection/components/PlanSelection.js",
19 "start": { 19 "start": {
20 "line": 21, 20 "line": 22,
21 "column": 15 21 "column": 15
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 24, 24 "line": 25,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Basic functionality", 30 "defaultMessage": "!!!Basic functionality",
31 "file": "src/features/planSelection/components/PlanSelection.js", 31 "file": "src/features/planSelection/components/PlanSelection.js",
32 "start": { 32 "start": {
33 "line": 25, 33 "line": 26,
34 "column": 12 34 "column": 12
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 28, 37 "line": 29,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!More services, no waiting - ideal for personal use.", 43 "defaultMessage": "!!!More services, no waiting - ideal for personal use.",
44 "file": "src/features/planSelection/components/PlanSelection.js", 44 "file": "src/features/planSelection/components/PlanSelection.js",
45 "start": { 45 "start": {
46 "line": 29, 46 "line": 30,
47 "column": 16 47 "column": 16
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 32, 50 "line": 33,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Unlimited services and professional features for you - and your team.", 56 "defaultMessage": "!!!Unlimited services and professional features for you - and your team.",
57 "file": "src/features/planSelection/components/PlanSelection.js", 57 "file": "src/features/planSelection/components/PlanSelection.js",
58 "start": { 58 "start": {
59 "line": 33, 59 "line": 34,
60 "column": 20 60 "column": 20
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 36, 63 "line": 37,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Stay on Free", 69 "defaultMessage": "!!!Stay on Free",
70 "file": "src/features/planSelection/components/PlanSelection.js", 70 "file": "src/features/planSelection/components/PlanSelection.js",
71 "start": { 71 "start": {
72 "line": 37, 72 "line": 38,
73 "column": 17 73 "column": 17
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 40, 76 "line": 41,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Downgrade to Free", 82 "defaultMessage": "!!!Downgrade to Free",
83 "file": "src/features/planSelection/components/PlanSelection.js", 83 "file": "src/features/planSelection/components/PlanSelection.js",
84 "start": { 84 "start": {
85 "line": 41, 85 "line": 42,
86 "column": 20 86 "column": 20
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 44, 89 "line": 45,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Start my free 14-days Trial", 95 "defaultMessage": "!!!Start my free 14-days Trial",
96 "file": "src/features/planSelection/components/PlanSelection.js", 96 "file": "src/features/planSelection/components/PlanSelection.js",
97 "start": { 97 "start": {
98 "line": 45, 98 "line": 46,
99 "column": 15 99 "column": 15
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 48, 102 "line": 49,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Choose Personal", 108 "defaultMessage": "!!!Choose Personal",
109 "file": "src/features/planSelection/components/PlanSelection.js", 109 "file": "src/features/planSelection/components/PlanSelection.js",
110 "start": { 110 "start": {
111 "line": 49, 111 "line": 50,
112 "column": 23 112 "column": 23
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 52, 115 "line": 53,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!Choose Professional", 121 "defaultMessage": "!!!Choose Professional",
122 "file": "src/features/planSelection/components/PlanSelection.js", 122 "file": "src/features/planSelection/components/PlanSelection.js",
123 "start": { 123 "start": {
124 "line": 53, 124 "line": 54,
125 "column": 18 125 "column": 18
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 56, 128 "line": 57,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,24 @@
134 "defaultMessage": "!!!Complete comparison of all plans", 134 "defaultMessage": "!!!Complete comparison of all plans",
135 "file": "src/features/planSelection/components/PlanSelection.js", 135 "file": "src/features/planSelection/components/PlanSelection.js",
136 "start": { 136 "start": {
137 "line": 57, 137 "line": 58,
138 "column": 19 138 "column": 19
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 60, 141 "line": 61,
142 "column": 3
143 }
144 },
145 {
146 "id": "feature.planSelection.pricesBasedOnAnnualPayment",
147 "defaultMessage": "!!!All prices based on yearly payment",
148 "file": "src/features/planSelection/components/PlanSelection.js",
149 "start": {
150 "line": 62,
151 "column": 30
152 },
153 "end": {
154 "line": 65,
142 "column": 3 155 "column": 3
143 } 156 }
144 } 157 }
diff --git a/src/index.js b/src/index.js
index 7de7a5e1c..3056a8bec 100644
--- a/src/index.js
+++ b/src/index.js
@@ -64,8 +64,15 @@ if (isWindows) {
64 app.setAppUserModelId(appId); 64 app.setAppUserModelId(appId);
65} 65}
66 66
67// Initialize Settings
68const settings = new Settings('app', DEFAULT_APP_SETTINGS);
69const proxySettings = new Settings('proxy');
70
71// add `liftSingleInstanceLock` to settings.json to override the single instance lock
72const liftSingleInstanceLock = settings.get('liftSingleInstanceLock') || false;
73
67// Force single window 74// Force single window
68const gotTheLock = app.requestSingleInstanceLock(); 75const gotTheLock = liftSingleInstanceLock ? true : app.requestSingleInstanceLock();
69if (!gotTheLock) { 76if (!gotTheLock) {
70 app.quit(); 77 app.quit();
71} else { 78} else {
@@ -112,10 +119,6 @@ if (isLinux && ['Pantheon', 'Unity:Unity7'].indexOf(process.env.XDG_CURRENT_DESK
112 process.env.XDG_CURRENT_DESKTOP = 'Unity'; 119 process.env.XDG_CURRENT_DESKTOP = 'Unity';
113} 120}
114 121
115// Initialize Settings
116const settings = new Settings('app', DEFAULT_APP_SETTINGS);
117const proxySettings = new Settings('proxy');
118
119// Disable GPU acceleration 122// Disable GPU acceleration
120if (!settings.get('enableGPUAcceleration')) { 123if (!settings.get('enableGPUAcceleration')) {
121 debug('Disable GPU Acceleration'); 124 debug('Disable GPU Acceleration');
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index 06cbd283a..d8f71f61f 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 }