aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar vantezzen <hello@vantezzen.io>2019-10-14 10:38:27 +0200
committerLibravatar vantezzen <hello@vantezzen.io>2019-10-14 10:38:27 +0200
commitc84edee908d40a9cab45b9ae3c5dc899fbb3eb11 (patch)
tree80158d14869b59723d09535558358d62b2612c2b /src
parentAdd indicator for hibernating services (diff)
downloadferdium-app-c84edee908d40a9cab45b9ae3c5dc899fbb3eb11.tar.gz
ferdium-app-c84edee908d40a9cab45b9ae3c5dc899fbb3eb11.tar.zst
ferdium-app-c84edee908d40a9cab45b9ae3c5dc899fbb3eb11.zip
Add local server to allow serverlesss usage
Diffstat (limited to 'src')
-rw-r--r--src/components/auth/Login.js22
-rw-r--r--src/components/auth/Signup.js22
-rw-r--r--src/components/auth/Welcome.js21
-rw-r--r--src/components/services/content/Services.js32
-rw-r--r--src/helpers/serverless-helpers.js16
-rw-r--r--src/i18n/locales/defaultMessages.json190
-rw-r--r--src/i18n/locales/en-US.json2
-rw-r--r--src/i18n/messages/src/components/auth/Login.json70
-rw-r--r--src/i18n/messages/src/components/auth/Signup.json70
-rw-r--r--src/i18n/messages/src/components/auth/Welcome.json21
-rw-r--r--src/i18n/messages/src/components/services/content/Services.json29
-rw-r--r--src/index.js3
-rw-r--r--src/styles/services.scss2
-rw-r--r--src/styles/type.scss3
-rw-r--r--src/styles/welcome.scss1
15 files changed, 380 insertions, 124 deletions
diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js
index eea5a09bf..e58016e25 100644
--- a/src/components/auth/Login.js
+++ b/src/components/auth/Login.js
@@ -1,11 +1,13 @@
1/* eslint jsx-a11y/anchor-is-valid: 0 */
1import React, { Component } from 'react'; 2import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 3import PropTypes from 'prop-types';
3import { observer } from 'mobx-react'; 4import { observer, inject } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 5import { defineMessages, intlShape } from 'react-intl';
5 6
6import { isDevMode, useLiveAPI } from '../../environment'; 7import { isDevMode, useLiveAPI } from '../../environment';
7import Form from '../../lib/Form'; 8import Form from '../../lib/Form';
8import { required, email } from '../../helpers/validation-helpers'; 9import { required, email } from '../../helpers/validation-helpers';
10import serverlessLogin from '../../helpers/serverless-helpers';
9import Input from '../ui/Input'; 11import Input from '../ui/Input';
10import Button from '../ui/Button'; 12import Button from '../ui/Button';
11import Link from '../ui/Link'; 13import Link from '../ui/Link';
@@ -54,13 +56,21 @@ const messages = defineMessages({
54 id: 'login.link.signup', 56 id: 'login.link.signup',
55 defaultMessage: '!!!Create a free account', 57 defaultMessage: '!!!Create a free account',
56 }, 58 },
59 changeServer: {
60 id: 'login.changeServer',
61 defaultMessage: '!!!Change server',
62 },
63 serverless: {
64 id: 'services.serverless',
65 defaultMessage: '!!!Use Ferdi without an Account',
66 },
57 passwordLink: { 67 passwordLink: {
58 id: 'login.link.password', 68 id: 'login.link.password',
59 defaultMessage: '!!!Forgot password', 69 defaultMessage: '!!!Forgot password',
60 }, 70 },
61}); 71});
62 72
63export default @observer class Login extends Component { 73export default @observer @inject('actions') class Login extends Component {
64 static propTypes = { 74 static propTypes = {
65 onSubmit: PropTypes.func.isRequired, 75 onSubmit: PropTypes.func.isRequired,
66 isSubmitting: PropTypes.bool.isRequired, 76 isSubmitting: PropTypes.bool.isRequired,
@@ -69,6 +79,7 @@ export default @observer class Login extends Component {
69 signupRoute: PropTypes.string.isRequired, 79 signupRoute: PropTypes.string.isRequired,
70 passwordRoute: PropTypes.string.isRequired, 80 passwordRoute: PropTypes.string.isRequired,
71 error: globalErrorPropType.isRequired, 81 error: globalErrorPropType.isRequired,
82 actions: PropTypes.object.isRequired,
72 }; 83 };
73 84
74 static contextTypes = { 85 static contextTypes = {
@@ -103,6 +114,10 @@ export default @observer class Login extends Component {
103 }); 114 });
104 } 115 }
105 116
117 useLocalServer() {
118 serverlessLogin(this.props.actions);
119 }
120
106 render() { 121 render() {
107 const { form } = this; 122 const { form } = this;
108 const { intl } = this.context; 123 const { intl } = this.context;
@@ -179,7 +194,8 @@ export default @observer class Login extends Component {
179 )} 194 )}
180 </form> 195 </form>
181 <div className="auth__links"> 196 <div className="auth__links">
182 <Link to="/settings/app">Change server</Link> 197 <Link to="/settings/app">{intl.formatMessage(messages.changeServer)}</Link>
198 <a onClick={this.useLocalServer.bind(this)}>{intl.formatMessage(messages.serverless)}</a>
183 <Link to={signupRoute}>{intl.formatMessage(messages.signupLink)}</Link> 199 <Link to={signupRoute}>{intl.formatMessage(messages.signupLink)}</Link>
184 <Link to={passwordRoute}>{intl.formatMessage(messages.passwordLink)}</Link> 200 <Link to={passwordRoute}>{intl.formatMessage(messages.passwordLink)}</Link>
185 </div> 201 </div>
diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js
index b36e71ce1..47e9daf18 100644
--- a/src/components/auth/Signup.js
+++ b/src/components/auth/Signup.js
@@ -1,11 +1,13 @@
1/* eslint jsx-a11y/anchor-is-valid: 0 */
1import React, { Component } from 'react'; 2import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 3import PropTypes from 'prop-types';
3import { observer } from 'mobx-react'; 4import { observer, inject } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 5import { defineMessages, intlShape } from 'react-intl';
5 6
6import { isDevMode, useLiveAPI } from '../../environment'; 7import { isDevMode, useLiveAPI } from '../../environment';
7import Form from '../../lib/Form'; 8import Form from '../../lib/Form';
8import { required, email, minLength } from '../../helpers/validation-helpers'; 9import { required, email, minLength } from '../../helpers/validation-helpers';
10import serverlessLogin from '../../helpers/serverless-helpers';
9import Input from '../ui/Input'; 11import Input from '../ui/Input';
10import Button from '../ui/Button'; 12import Button from '../ui/Button';
11import Link from '../ui/Link'; 13import Link from '../ui/Link';
@@ -58,18 +60,27 @@ const messages = defineMessages({
58 id: 'signup.link.login', 60 id: 'signup.link.login',
59 defaultMessage: '!!!Already have an account, sign in?', 61 defaultMessage: '!!!Already have an account, sign in?',
60 }, 62 },
63 changeServer: {
64 id: 'login.changeServer',
65 defaultMessage: '!!!Change server',
66 },
67 serverless: {
68 id: 'services.serverless',
69 defaultMessage: '!!!Use Ferdi without an Account',
70 },
61 emailDuplicate: { 71 emailDuplicate: {
62 id: 'signup.emailDuplicate', 72 id: 'signup.emailDuplicate',
63 defaultMessage: '!!!A user with that email address already exists', 73 defaultMessage: '!!!A user with that email address already exists',
64 }, 74 },
65}); 75});
66 76
67export default @observer class Signup extends Component { 77export default @observer @inject('actions') class Signup extends Component {
68 static propTypes = { 78 static propTypes = {
69 onSubmit: PropTypes.func.isRequired, 79 onSubmit: PropTypes.func.isRequired,
70 isSubmitting: PropTypes.bool.isRequired, 80 isSubmitting: PropTypes.bool.isRequired,
71 loginRoute: PropTypes.string.isRequired, 81 loginRoute: PropTypes.string.isRequired,
72 error: globalErrorPropType.isRequired, 82 error: globalErrorPropType.isRequired,
83 actions: PropTypes.object.isRequired,
73 }; 84 };
74 85
75 static contextTypes = { 86 static contextTypes = {
@@ -112,6 +123,10 @@ export default @observer class Signup extends Component {
112 }); 123 });
113 } 124 }
114 125
126 useLocalServer() {
127 serverlessLogin(this.props.actions);
128 }
129
115 render() { 130 render() {
116 const { form } = this; 131 const { form } = this;
117 const { intl } = this.context; 132 const { intl } = this.context;
@@ -183,7 +198,8 @@ export default @observer class Signup extends Component {
183 </p> 198 </p>
184 </form> 199 </form>
185 <div className="auth__links"> 200 <div className="auth__links">
186 <Link to="/settings/app">Change server</Link> 201 <Link to="/settings/app">{intl.formatMessage(messages.changeServer)}</Link>
202 <a onClick={this.useLocalServer.bind(this)}>{intl.formatMessage(messages.serverless)}</a>
187 <Link to={loginRoute}>{intl.formatMessage(messages.loginLink)}</Link> 203 <Link to={loginRoute}>{intl.formatMessage(messages.loginLink)}</Link>
188 </div> 204 </div>
189 </div> 205 </div>
diff --git a/src/components/auth/Welcome.js b/src/components/auth/Welcome.js
index ef917e336..2ca8b430f 100644
--- a/src/components/auth/Welcome.js
+++ b/src/components/auth/Welcome.js
@@ -1,7 +1,9 @@
1/* eslint jsx-a11y/anchor-is-valid: 0 */
1import React, { Component } from 'react'; 2import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 3import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; 4import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 5import { defineMessages, intlShape } from 'react-intl';
6import serverlessLogin from '../../helpers/serverless-helpers';
5 7
6import Link from '../ui/Link'; 8import Link from '../ui/Link';
7 9
@@ -14,19 +16,28 @@ const messages = defineMessages({
14 id: 'welcome.loginButton', 16 id: 'welcome.loginButton',
15 defaultMessage: '!!!Login to your account', 17 defaultMessage: '!!!Login to your account',
16 }, 18 },
19 serverless: {
20 id: 'services.serverless',
21 defaultMessage: '!!!Use Ferdi without an Account',
22 },
17}); 23});
18 24
19export default @observer class Login extends Component { 25export default @observer @inject('actions') class Login extends Component {
20 static propTypes = { 26 static propTypes = {
21 loginRoute: PropTypes.string.isRequired, 27 loginRoute: PropTypes.string.isRequired,
22 signupRoute: PropTypes.string.isRequired, 28 signupRoute: PropTypes.string.isRequired,
23 recipes: MobxPropTypes.arrayOrObservableArray.isRequired, 29 recipes: MobxPropTypes.arrayOrObservableArray.isRequired,
30 actions: PropTypes.object.isRequired,
24 }; 31 };
25 32
26 static contextTypes = { 33 static contextTypes = {
27 intl: intlShape, 34 intl: intlShape,
28 }; 35 };
29 36
37 useLocalServer() {
38 serverlessLogin(this.props.actions);
39 }
40
30 render() { 41 render() {
31 const { intl } = this.context; 42 const { intl } = this.context;
32 const { 43 const {
@@ -53,6 +64,12 @@ export default @observer class Login extends Component {
53 </Link> 64 </Link>
54 <br /> 65 <br />
55 <br /> 66 <br />
67 <a className="button" onClick={this.useLocalServer.bind(this)}>
68 {intl.formatMessage(messages.serverless)}
69 </a>
70 <br />
71 <br />
72
56 73
57 <Link to="settings/app"> 74 <Link to="settings/app">
58 <span style={{ 75 <span style={{
diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js
index edff29ae8..6d7909362 100644
--- a/src/components/services/content/Services.js
+++ b/src/components/services/content/Services.js
@@ -1,6 +1,6 @@
1import React, { Component } from 'react'; 1import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; 3import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react';
4import { Link } from 'react-router'; 4import { Link } from 'react-router';
5import { defineMessages, intlShape } from 'react-intl'; 5import { defineMessages, intlShape } from 'react-intl';
6import Confetti from 'react-confetti'; 6import Confetti from 'react-confetti';
@@ -9,6 +9,7 @@ import injectSheet from 'react-jss';
9 9
10import ServiceView from './ServiceView'; 10import ServiceView from './ServiceView';
11import Appear from '../../ui/effects/Appear'; 11import Appear from '../../ui/effects/Appear';
12import serverlessLogin from '../../../helpers/serverless-helpers';
12 13
13const messages = defineMessages({ 14const messages = defineMessages({
14 welcome: { 15 welcome: {
@@ -23,6 +24,10 @@ const messages = defineMessages({
23 id: 'services.login', 24 id: 'services.login',
24 defaultMessage: '!!!Please login to use Ferdi.', 25 defaultMessage: '!!!Please login to use Ferdi.',
25 }, 26 },
27 serverless: {
28 id: 'services.serverless',
29 defaultMessage: '!!!Use Ferdi without an Account',
30 },
26 serverInfo: { 31 serverInfo: {
27 id: 'services.serverInfo', 32 id: 'services.serverInfo',
28 defaultMessage: '!!!Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.', 33 defaultMessage: '!!!Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.',
@@ -39,7 +44,7 @@ const styles = {
39 }, 44 },
40}; 45};
41 46
42export default @observer @injectSheet(styles) class Services extends Component { 47export default @observer @inject('actions') @injectSheet(styles) class Services extends Component {
43 static propTypes = { 48 static propTypes = {
44 services: MobxPropTypes.arrayOrObservableArray, 49 services: MobxPropTypes.arrayOrObservableArray,
45 setWebviewReference: PropTypes.func.isRequired, 50 setWebviewReference: PropTypes.func.isRequired,
@@ -52,6 +57,7 @@ export default @observer @injectSheet(styles) class Services extends Component {
52 userHasCompletedSignup: PropTypes.bool.isRequired, 57 userHasCompletedSignup: PropTypes.bool.isRequired,
53 hasActivatedTrial: PropTypes.bool.isRequired, 58 hasActivatedTrial: PropTypes.bool.isRequired,
54 classes: PropTypes.object.isRequired, 59 classes: PropTypes.object.isRequired,
60 actions: PropTypes.object.isRequired,
55 }; 61 };
56 62
57 static defaultProps = { 63 static defaultProps = {
@@ -68,6 +74,12 @@ export default @observer @injectSheet(styles) class Services extends Component {
68 74
69 _confettiTimeout = null; 75 _confettiTimeout = null;
70 76
77 constructor(props) {
78 super(props);
79
80 this.useLocalServer = this.useLocalServer.bind(this);
81 }
82
71 componentDidMount() { 83 componentDidMount() {
72 this._confettiTimeout = window.setTimeout(() => { 84 this._confettiTimeout = window.setTimeout(() => {
73 this.setState({ 85 this.setState({
@@ -82,6 +94,10 @@ export default @observer @injectSheet(styles) class Services extends Component {
82 } 94 }
83 } 95 }
84 96
97 useLocalServer() {
98 serverlessLogin(this.props.actions);
99 }
100
85 render() { 101 render() {
86 const { 102 const {
87 services, 103 services,
@@ -136,6 +152,18 @@ export default @observer @injectSheet(styles) class Services extends Component {
136 <Link to={isLoggedIn ? '/settings/services' : '/auth/welcome'} className="button"> 152 <Link to={isLoggedIn ? '/settings/services' : '/auth/welcome'} className="button">
137 { isLoggedIn ? intl.formatMessage(messages.getStarted) : 'Login' } 153 { isLoggedIn ? intl.formatMessage(messages.getStarted) : 'Login' }
138 </Link> 154 </Link>
155 {!isLoggedIn && (
156 <button
157 type="button"
158 className="button"
159 style={{
160 marginLeft: 10,
161 }}
162 onClick={this.useLocalServer}
163 >
164 {intl.formatMessage(messages.serverless)}
165 </button>
166 )}
139 </Appear> 167 </Appear>
140 </div> 168 </div>
141 </Appear> 169 </Appear>
diff --git a/src/helpers/serverless-helpers.js b/src/helpers/serverless-helpers.js
new file mode 100644
index 000000000..741bce7f9
--- /dev/null
+++ b/src/helpers/serverless-helpers.js
@@ -0,0 +1,16 @@
1export default function useLocalServer(actions) {
2 // Use local server for user
3 actions.settings.update({
4 type: 'app',
5 data: {
6 server: 'http://localhost:45569',
7 },
8 });
9
10 // Log into local server
11 // Credentials are ignored by the server but the client requires them
12 actions.user.login({
13 email: 'ferdi@localhost',
14 password: 'FERDI_',
15 });
16}
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index c2ce3d783..e22c80246 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -272,143 +272,169 @@
272 "defaultMessage": "!!!Sign in", 272 "defaultMessage": "!!!Sign in",
273 "end": { 273 "end": {
274 "column": 3, 274 "column": 3,
275 "line": 20 275 "line": 22
276 }, 276 },
277 "file": "src/components/auth/Login.js", 277 "file": "src/components/auth/Login.js",
278 "id": "login.headline", 278 "id": "login.headline",
279 "start": { 279 "start": {
280 "column": 12, 280 "column": 12,
281 "line": 17 281 "line": 19
282 } 282 }
283 }, 283 },
284 { 284 {
285 "defaultMessage": "!!!Email address", 285 "defaultMessage": "!!!Email address",
286 "end": { 286 "end": {
287 "column": 3, 287 "column": 3,
288 "line": 24 288 "line": 26
289 }, 289 },
290 "file": "src/components/auth/Login.js", 290 "file": "src/components/auth/Login.js",
291 "id": "login.email.label", 291 "id": "login.email.label",
292 "start": { 292 "start": {
293 "column": 14, 293 "column": 14,
294 "line": 21 294 "line": 23
295 } 295 }
296 }, 296 },
297 { 297 {
298 "defaultMessage": "!!!Password", 298 "defaultMessage": "!!!Password",
299 "end": { 299 "end": {
300 "column": 3, 300 "column": 3,
301 "line": 28 301 "line": 30
302 }, 302 },
303 "file": "src/components/auth/Login.js", 303 "file": "src/components/auth/Login.js",
304 "id": "login.password.label", 304 "id": "login.password.label",
305 "start": { 305 "start": {
306 "column": 17, 306 "column": 17,
307 "line": 25 307 "line": 27
308 } 308 }
309 }, 309 },
310 { 310 {
311 "defaultMessage": "!!!Sign in", 311 "defaultMessage": "!!!Sign in",
312 "end": { 312 "end": {
313 "column": 3, 313 "column": 3,
314 "line": 32 314 "line": 34
315 }, 315 },
316 "file": "src/components/auth/Login.js", 316 "file": "src/components/auth/Login.js",
317 "id": "login.submit.label", 317 "id": "login.submit.label",
318 "start": { 318 "start": {
319 "column": 21, 319 "column": 21,
320 "line": 29 320 "line": 31
321 } 321 }
322 }, 322 },
323 { 323 {
324 "defaultMessage": "!!!Email or password not valid", 324 "defaultMessage": "!!!Email or password not valid",
325 "end": { 325 "end": {
326 "column": 3, 326 "column": 3,
327 "line": 36 327 "line": 38
328 }, 328 },
329 "file": "src/components/auth/Login.js", 329 "file": "src/components/auth/Login.js",
330 "id": "login.invalidCredentials", 330 "id": "login.invalidCredentials",
331 "start": { 331 "start": {
332 "column": 22, 332 "column": 22,
333 "line": 33 333 "line": 35
334 } 334 }
335 }, 335 },
336 { 336 {
337 "defaultMessage": "!!!Using a Franz account to log in?", 337 "defaultMessage": "!!!Using a Franz account to log in?",
338 "end": { 338 "end": {
339 "column": 3, 339 "column": 3,
340 "line": 40 340 "line": 42
341 }, 341 },
342 "file": "src/components/auth/Login.js", 342 "file": "src/components/auth/Login.js",
343 "id": "login.customServerQuestion", 343 "id": "login.customServerQuestion",
344 "start": { 344 "start": {
345 "column": 24, 345 "column": 24,
346 "line": 37 346 "line": 39
347 } 347 }
348 }, 348 },
349 { 349 {
350 "defaultMessage": "!!!Try importing your Franz account into Ferdi", 350 "defaultMessage": "!!!Try importing your Franz account into Ferdi",
351 "end": { 351 "end": {
352 "column": 3, 352 "column": 3,
353 "line": 44 353 "line": 46
354 }, 354 },
355 "file": "src/components/auth/Login.js", 355 "file": "src/components/auth/Login.js",
356 "id": "login.customServerSuggestion", 356 "id": "login.customServerSuggestion",
357 "start": { 357 "start": {
358 "column": 26, 358 "column": 26,
359 "line": 41 359 "line": 43
360 } 360 }
361 }, 361 },
362 { 362 {
363 "defaultMessage": "!!!Your session expired, please login again.", 363 "defaultMessage": "!!!Your session expired, please login again.",
364 "end": { 364 "end": {
365 "column": 3, 365 "column": 3,
366 "line": 48 366 "line": 50
367 }, 367 },
368 "file": "src/components/auth/Login.js", 368 "file": "src/components/auth/Login.js",
369 "id": "login.tokenExpired", 369 "id": "login.tokenExpired",
370 "start": { 370 "start": {
371 "column": 16, 371 "column": 16,
372 "line": 45 372 "line": 47
373 } 373 }
374 }, 374 },
375 { 375 {
376 "defaultMessage": "!!!Your session expired, please login again.", 376 "defaultMessage": "!!!Your session expired, please login again.",
377 "end": { 377 "end": {
378 "column": 3, 378 "column": 3,
379 "line": 52 379 "line": 54
380 }, 380 },
381 "file": "src/components/auth/Login.js", 381 "file": "src/components/auth/Login.js",
382 "id": "login.serverLogout", 382 "id": "login.serverLogout",
383 "start": { 383 "start": {
384 "column": 16, 384 "column": 16,
385 "line": 49 385 "line": 51
386 } 386 }
387 }, 387 },
388 { 388 {
389 "defaultMessage": "!!!Create a free account", 389 "defaultMessage": "!!!Create a free account",
390 "end": { 390 "end": {
391 "column": 3, 391 "column": 3,
392 "line": 56 392 "line": 58
393 }, 393 },
394 "file": "src/components/auth/Login.js", 394 "file": "src/components/auth/Login.js",
395 "id": "login.link.signup", 395 "id": "login.link.signup",
396 "start": { 396 "start": {
397 "column": 14, 397 "column": 14,
398 "line": 53 398 "line": 55
399 }
400 },
401 {
402 "defaultMessage": "!!!Change server",
403 "end": {
404 "column": 3,
405 "line": 62
406 },
407 "file": "src/components/auth/Login.js",
408 "id": "login.changeServer",
409 "start": {
410 "column": 16,
411 "line": 59
412 }
413 },
414 {
415 "defaultMessage": "!!!Use Ferdi without an Account",
416 "end": {
417 "column": 3,
418 "line": 66
419 },
420 "file": "src/components/auth/Login.js",
421 "id": "services.serverless",
422 "start": {
423 "column": 14,
424 "line": 63
399 } 425 }
400 }, 426 },
401 { 427 {
402 "defaultMessage": "!!!Forgot password", 428 "defaultMessage": "!!!Forgot password",
403 "end": { 429 "end": {
404 "column": 3, 430 "column": 3,
405 "line": 60 431 "line": 70
406 }, 432 },
407 "file": "src/components/auth/Login.js", 433 "file": "src/components/auth/Login.js",
408 "id": "login.link.password", 434 "id": "login.link.password",
409 "start": { 435 "start": {
410 "column": 16, 436 "column": 16,
411 "line": 57 437 "line": 67
412 } 438 }
413 } 439 }
414 ], 440 ],
@@ -638,143 +664,169 @@
638 "defaultMessage": "!!!Sign up", 664 "defaultMessage": "!!!Sign up",
639 "end": { 665 "end": {
640 "column": 3, 666 "column": 3,
641 "line": 20 667 "line": 22
642 }, 668 },
643 "file": "src/components/auth/Signup.js", 669 "file": "src/components/auth/Signup.js",
644 "id": "signup.headline", 670 "id": "signup.headline",
645 "start": { 671 "start": {
646 "column": 12, 672 "column": 12,
647 "line": 17 673 "line": 19
648 } 674 }
649 }, 675 },
650 { 676 {
651 "defaultMessage": "!!!Firstname", 677 "defaultMessage": "!!!Firstname",
652 "end": { 678 "end": {
653 "column": 3, 679 "column": 3,
654 "line": 24 680 "line": 26
655 }, 681 },
656 "file": "src/components/auth/Signup.js", 682 "file": "src/components/auth/Signup.js",
657 "id": "signup.firstname.label", 683 "id": "signup.firstname.label",
658 "start": { 684 "start": {
659 "column": 18, 685 "column": 18,
660 "line": 21 686 "line": 23
661 } 687 }
662 }, 688 },
663 { 689 {
664 "defaultMessage": "!!!Lastname", 690 "defaultMessage": "!!!Lastname",
665 "end": { 691 "end": {
666 "column": 3, 692 "column": 3,
667 "line": 28 693 "line": 30
668 }, 694 },
669 "file": "src/components/auth/Signup.js", 695 "file": "src/components/auth/Signup.js",
670 "id": "signup.lastname.label", 696 "id": "signup.lastname.label",
671 "start": { 697 "start": {
672 "column": 17, 698 "column": 17,
673 "line": 25 699 "line": 27
674 } 700 }
675 }, 701 },
676 { 702 {
677 "defaultMessage": "!!!Email address", 703 "defaultMessage": "!!!Email address",
678 "end": { 704 "end": {
679 "column": 3, 705 "column": 3,
680 "line": 32 706 "line": 34
681 }, 707 },
682 "file": "src/components/auth/Signup.js", 708 "file": "src/components/auth/Signup.js",
683 "id": "signup.email.label", 709 "id": "signup.email.label",
684 "start": { 710 "start": {
685 "column": 14, 711 "column": 14,
686 "line": 29 712 "line": 31
687 } 713 }
688 }, 714 },
689 { 715 {
690 "defaultMessage": "!!!Password", 716 "defaultMessage": "!!!Password",
691 "end": { 717 "end": {
692 "column": 3, 718 "column": 3,
693 "line": 40 719 "line": 42
694 }, 720 },
695 "file": "src/components/auth/Signup.js", 721 "file": "src/components/auth/Signup.js",
696 "id": "signup.password.label", 722 "id": "signup.password.label",
697 "start": { 723 "start": {
698 "column": 17, 724 "column": 17,
699 "line": 37 725 "line": 39
700 } 726 }
701 }, 727 },
702 { 728 {
703 "defaultMessage": "!!!By creating a Ferdi account you accept the", 729 "defaultMessage": "!!!By creating a Ferdi account you accept the",
704 "end": { 730 "end": {
705 "column": 3, 731 "column": 3,
706 "line": 44 732 "line": 46
707 }, 733 },
708 "file": "src/components/auth/Signup.js", 734 "file": "src/components/auth/Signup.js",
709 "id": "signup.legal.info", 735 "id": "signup.legal.info",
710 "start": { 736 "start": {
711 "column": 13, 737 "column": 13,
712 "line": 41 738 "line": 43
713 } 739 }
714 }, 740 },
715 { 741 {
716 "defaultMessage": "!!!Terms of service", 742 "defaultMessage": "!!!Terms of service",
717 "end": { 743 "end": {
718 "column": 3, 744 "column": 3,
719 "line": 48 745 "line": 50
720 }, 746 },
721 "file": "src/components/auth/Signup.js", 747 "file": "src/components/auth/Signup.js",
722 "id": "signup.legal.terms", 748 "id": "signup.legal.terms",
723 "start": { 749 "start": {
724 "column": 9, 750 "column": 9,
725 "line": 45 751 "line": 47
726 } 752 }
727 }, 753 },
728 { 754 {
729 "defaultMessage": "!!!Privacy Statement", 755 "defaultMessage": "!!!Privacy Statement",
730 "end": { 756 "end": {
731 "column": 3, 757 "column": 3,
732 "line": 52 758 "line": 54
733 }, 759 },
734 "file": "src/components/auth/Signup.js", 760 "file": "src/components/auth/Signup.js",
735 "id": "signup.legal.privacy", 761 "id": "signup.legal.privacy",
736 "start": { 762 "start": {
737 "column": 11, 763 "column": 11,
738 "line": 49 764 "line": 51
739 } 765 }
740 }, 766 },
741 { 767 {
742 "defaultMessage": "!!!Create account", 768 "defaultMessage": "!!!Create account",
743 "end": { 769 "end": {
744 "column": 3, 770 "column": 3,
745 "line": 56 771 "line": 58
746 }, 772 },
747 "file": "src/components/auth/Signup.js", 773 "file": "src/components/auth/Signup.js",
748 "id": "signup.submit.label", 774 "id": "signup.submit.label",
749 "start": { 775 "start": {
750 "column": 21, 776 "column": 21,
751 "line": 53 777 "line": 55
752 } 778 }
753 }, 779 },
754 { 780 {
755 "defaultMessage": "!!!Already have an account, sign in?", 781 "defaultMessage": "!!!Already have an account, sign in?",
756 "end": { 782 "end": {
757 "column": 3, 783 "column": 3,
758 "line": 60 784 "line": 62
759 }, 785 },
760 "file": "src/components/auth/Signup.js", 786 "file": "src/components/auth/Signup.js",
761 "id": "signup.link.login", 787 "id": "signup.link.login",
762 "start": { 788 "start": {
763 "column": 13, 789 "column": 13,
764 "line": 57 790 "line": 59
791 }
792 },
793 {
794 "defaultMessage": "!!!Change server",
795 "end": {
796 "column": 3,
797 "line": 66
798 },
799 "file": "src/components/auth/Signup.js",
800 "id": "login.changeServer",
801 "start": {
802 "column": 16,
803 "line": 63
804 }
805 },
806 {
807 "defaultMessage": "!!!Use Ferdi without an Account",
808 "end": {
809 "column": 3,
810 "line": 70
811 },
812 "file": "src/components/auth/Signup.js",
813 "id": "services.serverless",
814 "start": {
815 "column": 14,
816 "line": 67
765 } 817 }
766 }, 818 },
767 { 819 {
768 "defaultMessage": "!!!A user with that email address already exists", 820 "defaultMessage": "!!!A user with that email address already exists",
769 "end": { 821 "end": {
770 "column": 3, 822 "column": 3,
771 "line": 64 823 "line": 74
772 }, 824 },
773 "file": "src/components/auth/Signup.js", 825 "file": "src/components/auth/Signup.js",
774 "id": "signup.emailDuplicate", 826 "id": "signup.emailDuplicate",
775 "start": { 827 "start": {
776 "column": 18, 828 "column": 18,
777 "line": 61 829 "line": 71
778 } 830 }
779 } 831 }
780 ], 832 ],
@@ -786,26 +838,39 @@
786 "defaultMessage": "!!!Create a free account", 838 "defaultMessage": "!!!Create a free account",
787 "end": { 839 "end": {
788 "column": 3, 840 "column": 3,
789 "line": 12 841 "line": 14
790 }, 842 },
791 "file": "src/components/auth/Welcome.js", 843 "file": "src/components/auth/Welcome.js",
792 "id": "welcome.signupButton", 844 "id": "welcome.signupButton",
793 "start": { 845 "start": {
794 "column": 16, 846 "column": 16,
795 "line": 9 847 "line": 11
796 } 848 }
797 }, 849 },
798 { 850 {
799 "defaultMessage": "!!!Login to your account", 851 "defaultMessage": "!!!Login to your account",
800 "end": { 852 "end": {
801 "column": 3, 853 "column": 3,
802 "line": 16 854 "line": 18
803 }, 855 },
804 "file": "src/components/auth/Welcome.js", 856 "file": "src/components/auth/Welcome.js",
805 "id": "welcome.loginButton", 857 "id": "welcome.loginButton",
806 "start": { 858 "start": {
807 "column": 15, 859 "column": 15,
808 "line": 13 860 "line": 15
861 }
862 },
863 {
864 "defaultMessage": "!!!Use Ferdi without an Account",
865 "end": {
866 "column": 3,
867 "line": 22
868 },
869 "file": "src/components/auth/Welcome.js",
870 "id": "services.serverless",
871 "start": {
872 "column": 14,
873 "line": 19
809 } 874 }
810 } 875 }
811 ], 876 ],
@@ -1167,52 +1232,65 @@
1167 "defaultMessage": "!!!Welcome to Ferdi", 1232 "defaultMessage": "!!!Welcome to Ferdi",
1168 "end": { 1233 "end": {
1169 "column": 3, 1234 "column": 3,
1170 "line": 17 1235 "line": 18
1171 }, 1236 },
1172 "file": "src/components/services/content/Services.js", 1237 "file": "src/components/services/content/Services.js",
1173 "id": "services.welcome", 1238 "id": "services.welcome",
1174 "start": { 1239 "start": {
1175 "column": 11, 1240 "column": 11,
1176 "line": 14 1241 "line": 15
1177 } 1242 }
1178 }, 1243 },
1179 { 1244 {
1180 "defaultMessage": "!!!Get started", 1245 "defaultMessage": "!!!Get started",
1181 "end": { 1246 "end": {
1182 "column": 3, 1247 "column": 3,
1183 "line": 21 1248 "line": 22
1184 }, 1249 },
1185 "file": "src/components/services/content/Services.js", 1250 "file": "src/components/services/content/Services.js",
1186 "id": "services.getStarted", 1251 "id": "services.getStarted",
1187 "start": { 1252 "start": {
1188 "column": 14, 1253 "column": 14,
1189 "line": 18 1254 "line": 19
1190 } 1255 }
1191 }, 1256 },
1192 { 1257 {
1193 "defaultMessage": "!!!Please login to use Ferdi.", 1258 "defaultMessage": "!!!Please login to use Ferdi.",
1194 "end": { 1259 "end": {
1195 "column": 3, 1260 "column": 3,
1196 "line": 25 1261 "line": 26
1197 }, 1262 },
1198 "file": "src/components/services/content/Services.js", 1263 "file": "src/components/services/content/Services.js",
1199 "id": "services.login", 1264 "id": "services.login",
1200 "start": { 1265 "start": {
1201 "column": 9, 1266 "column": 9,
1202 "line": 22 1267 "line": 23
1268 }
1269 },
1270 {
1271 "defaultMessage": "!!!Use Ferdi without an Account",
1272 "end": {
1273 "column": 3,
1274 "line": 30
1275 },
1276 "file": "src/components/services/content/Services.js",
1277 "id": "services.serverless",
1278 "start": {
1279 "column": 14,
1280 "line": 27
1203 } 1281 }
1204 }, 1282 },
1205 { 1283 {
1206 "defaultMessage": "!!!Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.", 1284 "defaultMessage": "!!!Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.",
1207 "end": { 1285 "end": {
1208 "column": 3, 1286 "column": 3,
1209 "line": 29 1287 "line": 34
1210 }, 1288 },
1211 "file": "src/components/services/content/Services.js", 1289 "file": "src/components/services/content/Services.js",
1212 "id": "services.serverInfo", 1290 "id": "services.serverInfo",
1213 "start": { 1291 "start": {
1214 "column": 14, 1292 "column": 14,
1215 "line": 26 1293 "line": 31
1216 } 1294 }
1217 } 1295 }
1218 ], 1296 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 2cdc57e3f..e7b0ced92 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -54,6 +54,7 @@
54 "locked.invalidCredentials": "Password invalid", 54 "locked.invalidCredentials": "Password invalid",
55 "locked.password.label": "Password", 55 "locked.password.label": "Password",
56 "locked.submit.label": "Unlock", 56 "locked.submit.label": "Unlock",
57 "login.changeServer": "Change server",
57 "login.customServerQuestion": "Using a Franz account to log in?", 58 "login.customServerQuestion": "Using a Franz account to log in?",
58 "login.customServerSuggestion": "Try importing your Franz account into Ferdi", 59 "login.customServerSuggestion": "Try importing your Franz account into Ferdi",
59 "login.email.label": "Email address", 60 "login.email.label": "Email address",
@@ -186,6 +187,7 @@
186 "services.getStarted": "Get started", 187 "services.getStarted": "Get started",
187 "services.login": "Please login to use Ferdi.", 188 "services.login": "Please login to use Ferdi.",
188 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.", 189 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.",
190 "services.serverless": "Use Ferdi without an Account",
189 "services.welcome": "Welcome to Ferdi", 191 "services.welcome": "Welcome to Ferdi",
190 "settings.account.account.editButton": "Edit account", 192 "settings.account.account.editButton": "Edit account",
191 "settings.account.accountType.basic": "Basic Account", 193 "settings.account.accountType.basic": "Basic Account",
diff --git a/src/i18n/messages/src/components/auth/Login.json b/src/i18n/messages/src/components/auth/Login.json
index 7e4b32294..c3b4ee4eb 100644
--- a/src/i18n/messages/src/components/auth/Login.json
+++ b/src/i18n/messages/src/components/auth/Login.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Sign in", 4 "defaultMessage": "!!!Sign in",
5 "file": "src/components/auth/Login.js", 5 "file": "src/components/auth/Login.js",
6 "start": { 6 "start": {
7 "line": 17, 7 "line": 19,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 20, 11 "line": 22,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Email address", 17 "defaultMessage": "!!!Email address",
18 "file": "src/components/auth/Login.js", 18 "file": "src/components/auth/Login.js",
19 "start": { 19 "start": {
20 "line": 21, 20 "line": 23,
21 "column": 14 21 "column": 14
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 24, 24 "line": 26,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Password", 30 "defaultMessage": "!!!Password",
31 "file": "src/components/auth/Login.js", 31 "file": "src/components/auth/Login.js",
32 "start": { 32 "start": {
33 "line": 25, 33 "line": 27,
34 "column": 17 34 "column": 17
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 28, 37 "line": 30,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Sign in", 43 "defaultMessage": "!!!Sign in",
44 "file": "src/components/auth/Login.js", 44 "file": "src/components/auth/Login.js",
45 "start": { 45 "start": {
46 "line": 29, 46 "line": 31,
47 "column": 21 47 "column": 21
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 32, 50 "line": 34,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Email or password not valid", 56 "defaultMessage": "!!!Email or password not valid",
57 "file": "src/components/auth/Login.js", 57 "file": "src/components/auth/Login.js",
58 "start": { 58 "start": {
59 "line": 33, 59 "line": 35,
60 "column": 22 60 "column": 22
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 36, 63 "line": 38,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Using a Franz account to log in?", 69 "defaultMessage": "!!!Using a Franz account to log in?",
70 "file": "src/components/auth/Login.js", 70 "file": "src/components/auth/Login.js",
71 "start": { 71 "start": {
72 "line": 37, 72 "line": 39,
73 "column": 24 73 "column": 24
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 40, 76 "line": 42,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Try importing your Franz account into Ferdi", 82 "defaultMessage": "!!!Try importing your Franz account into Ferdi",
83 "file": "src/components/auth/Login.js", 83 "file": "src/components/auth/Login.js",
84 "start": { 84 "start": {
85 "line": 41, 85 "line": 43,
86 "column": 26 86 "column": 26
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 44, 89 "line": 46,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Your session expired, please login again.", 95 "defaultMessage": "!!!Your session expired, please login again.",
96 "file": "src/components/auth/Login.js", 96 "file": "src/components/auth/Login.js",
97 "start": { 97 "start": {
98 "line": 45, 98 "line": 47,
99 "column": 16 99 "column": 16
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 48, 102 "line": 50,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Your session expired, please login again.", 108 "defaultMessage": "!!!Your session expired, please login again.",
109 "file": "src/components/auth/Login.js", 109 "file": "src/components/auth/Login.js",
110 "start": { 110 "start": {
111 "line": 49, 111 "line": 51,
112 "column": 16 112 "column": 16
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 52, 115 "line": 54,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,37 @@
121 "defaultMessage": "!!!Create a free account", 121 "defaultMessage": "!!!Create a free account",
122 "file": "src/components/auth/Login.js", 122 "file": "src/components/auth/Login.js",
123 "start": { 123 "start": {
124 "line": 53, 124 "line": 55,
125 "column": 14 125 "column": 14
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 56, 128 "line": 58,
129 "column": 3
130 }
131 },
132 {
133 "id": "login.changeServer",
134 "defaultMessage": "!!!Change server",
135 "file": "src/components/auth/Login.js",
136 "start": {
137 "line": 59,
138 "column": 16
139 },
140 "end": {
141 "line": 62,
142 "column": 3
143 }
144 },
145 {
146 "id": "services.serverless",
147 "defaultMessage": "!!!Use Ferdi without an Account",
148 "file": "src/components/auth/Login.js",
149 "start": {
150 "line": 63,
151 "column": 14
152 },
153 "end": {
154 "line": 66,
129 "column": 3 155 "column": 3
130 } 156 }
131 }, 157 },
@@ -134,11 +160,11 @@
134 "defaultMessage": "!!!Forgot password", 160 "defaultMessage": "!!!Forgot password",
135 "file": "src/components/auth/Login.js", 161 "file": "src/components/auth/Login.js",
136 "start": { 162 "start": {
137 "line": 57, 163 "line": 67,
138 "column": 16 164 "column": 16
139 }, 165 },
140 "end": { 166 "end": {
141 "line": 60, 167 "line": 70,
142 "column": 3 168 "column": 3
143 } 169 }
144 } 170 }
diff --git a/src/i18n/messages/src/components/auth/Signup.json b/src/i18n/messages/src/components/auth/Signup.json
index 9aa7b25ab..2628c9aa3 100644
--- a/src/i18n/messages/src/components/auth/Signup.json
+++ b/src/i18n/messages/src/components/auth/Signup.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Sign up", 4 "defaultMessage": "!!!Sign up",
5 "file": "src/components/auth/Signup.js", 5 "file": "src/components/auth/Signup.js",
6 "start": { 6 "start": {
7 "line": 17, 7 "line": 19,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 20, 11 "line": 22,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Firstname", 17 "defaultMessage": "!!!Firstname",
18 "file": "src/components/auth/Signup.js", 18 "file": "src/components/auth/Signup.js",
19 "start": { 19 "start": {
20 "line": 21, 20 "line": 23,
21 "column": 18 21 "column": 18
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 24, 24 "line": 26,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Lastname", 30 "defaultMessage": "!!!Lastname",
31 "file": "src/components/auth/Signup.js", 31 "file": "src/components/auth/Signup.js",
32 "start": { 32 "start": {
33 "line": 25, 33 "line": 27,
34 "column": 17 34 "column": 17
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 28, 37 "line": 30,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Email address", 43 "defaultMessage": "!!!Email address",
44 "file": "src/components/auth/Signup.js", 44 "file": "src/components/auth/Signup.js",
45 "start": { 45 "start": {
46 "line": 29, 46 "line": 31,
47 "column": 14 47 "column": 14
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 32, 50 "line": 34,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Password", 56 "defaultMessage": "!!!Password",
57 "file": "src/components/auth/Signup.js", 57 "file": "src/components/auth/Signup.js",
58 "start": { 58 "start": {
59 "line": 37, 59 "line": 39,
60 "column": 17 60 "column": 17
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 40, 63 "line": 42,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!By creating a Ferdi account you accept the", 69 "defaultMessage": "!!!By creating a Ferdi account you accept the",
70 "file": "src/components/auth/Signup.js", 70 "file": "src/components/auth/Signup.js",
71 "start": { 71 "start": {
72 "line": 41, 72 "line": 43,
73 "column": 13 73 "column": 13
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 44, 76 "line": 46,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Terms of service", 82 "defaultMessage": "!!!Terms of service",
83 "file": "src/components/auth/Signup.js", 83 "file": "src/components/auth/Signup.js",
84 "start": { 84 "start": {
85 "line": 45, 85 "line": 47,
86 "column": 9 86 "column": 9
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 48, 89 "line": 50,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Privacy Statement", 95 "defaultMessage": "!!!Privacy Statement",
96 "file": "src/components/auth/Signup.js", 96 "file": "src/components/auth/Signup.js",
97 "start": { 97 "start": {
98 "line": 49, 98 "line": 51,
99 "column": 11 99 "column": 11
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 52, 102 "line": 54,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Create account", 108 "defaultMessage": "!!!Create account",
109 "file": "src/components/auth/Signup.js", 109 "file": "src/components/auth/Signup.js",
110 "start": { 110 "start": {
111 "line": 53, 111 "line": 55,
112 "column": 21 112 "column": 21
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 56, 115 "line": 58,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,37 @@
121 "defaultMessage": "!!!Already have an account, sign in?", 121 "defaultMessage": "!!!Already have an account, sign in?",
122 "file": "src/components/auth/Signup.js", 122 "file": "src/components/auth/Signup.js",
123 "start": { 123 "start": {
124 "line": 57, 124 "line": 59,
125 "column": 13 125 "column": 13
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 60, 128 "line": 62,
129 "column": 3
130 }
131 },
132 {
133 "id": "login.changeServer",
134 "defaultMessage": "!!!Change server",
135 "file": "src/components/auth/Signup.js",
136 "start": {
137 "line": 63,
138 "column": 16
139 },
140 "end": {
141 "line": 66,
142 "column": 3
143 }
144 },
145 {
146 "id": "services.serverless",
147 "defaultMessage": "!!!Use Ferdi without an Account",
148 "file": "src/components/auth/Signup.js",
149 "start": {
150 "line": 67,
151 "column": 14
152 },
153 "end": {
154 "line": 70,
129 "column": 3 155 "column": 3
130 } 156 }
131 }, 157 },
@@ -134,11 +160,11 @@
134 "defaultMessage": "!!!A user with that email address already exists", 160 "defaultMessage": "!!!A user with that email address already exists",
135 "file": "src/components/auth/Signup.js", 161 "file": "src/components/auth/Signup.js",
136 "start": { 162 "start": {
137 "line": 61, 163 "line": 71,
138 "column": 18 164 "column": 18
139 }, 165 },
140 "end": { 166 "end": {
141 "line": 64, 167 "line": 74,
142 "column": 3 168 "column": 3
143 } 169 }
144 } 170 }
diff --git a/src/i18n/messages/src/components/auth/Welcome.json b/src/i18n/messages/src/components/auth/Welcome.json
index b4d2ce689..3f0c1e5c2 100644
--- a/src/i18n/messages/src/components/auth/Welcome.json
+++ b/src/i18n/messages/src/components/auth/Welcome.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Create a free account", 4 "defaultMessage": "!!!Create a free account",
5 "file": "src/components/auth/Welcome.js", 5 "file": "src/components/auth/Welcome.js",
6 "start": { 6 "start": {
7 "line": 9, 7 "line": 11,
8 "column": 16 8 "column": 16
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 12, 11 "line": 14,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,24 @@
17 "defaultMessage": "!!!Login to your account", 17 "defaultMessage": "!!!Login to your account",
18 "file": "src/components/auth/Welcome.js", 18 "file": "src/components/auth/Welcome.js",
19 "start": { 19 "start": {
20 "line": 13, 20 "line": 15,
21 "column": 15 21 "column": 15
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 16, 24 "line": 18,
25 "column": 3
26 }
27 },
28 {
29 "id": "services.serverless",
30 "defaultMessage": "!!!Use Ferdi without an Account",
31 "file": "src/components/auth/Welcome.js",
32 "start": {
33 "line": 19,
34 "column": 14
35 },
36 "end": {
37 "line": 22,
25 "column": 3 38 "column": 3
26 } 39 }
27 } 40 }
diff --git a/src/i18n/messages/src/components/services/content/Services.json b/src/i18n/messages/src/components/services/content/Services.json
index c2e57b8b5..6a5eb052e 100644
--- a/src/i18n/messages/src/components/services/content/Services.json
+++ b/src/i18n/messages/src/components/services/content/Services.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Welcome to Ferdi", 4 "defaultMessage": "!!!Welcome to Ferdi",
5 "file": "src/components/services/content/Services.js", 5 "file": "src/components/services/content/Services.js",
6 "start": { 6 "start": {
7 "line": 14, 7 "line": 15,
8 "column": 11 8 "column": 11
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 17, 11 "line": 18,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Get started", 17 "defaultMessage": "!!!Get started",
18 "file": "src/components/services/content/Services.js", 18 "file": "src/components/services/content/Services.js",
19 "start": { 19 "start": {
20 "line": 18, 20 "line": 19,
21 "column": 14 21 "column": 14
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 21, 24 "line": 22,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,24 @@
30 "defaultMessage": "!!!Please login to use Ferdi.", 30 "defaultMessage": "!!!Please login to use Ferdi.",
31 "file": "src/components/services/content/Services.js", 31 "file": "src/components/services/content/Services.js",
32 "start": { 32 "start": {
33 "line": 22, 33 "line": 23,
34 "column": 9 34 "column": 9
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 25, 37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "services.serverless",
43 "defaultMessage": "!!!Use Ferdi without an Account",
44 "file": "src/components/services/content/Services.js",
45 "start": {
46 "line": 27,
47 "column": 14
48 },
49 "end": {
50 "line": 30,
38 "column": 3 51 "column": 3
39 } 52 }
40 }, 53 },
@@ -43,11 +56,11 @@
43 "defaultMessage": "!!!Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.", 56 "defaultMessage": "!!!Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner.",
44 "file": "src/components/services/content/Services.js", 57 "file": "src/components/services/content/Services.js",
45 "start": { 58 "start": {
46 "line": 26, 59 "line": 31,
47 "column": 14 60 "column": 14
48 }, 61 },
49 "end": { 62 "end": {
50 "line": 29, 63 "line": 34,
51 "column": 3 64 "column": 3
52 } 65 }
53 } 66 }
diff --git a/src/index.js b/src/index.js
index 2ee404c0b..338a8e795 100644
--- a/src/index.js
+++ b/src/index.js
@@ -34,6 +34,9 @@ import { isPositionValid } from './electron/windowUtils';
34import { appId } from './package.json'; // eslint-disable-line import/no-unresolved 34import { appId } from './package.json'; // eslint-disable-line import/no-unresolved
35import './electron/exception'; 35import './electron/exception';
36 36
37// Start internal server
38import './server/start';
39
37import { 40import {
38 DEFAULT_APP_SETTINGS, 41 DEFAULT_APP_SETTINGS,
39 DEFAULT_WINDOW_OPTIONS, 42 DEFAULT_WINDOW_OPTIONS,
diff --git a/src/styles/services.scss b/src/styles/services.scss
index 5acf92d2c..ef1097791 100644
--- a/src/styles/services.scss
+++ b/src/styles/services.scss
@@ -64,7 +64,7 @@
64 margin: 25px 0 40px; 64 margin: 25px 0 40px;
65 } 65 }
66 66
67 a.button, 67 .button,
68 button { margin: 40px 0 20px; } 68 button { margin: 40px 0 20px; }
69 } 69 }
70 70
diff --git a/src/styles/type.scss b/src/styles/type.scss
index 135d32da0..1b3a905ef 100644
--- a/src/styles/type.scss
+++ b/src/styles/type.scss
@@ -33,7 +33,7 @@ p {
33 33
34strong { font-weight: bold; } 34strong { font-weight: bold; }
35 35
36a { 36a, button {
37 color: $theme-text-color; 37 color: $theme-text-color;
38 text-decoration: none; 38 text-decoration: none;
39 39
@@ -47,6 +47,7 @@ a {
47 position: relative; 47 position: relative;
48 text-align: center; 48 text-align: center;
49 transition: background .5s, color .5s; 49 transition: background .5s, color .5s;
50 cursor: pointer;
50 51
51 &:hover { 52 &:hover {
52 background: darken($theme-brand-primary, 5%); 53 background: darken($theme-brand-primary, 5%);
diff --git a/src/styles/welcome.scss b/src/styles/welcome.scss
index b517431f0..c1f85391e 100644
--- a/src/styles/welcome.scss
+++ b/src/styles/welcome.scss
@@ -48,6 +48,7 @@
48 .button { 48 .button {
49 border-color: #FFF; 49 border-color: #FFF;
50 color: #FFF; 50 color: #FFF;
51 cursor: pointer;
51 52
52 &:hover { 53 &:hover {
53 background: #FFF; 54 background: #FFF;