aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar vantezzen <properly@protonmail.com>2019-08-21 09:39:39 +0200
committerLibravatar vantezzen <properly@protonmail.com>2019-08-21 09:39:39 +0200
commitc4768a221f93d534f4d0454414cdf073af8a2356 (patch)
tree77fdf9eb3cbfa72c8fe40e45c88af61299004609 /src
parentUpdate dev-app-update.yml (diff)
downloadferdium-app-c4768a221f93d534f4d0454414cdf073af8a2356.tar.gz
ferdium-app-c4768a221f93d534f4d0454414cdf073af8a2356.tar.zst
ferdium-app-c4768a221f93d534f4d0454414cdf073af8a2356.zip
Remove analytics
Diffstat (limited to 'src')
-rw-r--r--src/app.js2
-rw-r--r--src/components/layout/Sidebar.js2
-rw-r--r--src/components/ui/PremiumFeatureContainer/index.js5
-rw-r--r--src/features/announcements/components/AnnouncementScreen.js3
-rw-r--r--src/features/announcements/store.js2
-rw-r--r--src/features/delayApp/Component.js4
-rw-r--r--src/features/delayApp/index.js3
-rw-r--r--src/features/shareFranz/Component.js10
-rw-r--r--src/features/shareFranz/index.js4
-rw-r--r--src/features/workspaces/components/CreateWorkspaceForm.js2
-rw-r--r--src/features/workspaces/components/EditWorkspaceForm.js3
-rw-r--r--src/features/workspaces/components/WorkspaceDrawer.js7
-rw-r--r--src/i18n/messages/src/components/layout/AppLayout.json12
-rw-r--r--src/i18n/messages/src/components/layout/Sidebar.json24
-rw-r--r--src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json4
-rw-r--r--src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json4
-rw-r--r--src/i18n/messages/src/features/delayApp/Component.json12
-rw-r--r--src/i18n/messages/src/features/shareFranz/Component.json28
-rw-r--r--src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json8
-rw-r--r--src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json28
-rw-r--r--src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json32
-rw-r--r--src/i18n/messages/src/lib/Menu.json228
-rw-r--r--src/lib/Menu.js4
-rw-r--r--src/lib/analytics.js55
-rw-r--r--src/stores/AppStore.js12
-rw-r--r--src/stores/PaymentStore.js3
-rw-r--r--src/stores/RecipePreviewsStore.js8
-rw-r--r--src/stores/ServicesStore.js14
-rw-r--r--src/stores/UserStore.js13
29 files changed, 190 insertions, 346 deletions
diff --git a/src/app.js b/src/app.js
index cb3e37c64..40224f933 100644
--- a/src/app.js
+++ b/src/app.js
@@ -18,7 +18,6 @@ import apiFactory from './api';
18import actions from './actions'; 18import actions from './actions';
19import MenuFactory from './lib/Menu'; 19import MenuFactory from './lib/Menu';
20import TouchBarFactory from './lib/TouchBar'; 20import TouchBarFactory from './lib/TouchBar';
21import * as analytics from './lib/analytics';
22 21
23import I18N from './I18n'; 22import I18N from './I18n';
24import AppLayoutContainer from './containers/layout/AppLayoutContainer'; 23import AppLayoutContainer from './containers/layout/AppLayoutContainer';
@@ -67,7 +66,6 @@ window.addEventListener('load', () => {
67 api, 66 api,
68 menu, 67 menu,
69 touchBar, 68 touchBar,
70 analytics,
71 features: {}, 69 features: {},
72 render() { 70 render() {
73 const preparedApp = ( 71 const preparedApp = (
diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js
index 36c1f2e39..f43bc0b58 100644
--- a/src/components/layout/Sidebar.js
+++ b/src/components/layout/Sidebar.js
@@ -7,7 +7,6 @@ import { observer } from 'mobx-react';
7import Tabbar from '../services/tabs/Tabbar'; 7import Tabbar from '../services/tabs/Tabbar';
8import { ctrlKey } from '../../environment'; 8import { ctrlKey } from '../../environment';
9import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../../features/workspaces'; 9import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../../features/workspaces';
10import { gaEvent } from '../../lib/analytics';
11 10
12const messages = defineMessages({ 11const messages = defineMessages({
13 settings: { 12 settings: {
@@ -96,7 +95,6 @@ export default @observer class Sidebar extends Component {
96 onClick={() => { 95 onClick={() => {
97 toggleWorkspaceDrawer(); 96 toggleWorkspaceDrawer();
98 this.updateToolTip(); 97 this.updateToolTip();
99 gaEvent(GA_CATEGORY_WORKSPACES, 'toggleDrawer', 'sidebar');
100 }} 98 }}
101 className={`sidebar__button sidebar__button--workspaces ${isWorkspaceDrawerOpen ? 'is-active' : ''}`} 99 className={`sidebar__button sidebar__button--workspaces ${isWorkspaceDrawerOpen ? 'is-active' : ''}`}
102 data-tip={`${intl.formatMessage(workspaceToggleMessage)} (${ctrlKey}+D)`} 100 data-tip={`${intl.formatMessage(workspaceToggleMessage)} (${ctrlKey}+D)`}
diff --git a/src/components/ui/PremiumFeatureContainer/index.js b/src/components/ui/PremiumFeatureContainer/index.js
index 3c1e0fac3..08553b32a 100644
--- a/src/components/ui/PremiumFeatureContainer/index.js
+++ b/src/components/ui/PremiumFeatureContainer/index.js
@@ -9,7 +9,6 @@ import { oneOrManyChildElements } from '../../../prop-types';
9import UserStore from '../../../stores/UserStore'; 9import UserStore from '../../../stores/UserStore';
10 10
11import styles from './styles'; 11import styles from './styles';
12import { gaEvent } from '../../../lib/analytics';
13 12
14const messages = defineMessages({ 13const messages = defineMessages({
15 action: { 14 action: {
@@ -60,10 +59,6 @@ class PremiumFeatureContainer extends Component {
60 type="button" 59 type="button"
61 onClick={() => { 60 onClick={() => {
62 actions.ui.openSettings({ path: 'user' }); 61 actions.ui.openSettings({ path: 'user' });
63 if (gaEventInfo) {
64 const { category, event, label } = gaEventInfo;
65 gaEvent(category, event, label);
66 }
67 }} 62 }}
68 > 63 >
69 {intl.formatMessage(messages.action)} 64 {intl.formatMessage(messages.action)}
diff --git a/src/features/announcements/components/AnnouncementScreen.js b/src/features/announcements/components/AnnouncementScreen.js
index 03bd5ba41..d4b5fe955 100644
--- a/src/features/announcements/components/AnnouncementScreen.js
+++ b/src/features/announcements/components/AnnouncementScreen.js
@@ -8,7 +8,6 @@ import { Button } from '@meetfranz/forms';
8 8
9import { announcementsStore } from '../index'; 9import { announcementsStore } from '../index';
10import UIStore from '../../../stores/UIStore'; 10import UIStore from '../../../stores/UIStore';
11import { gaEvent } from '../../../lib/analytics';
12 11
13const renderer = new marked.Renderer(); 12const renderer = new marked.Renderer();
14 13
@@ -230,7 +229,6 @@ class AnnouncementScreen extends Component {
230 onClick={() => { 229 onClick={() => {
231 const { analytics } = announcement.main.cta; 230 const { analytics } = announcement.main.cta;
232 window.location.href = `#${announcement.main.cta.href}`; 231 window.location.href = `#${announcement.main.cta.href}`;
233 gaEvent(analytics.category, analytics.action, announcement.main.cta.label);
234 }} 232 }}
235 /> 233 />
236 </div> 234 </div>
@@ -255,7 +253,6 @@ class AnnouncementScreen extends Component {
255 onClick={() => { 253 onClick={() => {
256 const { analytics } = announcement.spotlight.cta; 254 const { analytics } = announcement.spotlight.cta;
257 window.location.href = `#${announcement.spotlight.cta.href}`; 255 window.location.href = `#${announcement.spotlight.cta.href}`;
258 gaEvent(analytics.category, analytics.action, announcement.spotlight.cta.label);
259 }} 256 }}
260 /> 257 />
261 </div> 258 </div>
diff --git a/src/features/announcements/store.js b/src/features/announcements/store.js
index de7ed2596..515fd97a0 100644
--- a/src/features/announcements/store.js
+++ b/src/features/announcements/store.js
@@ -12,7 +12,6 @@ import { getAnnouncementRequest, getChangelogRequest, getCurrentVersionRequest }
12import { announcementActions } from './actions'; 12import { announcementActions } from './actions';
13import { createActionBindings } from '../utils/ActionBinding'; 13import { createActionBindings } from '../utils/ActionBinding';
14import { createReactions } from '../../stores/lib/Reaction'; 14import { createReactions } from '../../stores/lib/Reaction';
15import { gaEvent } from '../../lib/analytics';
16import { matchRoute } from '../../helpers/routing-helpers'; 15import { matchRoute } from '../../helpers/routing-helpers';
17import { DEFAULT_APP_SETTINGS } from '../../config'; 16import { DEFAULT_APP_SETTINGS } from '../../config';
18 17
@@ -109,7 +108,6 @@ export class AnnouncementsStore extends FeatureStore {
109 if (router.location.pathname !== targetRoute) { 108 if (router.location.pathname !== targetRoute) {
110 this.stores.router.push(targetRoute); 109 this.stores.router.push(targetRoute);
111 } 110 }
112 gaEvent(GA_CATEGORY_ANNOUNCEMENTS, 'show');
113 }; 111 };
114 112
115 // ======= REACTIONS ======== 113 // ======= REACTIONS ========
diff --git a/src/features/delayApp/Component.js b/src/features/delayApp/Component.js
index ff0f1f2f8..7e09c2ea5 100644
--- a/src/features/delayApp/Component.js
+++ b/src/features/delayApp/Component.js
@@ -4,8 +4,6 @@ import { inject, observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5import injectSheet from 'react-jss'; 5import injectSheet from 'react-jss';
6 6
7import { gaEvent } from '../../lib/analytics';
8
9import Button from '../../components/ui/Button'; 7import Button from '../../components/ui/Button';
10 8
11import { config } from '.'; 9import { config } from '.';
@@ -65,8 +63,6 @@ export default @inject('actions') @injectSheet(styles) @observer class DelayApp
65 const { actions } = this.props; 63 const { actions } = this.props;
66 64
67 actions.ui.openSettings({ path: 'user' }); 65 actions.ui.openSettings({ path: 'user' });
68
69 gaEvent('DelayApp', 'subscribe_click', 'Delay App Feature');
70 } 66 }
71 67
72 render() { 68 render() {
diff --git a/src/features/delayApp/index.js b/src/features/delayApp/index.js
index 39fae3b20..5fc553684 100644
--- a/src/features/delayApp/index.js
+++ b/src/features/delayApp/index.js
@@ -3,7 +3,6 @@ import moment from 'moment';
3import DelayAppComponent from './Component'; 3import DelayAppComponent from './Component';
4 4
5import { DEFAULT_FEATURES_CONFIG } from '../../config'; 5import { DEFAULT_FEATURES_CONFIG } from '../../config';
6import { gaEvent, gaPage } from '../../lib/analytics';
7 6
8const debug = require('debug')('Franz:feature:delayApp'); 7const debug = require('debug')('Franz:feature:delayApp');
9 8
@@ -55,8 +54,6 @@ export default function init(stores) {
55 debug(`App will be delayed for ${config.delayDuration / 1000}s`); 54 debug(`App will be delayed for ${config.delayDuration / 1000}s`);
56 55
57 setVisibility(true); 56 setVisibility(true);
58 gaPage('/delayApp');
59 gaEvent('DelayApp', 'show', 'Delay App Feature');
60 57
61 timeLastDelay = moment(); 58 timeLastDelay = moment();
62 shownAfterLaunch = true; 59 shownAfterLaunch = true;
diff --git a/src/features/shareFranz/Component.js b/src/features/shareFranz/Component.js
index 8d1d595c5..320951f0d 100644
--- a/src/features/shareFranz/Component.js
+++ b/src/features/shareFranz/Component.js
@@ -8,7 +8,6 @@ import { H1, Icon } from '@meetfranz/ui';
8 8
9import Modal from '../../components/ui/Modal'; 9import Modal from '../../components/ui/Modal';
10import { state } from '.'; 10import { state } from '.';
11import { gaEvent } from '../../lib/analytics';
12import ServicesStore from '../../stores/ServicesStore'; 11import ServicesStore from '../../stores/ServicesStore';
13 12
14const messages = defineMessages({ 13const messages = defineMessages({
@@ -129,9 +128,6 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz
129 icon="mdiEmail" 128 icon="mdiEmail"
130 href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareTextEmail, { count: serviceCount })}}`} 129 href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareTextEmail, { count: serviceCount })}}`}
131 target="_blank" 130 target="_blank"
132 onClick={() => {
133 gaEvent('Share Franz', 'share', 'Share via email');
134 }}
135 /> 131 />
136 <Button 132 <Button
137 label={intl.formatMessage(messages.actionsFacebook)} 133 label={intl.formatMessage(messages.actionsFacebook)}
@@ -139,9 +135,6 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz
139 icon="mdiFacebookBox" 135 icon="mdiFacebookBox"
140 href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button" 136 href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button"
141 target="_blank" 137 target="_blank"
142 onClick={() => {
143 gaEvent('Share Franz', 'share', 'Share via Facebook');
144 }}
145 /> 138 />
146 <Button 139 <Button
147 label={intl.formatMessage(messages.actionsTwitter)} 140 label={intl.formatMessage(messages.actionsTwitter)}
@@ -149,9 +142,6 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz
149 icon="mdiTwitter" 142 icon="mdiTwitter"
150 href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareTextTwitter, { count: serviceCount })}`} 143 href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareTextTwitter, { count: serviceCount })}`}
151 target="_blank" 144 target="_blank"
152 onClick={() => {
153 gaEvent('Share Franz', 'share', 'Share via Twitter');
154 }}
155 /> 145 />
156 </div> 146 </div>
157 </Modal> 147 </Modal>
diff --git a/src/features/shareFranz/index.js b/src/features/shareFranz/index.js
index 87deacef4..41da57dd6 100644
--- a/src/features/shareFranz/index.js
+++ b/src/features/shareFranz/index.js
@@ -2,7 +2,6 @@ import { observable, reaction } from 'mobx';
2import ms from 'ms'; 2import ms from 'ms';
3 3
4import { state as delayAppState } from '../delayApp'; 4import { state as delayAppState } from '../delayApp';
5import { gaEvent, gaPage } from '../../lib/analytics';
6 5
7export { default as Component } from './Component'; 6export { default as Component } from './Component';
8 7
@@ -26,9 +25,6 @@ export default function initialize(stores) {
26 debug('Showing share window'); 25 debug('Showing share window');
27 26
28 state.isModalVisible = true; 27 state.isModalVisible = true;
29
30 gaEvent('Share Franz', 'show');
31 gaPage('/share-modal');
32 } 28 }
33 29
34 reaction( 30 reaction(
diff --git a/src/features/workspaces/components/CreateWorkspaceForm.js b/src/features/workspaces/components/CreateWorkspaceForm.js
index cddbb2b04..528376474 100644
--- a/src/features/workspaces/components/CreateWorkspaceForm.js
+++ b/src/features/workspaces/components/CreateWorkspaceForm.js
@@ -6,7 +6,6 @@ import { Input, Button } from '@meetfranz/forms';
6import injectSheet from 'react-jss'; 6import injectSheet from 'react-jss';
7import Form from '../../../lib/Form'; 7import Form from '../../../lib/Form';
8import { required } from '../../../helpers/validation-helpers'; 8import { required } from '../../../helpers/validation-helpers';
9import { gaEvent } from '../../../lib/analytics';
10import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index'; 9import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index';
11 10
12const messages = defineMessages({ 11const messages = defineMessages({
@@ -66,7 +65,6 @@ class CreateWorkspaceForm extends Component {
66 const { onSubmit } = this.props; 65 const { onSubmit } = this.props;
67 const values = f.values(); 66 const values = f.values();
68 onSubmit(values); 67 onSubmit(values);
69 gaEvent(GA_CATEGORY_WORKSPACES, 'create', values.name);
70 }, 68 },
71 }); 69 });
72 } 70 }
diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js
index e602ebd5a..4fb67dfb4 100644
--- a/src/features/workspaces/components/EditWorkspaceForm.js
+++ b/src/features/workspaces/components/EditWorkspaceForm.js
@@ -12,7 +12,6 @@ import Form from '../../../lib/Form';
12import { required } from '../../../helpers/validation-helpers'; 12import { required } from '../../../helpers/validation-helpers';
13import WorkspaceServiceListItem from './WorkspaceServiceListItem'; 13import WorkspaceServiceListItem from './WorkspaceServiceListItem';
14import Request from '../../../stores/lib/Request'; 14import Request from '../../../stores/lib/Request';
15import { gaEvent } from '../../../lib/analytics';
16import { GA_CATEGORY_WORKSPACES } from '../index'; 15import { GA_CATEGORY_WORKSPACES } from '../index';
17 16
18const messages = defineMessages({ 17const messages = defineMessages({
@@ -103,7 +102,6 @@ class EditWorkspaceForm extends Component {
103 const { onSave } = this.props; 102 const { onSave } = this.props;
104 const values = f.values(); 103 const values = f.values();
105 onSave(values); 104 onSave(values);
106 gaEvent(GA_CATEGORY_WORKSPACES, 'save');
107 }, 105 },
108 onError: async () => {}, 106 onError: async () => {},
109 }); 107 });
@@ -112,7 +110,6 @@ class EditWorkspaceForm extends Component {
112 delete() { 110 delete() {
113 const { onDelete } = this.props; 111 const { onDelete } = this.props;
114 onDelete(); 112 onDelete();
115 gaEvent(GA_CATEGORY_WORKSPACES, 'delete');
116 } 113 }
117 114
118 toggleService(service) { 115 toggleService(service) {
diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js
index 684e50dd0..7a36285c2 100644
--- a/src/features/workspaces/components/WorkspaceDrawer.js
+++ b/src/features/workspaces/components/WorkspaceDrawer.js
@@ -10,7 +10,6 @@ import ReactTooltip from 'react-tooltip';
10import WorkspaceDrawerItem from './WorkspaceDrawerItem'; 10import WorkspaceDrawerItem from './WorkspaceDrawerItem';
11import { workspaceActions } from '../actions'; 11import { workspaceActions } from '../actions';
12import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index'; 12import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index';
13import { gaEvent } from '../../../lib/analytics';
14 13
15const messages = defineMessages({ 14const messages = defineMessages({
16 headline: { 15 headline: {
@@ -154,7 +153,6 @@ class WorkspaceDrawer extends Component {
154 className={classes.workspacesSettingsButton} 153 className={classes.workspacesSettingsButton}
155 onClick={() => { 154 onClick={() => {
156 workspaceActions.openWorkspaceSettings(); 155 workspaceActions.openWorkspaceSettings();
157 gaEvent(GA_CATEGORY_WORKSPACES, 'settings', 'drawerHeadline');
158 }} 156 }}
159 data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`} 157 data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`}
160 > 158 >
@@ -176,7 +174,6 @@ class WorkspaceDrawer extends Component {
176 icon="mdiStar" 174 icon="mdiStar"
177 onClick={() => { 175 onClick={() => {
178 onUpgradeAccountClick(); 176 onUpgradeAccountClick();
179 gaEvent('User', 'upgrade', 'workspaceDrawer');
180 }} 177 }}
181 /> 178 />
182 ) : ( 179 ) : (
@@ -187,7 +184,6 @@ class WorkspaceDrawer extends Component {
187 icon="mdiPlusBox" 184 icon="mdiPlusBox"
188 onClick={() => { 185 onClick={() => {
189 workspaceActions.openWorkspaceSettings(); 186 workspaceActions.openWorkspaceSettings();
190 gaEvent(GA_CATEGORY_WORKSPACES, 'add', 'drawerPremiumCta');
191 }} 187 }}
192 /> 188 />
193 )} 189 )}
@@ -199,7 +195,6 @@ class WorkspaceDrawer extends Component {
199 onClick={() => { 195 onClick={() => {
200 workspaceActions.deactivate(); 196 workspaceActions.deactivate();
201 workspaceActions.toggleWorkspaceDrawer(); 197 workspaceActions.toggleWorkspaceDrawer();
202 gaEvent(GA_CATEGORY_WORKSPACES, 'switch', 'drawer');
203 }} 198 }}
204 services={getServicesForWorkspace(null)} 199 services={getServicesForWorkspace(null)}
205 isActive={actualWorkspace == null} 200 isActive={actualWorkspace == null}
@@ -213,7 +208,6 @@ class WorkspaceDrawer extends Component {
213 if (actualWorkspace === workspace) return; 208 if (actualWorkspace === workspace) return;
214 workspaceActions.activate({ workspace }); 209 workspaceActions.activate({ workspace });
215 workspaceActions.toggleWorkspaceDrawer(); 210 workspaceActions.toggleWorkspaceDrawer();
216 gaEvent(GA_CATEGORY_WORKSPACES, 'switch', 'drawer');
217 }} 211 }}
218 onContextMenuEditClick={() => workspaceActions.edit({ workspace })} 212 onContextMenuEditClick={() => workspaceActions.edit({ workspace })}
219 services={getServicesForWorkspace(workspace)} 213 services={getServicesForWorkspace(workspace)}
@@ -223,7 +217,6 @@ class WorkspaceDrawer extends Component {
223 className={classes.addNewWorkspaceLabel} 217 className={classes.addNewWorkspaceLabel}
224 onClick={() => { 218 onClick={() => {
225 workspaceActions.openWorkspaceSettings(); 219 workspaceActions.openWorkspaceSettings();
226 gaEvent(GA_CATEGORY_WORKSPACES, 'add', 'drawerAddLabel');
227 }} 220 }}
228 > 221 >
229 <Icon 222 <Icon
diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json
index 190c5dff7..ff61972eb 100644
--- a/src/i18n/messages/src/components/layout/AppLayout.json
+++ b/src/i18n/messages/src/components/layout/AppLayout.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Your services have been updated.", 4 "defaultMessage": "!!!Your services have been updated.",
5 "file": "src/components/layout/AppLayout.js", 5 "file": "src/components/layout/AppLayout.js",
6 "start": { 6 "start": {
7 "line": 26, 7 "line": 25,
8 "column": 19 8 "column": 19
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 29, 11 "line": 28,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Reload services", 17 "defaultMessage": "!!!Reload services",
18 "file": "src/components/layout/AppLayout.js", 18 "file": "src/components/layout/AppLayout.js",
19 "start": { 19 "start": {
20 "line": 30, 20 "line": 29,
21 "column": 24 21 "column": 24
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 33, 24 "line": 32,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Could not load services and user information", 30 "defaultMessage": "!!!Could not load services and user information",
31 "file": "src/components/layout/AppLayout.js", 31 "file": "src/components/layout/AppLayout.js",
32 "start": { 32 "start": {
33 "line": 34, 33 "line": 33,
34 "column": 26 34 "column": 26
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 37, 37 "line": 36,
38 "column": 3 38 "column": 3
39 } 39 }
40 } 40 }
diff --git a/src/i18n/messages/src/components/layout/Sidebar.json b/src/i18n/messages/src/components/layout/Sidebar.json
index d67adc96e..8fc508f71 100644
--- a/src/i18n/messages/src/components/layout/Sidebar.json
+++ b/src/i18n/messages/src/components/layout/Sidebar.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Settings", 4 "defaultMessage": "!!!Settings",
5 "file": "src/components/layout/Sidebar.js", 5 "file": "src/components/layout/Sidebar.js",
6 "start": { 6 "start": {
7 "line": 13, 7 "line": 12,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 16, 11 "line": 15,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Add new service", 17 "defaultMessage": "!!!Add new service",
18 "file": "src/components/layout/Sidebar.js", 18 "file": "src/components/layout/Sidebar.js",
19 "start": { 19 "start": {
20 "line": 17, 20 "line": 16,
21 "column": 17 21 "column": 17
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 20, 24 "line": 19,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Disable notifications & audio", 30 "defaultMessage": "!!!Disable notifications & audio",
31 "file": "src/components/layout/Sidebar.js", 31 "file": "src/components/layout/Sidebar.js",
32 "start": { 32 "start": {
33 "line": 21, 33 "line": 20,
34 "column": 8 34 "column": 8
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 24, 37 "line": 23,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Enable notifications & audio", 43 "defaultMessage": "!!!Enable notifications & audio",
44 "file": "src/components/layout/Sidebar.js", 44 "file": "src/components/layout/Sidebar.js",
45 "start": { 45 "start": {
46 "line": 25, 46 "line": 24,
47 "column": 10 47 "column": 10
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 28, 50 "line": 27,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Open workspace drawer", 56 "defaultMessage": "!!!Open workspace drawer",
57 "file": "src/components/layout/Sidebar.js", 57 "file": "src/components/layout/Sidebar.js",
58 "start": { 58 "start": {
59 "line": 29, 59 "line": 28,
60 "column": 23 60 "column": 23
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 32, 63 "line": 31,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Close workspace drawer", 69 "defaultMessage": "!!!Close workspace drawer",
70 "file": "src/components/layout/Sidebar.js", 70 "file": "src/components/layout/Sidebar.js",
71 "start": { 71 "start": {
72 "line": 33, 72 "line": 32,
73 "column": 24 73 "column": 24
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 36, 76 "line": 35,
77 "column": 3 77 "column": 3
78 } 78 }
79 } 79 }
diff --git a/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json b/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json
index 320d3ca3e..582d546fa 100644
--- a/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json
+++ b/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Upgrade account", 4 "defaultMessage": "!!!Upgrade account",
5 "file": "src/components/ui/PremiumFeatureContainer/index.js", 5 "file": "src/components/ui/PremiumFeatureContainer/index.js",
6 "start": { 6 "start": {
7 "line": 15, 7 "line": 14,
8 "column": 10 8 "column": 10
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 18, 11 "line": 17,
12 "column": 3 12 "column": 3
13 } 13 }
14 } 14 }
diff --git a/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json b/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json
index eb1b66916..278d807f2 100644
--- a/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json
+++ b/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Changes in Franz {version}", 4 "defaultMessage": "!!!Changes in Franz {version}",
5 "file": "src/features/announcements/components/AnnouncementScreen.js", 5 "file": "src/features/announcements/components/AnnouncementScreen.js",
6 "start": { 6 "start": {
7 "line": 20, 7 "line": 19,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 23, 11 "line": 22,
12 "column": 3 12 "column": 3
13 } 13 }
14 } 14 }
diff --git a/src/i18n/messages/src/features/delayApp/Component.json b/src/i18n/messages/src/features/delayApp/Component.json
index bacd9444a..4c06011bf 100644
--- a/src/i18n/messages/src/features/delayApp/Component.json
+++ b/src/i18n/messages/src/features/delayApp/Component.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Please purchase license to skip waiting", 4 "defaultMessage": "!!!Please purchase license to skip waiting",
5 "file": "src/features/delayApp/Component.js", 5 "file": "src/features/delayApp/Component.js",
6 "start": { 6 "start": {
7 "line": 15, 7 "line": 13,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 18, 11 "line": 16,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Get a Franz Supporter License", 17 "defaultMessage": "!!!Get a Franz Supporter License",
18 "file": "src/features/delayApp/Component.js", 18 "file": "src/features/delayApp/Component.js",
19 "start": { 19 "start": {
20 "line": 19, 20 "line": 17,
21 "column": 10 21 "column": 10
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 22, 24 "line": 20,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Franz will continue in {seconds} seconds.", 30 "defaultMessage": "!!!Franz will continue in {seconds} seconds.",
31 "file": "src/features/delayApp/Component.js", 31 "file": "src/features/delayApp/Component.js",
32 "start": { 32 "start": {
33 "line": 23, 33 "line": 21,
34 "column": 8 34 "column": 8
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 26, 37 "line": 24,
38 "column": 3 38 "column": 3
39 } 39 }
40 } 40 }
diff --git a/src/i18n/messages/src/features/shareFranz/Component.json b/src/i18n/messages/src/features/shareFranz/Component.json
index 34a43d5a0..b693da376 100644
--- a/src/i18n/messages/src/features/shareFranz/Component.json
+++ b/src/i18n/messages/src/features/shareFranz/Component.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Franz is better together!", 4 "defaultMessage": "!!!Franz is better together!",
5 "file": "src/features/shareFranz/Component.js", 5 "file": "src/features/shareFranz/Component.js",
6 "start": { 6 "start": {
7 "line": 15, 7 "line": 14,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 18, 11 "line": 17,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 17 "defaultMessage": "!!!Tell your friends and colleagues how awesome Franz is and help us to spread the word.",
18 "file": "src/features/shareFranz/Component.js", 18 "file": "src/features/shareFranz/Component.js",
19 "start": { 19 "start": {
20 "line": 19, 20 "line": 18,
21 "column": 8 21 "column": 8
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 22, 24 "line": 21,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Share as email", 30 "defaultMessage": "!!!Share as email",
31 "file": "src/features/shareFranz/Component.js", 31 "file": "src/features/shareFranz/Component.js",
32 "start": { 32 "start": {
33 "line": 23, 33 "line": 22,
34 "column": 16 34 "column": 16
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 26, 37 "line": 25,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Share on Facebook", 43 "defaultMessage": "!!!Share on Facebook",
44 "file": "src/features/shareFranz/Component.js", 44 "file": "src/features/shareFranz/Component.js",
45 "start": { 45 "start": {
46 "line": 27, 46 "line": 26,
47 "column": 19 47 "column": 19
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 30, 50 "line": 29,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Share on Twitter", 56 "defaultMessage": "!!!Share on Twitter",
57 "file": "src/features/shareFranz/Component.js", 57 "file": "src/features/shareFranz/Component.js",
58 "start": { 58 "start": {
59 "line": 31, 59 "line": 30,
60 "column": 18 60 "column": 18
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 34, 63 "line": 33,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", 69 "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com",
70 "file": "src/features/shareFranz/Component.js", 70 "file": "src/features/shareFranz/Component.js",
71 "start": { 71 "start": {
72 "line": 35, 72 "line": 34,
73 "column": 18 73 "column": 18
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 38, 76 "line": 37,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", 82 "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger",
83 "file": "src/features/shareFranz/Component.js", 83 "file": "src/features/shareFranz/Component.js",
84 "start": { 84 "start": {
85 "line": 39, 85 "line": 38,
86 "column": 20 86 "column": 20
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 42, 89 "line": 41,
90 "column": 3 90 "column": 3
91 } 91 }
92 } 92 }
diff --git a/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json b/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json
index f62bac42c..1aabfb520 100644
--- a/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json
+++ b/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Create workspace", 4 "defaultMessage": "!!!Create workspace",
5 "file": "src/features/workspaces/components/CreateWorkspaceForm.js", 5 "file": "src/features/workspaces/components/CreateWorkspaceForm.js",
6 "start": { 6 "start": {
7 "line": 13, 7 "line": 12,
8 "column": 16 8 "column": 16
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 16, 11 "line": 15,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Name", 17 "defaultMessage": "!!!Name",
18 "file": "src/features/workspaces/components/CreateWorkspaceForm.js", 18 "file": "src/features/workspaces/components/CreateWorkspaceForm.js",
19 "start": { 19 "start": {
20 "line": 17, 20 "line": 16,
21 "column": 8 21 "column": 8
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 20, 24 "line": 19,
25 "column": 3 25 "column": 3
26 } 26 }
27 } 27 }
diff --git a/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json b/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json
index 20ed99f8d..7a7208dc9 100644
--- a/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json
+++ b/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Delete workspace", 4 "defaultMessage": "!!!Delete workspace",
5 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 5 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
6 "start": { 6 "start": {
7 "line": 19, 7 "line": 18,
8 "column": 16 8 "column": 16
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 22, 11 "line": 21,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Save workspace", 17 "defaultMessage": "!!!Save workspace",
18 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 18 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
19 "start": { 19 "start": {
20 "line": 23, 20 "line": 22,
21 "column": 14 21 "column": 14
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 26, 24 "line": 25,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Name", 30 "defaultMessage": "!!!Name",
31 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 31 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
32 "start": { 32 "start": {
33 "line": 27, 33 "line": 26,
34 "column": 8 34 "column": 8
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 30, 37 "line": 29,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Your workspaces", 43 "defaultMessage": "!!!Your workspaces",
44 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 44 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
45 "start": { 45 "start": {
46 "line": 31, 46 "line": 30,
47 "column": 18 47 "column": 18
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 34, 50 "line": 33,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Services in this Workspace", 56 "defaultMessage": "!!!Services in this Workspace",
57 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 57 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
58 "start": { 58 "start": {
59 "line": 35, 59 "line": 34,
60 "column": 31 60 "column": 31
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 38, 63 "line": 37,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!You haven't added any services yet.", 69 "defaultMessage": "!!!You haven't added any services yet.",
70 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 70 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
71 "start": { 71 "start": {
72 "line": 39, 72 "line": 38,
73 "column": 19 73 "column": 19
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 42, 76 "line": 41,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Discover services", 82 "defaultMessage": "!!!Discover services",
83 "file": "src/features/workspaces/components/EditWorkspaceForm.js", 83 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
84 "start": { 84 "start": {
85 "line": 43, 85 "line": 42,
86 "column": 20 86 "column": 20
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 46, 89 "line": 45,
90 "column": 3 90 "column": 3
91 } 91 }
92 } 92 }
diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json
index 9f0935620..e91bd85f8 100644
--- a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json
+++ b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Workspaces", 4 "defaultMessage": "!!!Workspaces",
5 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 5 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
6 "start": { 6 "start": {
7 "line": 16, 7 "line": 15,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 19, 11 "line": 18,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!All services", 17 "defaultMessage": "!!!All services",
18 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 18 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
19 "start": { 19 "start": {
20 "line": 20, 20 "line": 19,
21 "column": 15 21 "column": 15
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 23, 24 "line": 22,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Workspaces settings", 30 "defaultMessage": "!!!Workspaces settings",
31 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 31 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
32 "start": { 32 "start": {
33 "line": 24, 33 "line": 23,
34 "column": 29 34 "column": 29
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 27, 37 "line": 26,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Info about workspace feature", 43 "defaultMessage": "!!!Info about workspace feature",
44 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 44 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
45 "start": { 45 "start": {
46 "line": 28, 46 "line": 27,
47 "column": 24 47 "column": 24
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 31, 50 "line": 30,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Create your first workspace", 56 "defaultMessage": "!!!Create your first workspace",
57 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 57 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
58 "start": { 58 "start": {
59 "line": 32, 59 "line": 31,
60 "column": 25 60 "column": 25
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 35, 63 "line": 34,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Reactivate premium account", 69 "defaultMessage": "!!!Reactivate premium account",
70 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 70 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
71 "start": { 71 "start": {
72 "line": 36, 72 "line": 35,
73 "column": 28 73 "column": 28
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 39, 76 "line": 38,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!add new workspace", 82 "defaultMessage": "!!!add new workspace",
83 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 83 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
84 "start": { 84 "start": {
85 "line": 40, 85 "line": 39,
86 "column": 24 86 "column": 24
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 43, 89 "line": 42,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Premium feature", 95 "defaultMessage": "!!!Premium feature",
96 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 96 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
97 "start": { 97 "start": {
98 "line": 44, 98 "line": 43,
99 "column": 23 99 "column": 23
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 47, 102 "line": 46,
103 "column": 3 103 "column": 3
104 } 104 }
105 } 105 }
diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json
index 6f878cbd1..251e2f42b 100644
--- a/src/i18n/messages/src/lib/Menu.json
+++ b/src/i18n/messages/src/lib/Menu.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Edit", 4 "defaultMessage": "!!!Edit",
5 "file": "src/lib/Menu.js", 5 "file": "src/lib/Menu.js",
6 "start": { 6 "start": {
7 "line": 15, 7 "line": 14,
8 "column": 8 8 "column": 8
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 18, 11 "line": 17,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Undo", 17 "defaultMessage": "!!!Undo",
18 "file": "src/lib/Menu.js", 18 "file": "src/lib/Menu.js",
19 "start": { 19 "start": {
20 "line": 19, 20 "line": 18,
21 "column": 8 21 "column": 8
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 22, 24 "line": 21,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Redo", 30 "defaultMessage": "!!!Redo",
31 "file": "src/lib/Menu.js", 31 "file": "src/lib/Menu.js",
32 "start": { 32 "start": {
33 "line": 23, 33 "line": 22,
34 "column": 8 34 "column": 8
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 26, 37 "line": 25,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Cut", 43 "defaultMessage": "!!!Cut",
44 "file": "src/lib/Menu.js", 44 "file": "src/lib/Menu.js",
45 "start": { 45 "start": {
46 "line": 27, 46 "line": 26,
47 "column": 7 47 "column": 7
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 30, 50 "line": 29,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Copy", 56 "defaultMessage": "!!!Copy",
57 "file": "src/lib/Menu.js", 57 "file": "src/lib/Menu.js",
58 "start": { 58 "start": {
59 "line": 31, 59 "line": 30,
60 "column": 8 60 "column": 8
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 34, 63 "line": 33,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Paste", 69 "defaultMessage": "!!!Paste",
70 "file": "src/lib/Menu.js", 70 "file": "src/lib/Menu.js",
71 "start": { 71 "start": {
72 "line": 35, 72 "line": 34,
73 "column": 9 73 "column": 9
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 38, 76 "line": 37,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Paste And Match Style", 82 "defaultMessage": "!!!Paste And Match Style",
83 "file": "src/lib/Menu.js", 83 "file": "src/lib/Menu.js",
84 "start": { 84 "start": {
85 "line": 39, 85 "line": 38,
86 "column": 22 86 "column": 22
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 42, 89 "line": 41,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Delete", 95 "defaultMessage": "!!!Delete",
96 "file": "src/lib/Menu.js", 96 "file": "src/lib/Menu.js",
97 "start": { 97 "start": {
98 "line": 43, 98 "line": 42,
99 "column": 10 99 "column": 10
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 46, 102 "line": 45,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Select All", 108 "defaultMessage": "!!!Select All",
109 "file": "src/lib/Menu.js", 109 "file": "src/lib/Menu.js",
110 "start": { 110 "start": {
111 "line": 47, 111 "line": 46,
112 "column": 13 112 "column": 13
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 50, 115 "line": 49,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!Speech", 121 "defaultMessage": "!!!Speech",
122 "file": "src/lib/Menu.js", 122 "file": "src/lib/Menu.js",
123 "start": { 123 "start": {
124 "line": 51, 124 "line": 50,
125 "column": 10 125 "column": 10
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 54, 128 "line": 53,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Start Speaking", 134 "defaultMessage": "!!!Start Speaking",
135 "file": "src/lib/Menu.js", 135 "file": "src/lib/Menu.js",
136 "start": { 136 "start": {
137 "line": 55, 137 "line": 54,
138 "column": 17 138 "column": 17
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 58, 141 "line": 57,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Stop Speaking", 147 "defaultMessage": "!!!Stop Speaking",
148 "file": "src/lib/Menu.js", 148 "file": "src/lib/Menu.js",
149 "start": { 149 "start": {
150 "line": 59, 150 "line": 58,
151 "column": 16 151 "column": 16
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 62, 154 "line": 61,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Start Dictation", 160 "defaultMessage": "!!!Start Dictation",
161 "file": "src/lib/Menu.js", 161 "file": "src/lib/Menu.js",
162 "start": { 162 "start": {
163 "line": 63, 163 "line": 62,
164 "column": 18 164 "column": 18
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 66, 167 "line": 65,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!Emoji & Symbols", 173 "defaultMessage": "!!!Emoji & Symbols",
174 "file": "src/lib/Menu.js", 174 "file": "src/lib/Menu.js",
175 "start": { 175 "start": {
176 "line": 67, 176 "line": 66,
177 "column": 16 177 "column": 16
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 70, 180 "line": 69,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,11 @@
186 "defaultMessage": "!!!Actual Size", 186 "defaultMessage": "!!!Actual Size",
187 "file": "src/lib/Menu.js", 187 "file": "src/lib/Menu.js",
188 "start": { 188 "start": {
189 "line": 71, 189 "line": 70,
190 "column": 13 190 "column": 13
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 74, 193 "line": 73,
194 "column": 3 194 "column": 3
195 } 195 }
196 }, 196 },
@@ -199,11 +199,11 @@
199 "defaultMessage": "!!!Zoom In", 199 "defaultMessage": "!!!Zoom In",
200 "file": "src/lib/Menu.js", 200 "file": "src/lib/Menu.js",
201 "start": { 201 "start": {
202 "line": 75, 202 "line": 74,
203 "column": 10 203 "column": 10
204 }, 204 },
205 "end": { 205 "end": {
206 "line": 78, 206 "line": 77,
207 "column": 3 207 "column": 3
208 } 208 }
209 }, 209 },
@@ -212,11 +212,11 @@
212 "defaultMessage": "!!!Zoom Out", 212 "defaultMessage": "!!!Zoom Out",
213 "file": "src/lib/Menu.js", 213 "file": "src/lib/Menu.js",
214 "start": { 214 "start": {
215 "line": 79, 215 "line": 78,
216 "column": 11 216 "column": 11
217 }, 217 },
218 "end": { 218 "end": {
219 "line": 82, 219 "line": 81,
220 "column": 3 220 "column": 3
221 } 221 }
222 }, 222 },
@@ -225,11 +225,11 @@
225 "defaultMessage": "!!!Enter Full Screen", 225 "defaultMessage": "!!!Enter Full Screen",
226 "file": "src/lib/Menu.js", 226 "file": "src/lib/Menu.js",
227 "start": { 227 "start": {
228 "line": 83, 228 "line": 82,
229 "column": 19 229 "column": 19
230 }, 230 },
231 "end": { 231 "end": {
232 "line": 86, 232 "line": 85,
233 "column": 3 233 "column": 3
234 } 234 }
235 }, 235 },
@@ -238,11 +238,11 @@
238 "defaultMessage": "!!!Exit Full Screen", 238 "defaultMessage": "!!!Exit Full Screen",
239 "file": "src/lib/Menu.js", 239 "file": "src/lib/Menu.js",
240 "start": { 240 "start": {
241 "line": 87, 241 "line": 86,
242 "column": 18 242 "column": 18
243 }, 243 },
244 "end": { 244 "end": {
245 "line": 90, 245 "line": 89,
246 "column": 3 246 "column": 3
247 } 247 }
248 }, 248 },
@@ -251,11 +251,11 @@
251 "defaultMessage": "!!!Toggle Full Screen", 251 "defaultMessage": "!!!Toggle Full Screen",
252 "file": "src/lib/Menu.js", 252 "file": "src/lib/Menu.js",
253 "start": { 253 "start": {
254 "line": 91, 254 "line": 90,
255 "column": 20 255 "column": 20
256 }, 256 },
257 "end": { 257 "end": {
258 "line": 94, 258 "line": 93,
259 "column": 3 259 "column": 3
260 } 260 }
261 }, 261 },
@@ -264,11 +264,11 @@
264 "defaultMessage": "!!!Toggle Developer Tools", 264 "defaultMessage": "!!!Toggle Developer Tools",
265 "file": "src/lib/Menu.js", 265 "file": "src/lib/Menu.js",
266 "start": { 266 "start": {
267 "line": 95, 267 "line": 94,
268 "column": 18 268 "column": 18
269 }, 269 },
270 "end": { 270 "end": {
271 "line": 98, 271 "line": 97,
272 "column": 3 272 "column": 3
273 } 273 }
274 }, 274 },
@@ -277,11 +277,11 @@
277 "defaultMessage": "!!!Toggle Service Developer Tools", 277 "defaultMessage": "!!!Toggle Service Developer Tools",
278 "file": "src/lib/Menu.js", 278 "file": "src/lib/Menu.js",
279 "start": { 279 "start": {
280 "line": 99, 280 "line": 98,
281 "column": 25 281 "column": 25
282 }, 282 },
283 "end": { 283 "end": {
284 "line": 102, 284 "line": 101,
285 "column": 3 285 "column": 3
286 } 286 }
287 }, 287 },
@@ -290,11 +290,11 @@
290 "defaultMessage": "!!!Reload Service", 290 "defaultMessage": "!!!Reload Service",
291 "file": "src/lib/Menu.js", 291 "file": "src/lib/Menu.js",
292 "start": { 292 "start": {
293 "line": 103, 293 "line": 102,
294 "column": 17 294 "column": 17
295 }, 295 },
296 "end": { 296 "end": {
297 "line": 106, 297 "line": 105,
298 "column": 3 298 "column": 3
299 } 299 }
300 }, 300 },
@@ -303,11 +303,11 @@
303 "defaultMessage": "!!!Reload Franz", 303 "defaultMessage": "!!!Reload Franz",
304 "file": "src/lib/Menu.js", 304 "file": "src/lib/Menu.js",
305 "start": { 305 "start": {
306 "line": 107, 306 "line": 106,
307 "column": 15 307 "column": 15
308 }, 308 },
309 "end": { 309 "end": {
310 "line": 110, 310 "line": 109,
311 "column": 3 311 "column": 3
312 } 312 }
313 }, 313 },
@@ -316,11 +316,11 @@
316 "defaultMessage": "!!!Minimize", 316 "defaultMessage": "!!!Minimize",
317 "file": "src/lib/Menu.js", 317 "file": "src/lib/Menu.js",
318 "start": { 318 "start": {
319 "line": 111, 319 "line": 110,
320 "column": 12 320 "column": 12
321 }, 321 },
322 "end": { 322 "end": {
323 "line": 114, 323 "line": 113,
324 "column": 3 324 "column": 3
325 } 325 }
326 }, 326 },
@@ -329,11 +329,11 @@
329 "defaultMessage": "!!!Close", 329 "defaultMessage": "!!!Close",
330 "file": "src/lib/Menu.js", 330 "file": "src/lib/Menu.js",
331 "start": { 331 "start": {
332 "line": 115, 332 "line": 114,
333 "column": 9 333 "column": 9
334 }, 334 },
335 "end": { 335 "end": {
336 "line": 118, 336 "line": 117,
337 "column": 3 337 "column": 3
338 } 338 }
339 }, 339 },
@@ -342,11 +342,11 @@
342 "defaultMessage": "!!!Learn More", 342 "defaultMessage": "!!!Learn More",
343 "file": "src/lib/Menu.js", 343 "file": "src/lib/Menu.js",
344 "start": { 344 "start": {
345 "line": 119, 345 "line": 118,
346 "column": 13 346 "column": 13
347 }, 347 },
348 "end": { 348 "end": {
349 "line": 122, 349 "line": 121,
350 "column": 3 350 "column": 3
351 } 351 }
352 }, 352 },
@@ -355,11 +355,11 @@
355 "defaultMessage": "!!!Changelog", 355 "defaultMessage": "!!!Changelog",
356 "file": "src/lib/Menu.js", 356 "file": "src/lib/Menu.js",
357 "start": { 357 "start": {
358 "line": 123, 358 "line": 122,
359 "column": 13 359 "column": 13
360 }, 360 },
361 "end": { 361 "end": {
362 "line": 126, 362 "line": 125,
363 "column": 3 363 "column": 3
364 } 364 }
365 }, 365 },
@@ -368,11 +368,11 @@
368 "defaultMessage": "!!!Support", 368 "defaultMessage": "!!!Support",
369 "file": "src/lib/Menu.js", 369 "file": "src/lib/Menu.js",
370 "start": { 370 "start": {
371 "line": 127, 371 "line": 126,
372 "column": 11 372 "column": 11
373 }, 373 },
374 "end": { 374 "end": {
375 "line": 130, 375 "line": 129,
376 "column": 3 376 "column": 3
377 } 377 }
378 }, 378 },
@@ -381,11 +381,11 @@
381 "defaultMessage": "!!!Copy Debug Information", 381 "defaultMessage": "!!!Copy Debug Information",
382 "file": "src/lib/Menu.js", 382 "file": "src/lib/Menu.js",
383 "start": { 383 "start": {
384 "line": 131, 384 "line": 130,
385 "column": 13 385 "column": 13
386 }, 386 },
387 "end": { 387 "end": {
388 "line": 134, 388 "line": 133,
389 "column": 3 389 "column": 3
390 } 390 }
391 }, 391 },
@@ -394,11 +394,11 @@
394 "defaultMessage": "!!!Franz Debug Information", 394 "defaultMessage": "!!!Franz Debug Information",
395 "file": "src/lib/Menu.js", 395 "file": "src/lib/Menu.js",
396 "start": { 396 "start": {
397 "line": 135, 397 "line": 134,
398 "column": 27 398 "column": 27
399 }, 399 },
400 "end": { 400 "end": {
401 "line": 138, 401 "line": 137,
402 "column": 3 402 "column": 3
403 } 403 }
404 }, 404 },
@@ -407,11 +407,11 @@
407 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", 407 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
408 "file": "src/lib/Menu.js", 408 "file": "src/lib/Menu.js",
409 "start": { 409 "start": {
410 "line": 139, 410 "line": 138,
411 "column": 23 411 "column": 23
412 }, 412 },
413 "end": { 413 "end": {
414 "line": 142, 414 "line": 141,
415 "column": 3 415 "column": 3
416 } 416 }
417 }, 417 },
@@ -420,11 +420,11 @@
420 "defaultMessage": "!!!Terms of Service", 420 "defaultMessage": "!!!Terms of Service",
421 "file": "src/lib/Menu.js", 421 "file": "src/lib/Menu.js",
422 "start": { 422 "start": {
423 "line": 143, 423 "line": 142,
424 "column": 7 424 "column": 7
425 }, 425 },
426 "end": { 426 "end": {
427 "line": 146, 427 "line": 145,
428 "column": 3 428 "column": 3
429 } 429 }
430 }, 430 },
@@ -433,11 +433,11 @@
433 "defaultMessage": "!!!Privacy Statement", 433 "defaultMessage": "!!!Privacy Statement",
434 "file": "src/lib/Menu.js", 434 "file": "src/lib/Menu.js",
435 "start": { 435 "start": {
436 "line": 147, 436 "line": 146,
437 "column": 11 437 "column": 11
438 }, 438 },
439 "end": { 439 "end": {
440 "line": 150, 440 "line": 149,
441 "column": 3 441 "column": 3
442 } 442 }
443 }, 443 },
@@ -446,11 +446,11 @@
446 "defaultMessage": "!!!File", 446 "defaultMessage": "!!!File",
447 "file": "src/lib/Menu.js", 447 "file": "src/lib/Menu.js",
448 "start": { 448 "start": {
449 "line": 151, 449 "line": 150,
450 "column": 8 450 "column": 8
451 }, 451 },
452 "end": { 452 "end": {
453 "line": 154, 453 "line": 153,
454 "column": 3 454 "column": 3
455 } 455 }
456 }, 456 },
@@ -459,11 +459,11 @@
459 "defaultMessage": "!!!View", 459 "defaultMessage": "!!!View",
460 "file": "src/lib/Menu.js", 460 "file": "src/lib/Menu.js",
461 "start": { 461 "start": {
462 "line": 155, 462 "line": 154,
463 "column": 8 463 "column": 8
464 }, 464 },
465 "end": { 465 "end": {
466 "line": 158, 466 "line": 157,
467 "column": 3 467 "column": 3
468 } 468 }
469 }, 469 },
@@ -472,11 +472,11 @@
472 "defaultMessage": "!!!Services", 472 "defaultMessage": "!!!Services",
473 "file": "src/lib/Menu.js", 473 "file": "src/lib/Menu.js",
474 "start": { 474 "start": {
475 "line": 159, 475 "line": 158,
476 "column": 12 476 "column": 12
477 }, 477 },
478 "end": { 478 "end": {
479 "line": 162, 479 "line": 161,
480 "column": 3 480 "column": 3
481 } 481 }
482 }, 482 },
@@ -485,11 +485,11 @@
485 "defaultMessage": "!!!Window", 485 "defaultMessage": "!!!Window",
486 "file": "src/lib/Menu.js", 486 "file": "src/lib/Menu.js",
487 "start": { 487 "start": {
488 "line": 163, 488 "line": 162,
489 "column": 10 489 "column": 10
490 }, 490 },
491 "end": { 491 "end": {
492 "line": 166, 492 "line": 165,
493 "column": 3 493 "column": 3
494 } 494 }
495 }, 495 },
@@ -498,11 +498,11 @@
498 "defaultMessage": "!!!Help", 498 "defaultMessage": "!!!Help",
499 "file": "src/lib/Menu.js", 499 "file": "src/lib/Menu.js",
500 "start": { 500 "start": {
501 "line": 167, 501 "line": 166,
502 "column": 8 502 "column": 8
503 }, 503 },
504 "end": { 504 "end": {
505 "line": 170, 505 "line": 169,
506 "column": 3 506 "column": 3
507 } 507 }
508 }, 508 },
@@ -511,11 +511,11 @@
511 "defaultMessage": "!!!About Franz", 511 "defaultMessage": "!!!About Franz",
512 "file": "src/lib/Menu.js", 512 "file": "src/lib/Menu.js",
513 "start": { 513 "start": {
514 "line": 171, 514 "line": 170,
515 "column": 9 515 "column": 9
516 }, 516 },
517 "end": { 517 "end": {
518 "line": 174, 518 "line": 173,
519 "column": 3 519 "column": 3
520 } 520 }
521 }, 521 },
@@ -524,11 +524,11 @@
524 "defaultMessage": "!!!What's new?", 524 "defaultMessage": "!!!What's new?",
525 "file": "src/lib/Menu.js", 525 "file": "src/lib/Menu.js",
526 "start": { 526 "start": {
527 "line": 175, 527 "line": 174,
528 "column": 16 528 "column": 16
529 }, 529 },
530 "end": { 530 "end": {
531 "line": 178, 531 "line": 177,
532 "column": 3 532 "column": 3
533 } 533 }
534 }, 534 },
@@ -537,11 +537,11 @@
537 "defaultMessage": "!!!Settings", 537 "defaultMessage": "!!!Settings",
538 "file": "src/lib/Menu.js", 538 "file": "src/lib/Menu.js",
539 "start": { 539 "start": {
540 "line": 179, 540 "line": 178,
541 "column": 12 541 "column": 12
542 }, 542 },
543 "end": { 543 "end": {
544 "line": 182, 544 "line": 181,
545 "column": 3 545 "column": 3
546 } 546 }
547 }, 547 },
@@ -550,11 +550,11 @@
550 "defaultMessage": "!!!Check for updates", 550 "defaultMessage": "!!!Check for updates",
551 "file": "src/lib/Menu.js", 551 "file": "src/lib/Menu.js",
552 "start": { 552 "start": {
553 "line": 183, 553 "line": 182,
554 "column": 19 554 "column": 19
555 }, 555 },
556 "end": { 556 "end": {
557 "line": 186, 557 "line": 185,
558 "column": 3 558 "column": 3
559 } 559 }
560 }, 560 },
@@ -563,11 +563,11 @@
563 "defaultMessage": "!!!Hide", 563 "defaultMessage": "!!!Hide",
564 "file": "src/lib/Menu.js", 564 "file": "src/lib/Menu.js",
565 "start": { 565 "start": {
566 "line": 187, 566 "line": 186,
567 "column": 8 567 "column": 8
568 }, 568 },
569 "end": { 569 "end": {
570 "line": 190, 570 "line": 189,
571 "column": 3 571 "column": 3
572 } 572 }
573 }, 573 },
@@ -576,11 +576,11 @@
576 "defaultMessage": "!!!Hide Others", 576 "defaultMessage": "!!!Hide Others",
577 "file": "src/lib/Menu.js", 577 "file": "src/lib/Menu.js",
578 "start": { 578 "start": {
579 "line": 191, 579 "line": 190,
580 "column": 14 580 "column": 14
581 }, 581 },
582 "end": { 582 "end": {
583 "line": 194, 583 "line": 193,
584 "column": 3 584 "column": 3
585 } 585 }
586 }, 586 },
@@ -589,11 +589,11 @@
589 "defaultMessage": "!!!Unhide", 589 "defaultMessage": "!!!Unhide",
590 "file": "src/lib/Menu.js", 590 "file": "src/lib/Menu.js",
591 "start": { 591 "start": {
592 "line": 195, 592 "line": 194,
593 "column": 10 593 "column": 10
594 }, 594 },
595 "end": { 595 "end": {
596 "line": 198, 596 "line": 197,
597 "column": 3 597 "column": 3
598 } 598 }
599 }, 599 },
@@ -602,11 +602,11 @@
602 "defaultMessage": "!!!Quit", 602 "defaultMessage": "!!!Quit",
603 "file": "src/lib/Menu.js", 603 "file": "src/lib/Menu.js",
604 "start": { 604 "start": {
605 "line": 199, 605 "line": 198,
606 "column": 8 606 "column": 8
607 }, 607 },
608 "end": { 608 "end": {
609 "line": 202, 609 "line": 201,
610 "column": 3 610 "column": 3
611 } 611 }
612 }, 612 },
@@ -615,11 +615,11 @@
615 "defaultMessage": "!!!Add New Service...", 615 "defaultMessage": "!!!Add New Service...",
616 "file": "src/lib/Menu.js", 616 "file": "src/lib/Menu.js",
617 "start": { 617 "start": {
618 "line": 203, 618 "line": 202,
619 "column": 17 619 "column": 17
620 }, 620 },
621 "end": { 621 "end": {
622 "line": 206, 622 "line": 205,
623 "column": 3 623 "column": 3
624 } 624 }
625 }, 625 },
@@ -628,11 +628,11 @@
628 "defaultMessage": "!!!Add New Workspace...", 628 "defaultMessage": "!!!Add New Workspace...",
629 "file": "src/lib/Menu.js", 629 "file": "src/lib/Menu.js",
630 "start": { 630 "start": {
631 "line": 207, 631 "line": 206,
632 "column": 19 632 "column": 19
633 }, 633 },
634 "end": { 634 "end": {
635 "line": 210, 635 "line": 209,
636 "column": 3 636 "column": 3
637 } 637 }
638 }, 638 },
@@ -641,11 +641,11 @@
641 "defaultMessage": "!!!Open workspace drawer", 641 "defaultMessage": "!!!Open workspace drawer",
642 "file": "src/lib/Menu.js", 642 "file": "src/lib/Menu.js",
643 "start": { 643 "start": {
644 "line": 211, 644 "line": 210,
645 "column": 23 645 "column": 23
646 }, 646 },
647 "end": { 647 "end": {
648 "line": 214, 648 "line": 213,
649 "column": 3 649 "column": 3
650 } 650 }
651 }, 651 },
@@ -654,11 +654,11 @@
654 "defaultMessage": "!!!Close workspace drawer", 654 "defaultMessage": "!!!Close workspace drawer",
655 "file": "src/lib/Menu.js", 655 "file": "src/lib/Menu.js",
656 "start": { 656 "start": {
657 "line": 215, 657 "line": 214,
658 "column": 24 658 "column": 24
659 }, 659 },
660 "end": { 660 "end": {
661 "line": 218, 661 "line": 217,
662 "column": 3 662 "column": 3
663 } 663 }
664 }, 664 },
@@ -667,11 +667,11 @@
667 "defaultMessage": "!!!Activate next service...", 667 "defaultMessage": "!!!Activate next service...",
668 "file": "src/lib/Menu.js", 668 "file": "src/lib/Menu.js",
669 "start": { 669 "start": {
670 "line": 219, 670 "line": 218,
671 "column": 23 671 "column": 23
672 }, 672 },
673 "end": { 673 "end": {
674 "line": 222, 674 "line": 221,
675 "column": 3 675 "column": 3
676 } 676 }
677 }, 677 },
@@ -680,11 +680,11 @@
680 "defaultMessage": "!!!Activate previous service...", 680 "defaultMessage": "!!!Activate previous service...",
681 "file": "src/lib/Menu.js", 681 "file": "src/lib/Menu.js",
682 "start": { 682 "start": {
683 "line": 223, 683 "line": 222,
684 "column": 27 684 "column": 27
685 }, 685 },
686 "end": { 686 "end": {
687 "line": 226, 687 "line": 225,
688 "column": 3 688 "column": 3
689 } 689 }
690 }, 690 },
@@ -693,11 +693,11 @@
693 "defaultMessage": "!!!Disable notifications & audio", 693 "defaultMessage": "!!!Disable notifications & audio",
694 "file": "src/lib/Menu.js", 694 "file": "src/lib/Menu.js",
695 "start": { 695 "start": {
696 "line": 227, 696 "line": 226,
697 "column": 11 697 "column": 11
698 }, 698 },
699 "end": { 699 "end": {
700 "line": 230, 700 "line": 229,
701 "column": 3 701 "column": 3
702 } 702 }
703 }, 703 },
@@ -706,11 +706,11 @@
706 "defaultMessage": "!!!Enable notifications & audio", 706 "defaultMessage": "!!!Enable notifications & audio",
707 "file": "src/lib/Menu.js", 707 "file": "src/lib/Menu.js",
708 "start": { 708 "start": {
709 "line": 231, 709 "line": 230,
710 "column": 13 710 "column": 13
711 }, 711 },
712 "end": { 712 "end": {
713 "line": 234, 713 "line": 233,
714 "column": 3 714 "column": 3
715 } 715 }
716 }, 716 },
@@ -719,11 +719,11 @@
719 "defaultMessage": "!!!Workspaces", 719 "defaultMessage": "!!!Workspaces",
720 "file": "src/lib/Menu.js", 720 "file": "src/lib/Menu.js",
721 "start": { 721 "start": {
722 "line": 235, 722 "line": 234,
723 "column": 14 723 "column": 14
724 }, 724 },
725 "end": { 725 "end": {
726 "line": 238, 726 "line": 237,
727 "column": 3 727 "column": 3
728 } 728 }
729 }, 729 },
@@ -732,11 +732,11 @@
732 "defaultMessage": "!!!Default", 732 "defaultMessage": "!!!Default",
733 "file": "src/lib/Menu.js", 733 "file": "src/lib/Menu.js",
734 "start": { 734 "start": {
735 "line": 239, 735 "line": 238,
736 "column": 20 736 "column": 20
737 }, 737 },
738 "end": { 738 "end": {
739 "line": 242, 739 "line": 241,
740 "column": 3 740 "column": 3
741 } 741 }
742 } 742 }
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index 22d788918..f1b8894c8 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -5,7 +5,6 @@ import { defineMessages } from 'react-intl';
5import { isMac, ctrlKey, cmdKey } from '../environment'; 5import { isMac, ctrlKey, cmdKey } from '../environment';
6import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../features/workspaces/index'; 6import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../features/workspaces/index';
7import { workspaceActions } from '../features/workspaces/actions'; 7import { workspaceActions } from '../features/workspaces/actions';
8import { gaEvent } from './analytics';
9import { announcementActions } from '../features/announcements/actions'; 8import { announcementActions } from '../features/announcements/actions';
10import { announcementsStore } from '../features/announcements'; 9import { announcementsStore } from '../features/announcements';
11 10
@@ -850,7 +849,6 @@ export default class FranzMenu {
850 accelerator: `${cmdKey}+D`, 849 accelerator: `${cmdKey}+D`,
851 click: () => { 850 click: () => {
852 workspaceActions.toggleWorkspaceDrawer(); 851 workspaceActions.toggleWorkspaceDrawer();
853 gaEvent(GA_CATEGORY_WORKSPACES, 'toggleDrawer', 'menu');
854 }, 852 },
855 enabled: this.stores.user.isLoggedIn, 853 enabled: this.stores.user.isLoggedIn,
856 }, { 854 }, {
@@ -865,7 +863,6 @@ export default class FranzMenu {
865 checked: !activeWorkspace, 863 checked: !activeWorkspace,
866 click: () => { 864 click: () => {
867 workspaceActions.deactivate(); 865 workspaceActions.deactivate();
868 gaEvent(GA_CATEGORY_WORKSPACES, 'switch', 'menu');
869 }, 866 },
870 }); 867 });
871 868
@@ -878,7 +875,6 @@ export default class FranzMenu {
878 checked: activeWorkspace ? workspace.id === activeWorkspace.id : false, 875 checked: activeWorkspace ? workspace.id === activeWorkspace.id : false,
879 click: () => { 876 click: () => {
880 workspaceActions.activate({ workspace }); 877 workspaceActions.activate({ workspace });
881 gaEvent(GA_CATEGORY_WORKSPACES, 'switch', 'menu');
882 }, 878 },
883 })); 879 }));
884 } 880 }
diff --git a/src/lib/analytics.js b/src/lib/analytics.js
deleted file mode 100644
index c305fdb00..000000000
--- a/src/lib/analytics.js
+++ /dev/null
@@ -1,55 +0,0 @@
1import { remote } from 'electron';
2import querystring from 'querystring';
3
4import { GA_ID, STATS_API } from '../config';
5import { isDevMode } from '../environment';
6
7const debug = require('debug')('Franz:Analytics');
8
9const { app } = remote;
10
11/* eslint-disable */
12(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
13(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
14m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
15})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
16/* eslint-enable */
17
18const GA_LOCAL_STORAGE_KEY = 'gaUid';
19
20ga('create', GA_ID, {
21 storage: 'none',
22 clientId: localStorage.getItem(GA_LOCAL_STORAGE_KEY),
23});
24
25ga((tracker) => {
26 localStorage.setItem(GA_LOCAL_STORAGE_KEY, tracker.get('clientId'));
27});
28ga('set', 'checkProtocolTask', null);
29ga('set', 'version', app.getVersion());
30ga('send', 'App');
31
32export function gaPage(page) {
33 ga('send', 'pageview', page);
34 debug('GA track page', page);
35}
36
37export function gaEvent(category, action, label) {
38 ga('send', 'event', category, action, label);
39 debug('GA track event', category, action, label);
40}
41
42export function statsEvent(key, value) {
43 const params = {
44 key,
45 value: value || key,
46 platform: process.platform,
47 version: remote.app.getVersion(),
48 };
49
50 debug('Send Franz stats event', params);
51
52 if (!isDevMode) {
53 window.fetch(`${STATS_API}/event/?${querystring.stringify(params)}`);
54 }
55}
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 2ac306a2a..be49d2453 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -17,7 +17,6 @@ import Request from './lib/Request';
17import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config'; 17import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config';
18import { isMac } from '../environment'; 18import { isMac } from '../environment';
19import locales from '../i18n/translations'; 19import locales from '../i18n/translations';
20import { gaEvent, gaPage, statsEvent } from '../lib/analytics';
21import { onVisibilityChange } from '../helpers/visibility-helper'; 20import { onVisibilityChange } from '../helpers/visibility-helper';
22import { getLocale } from '../helpers/i18n-helpers'; 21import { getLocale } from '../helpers/i18n-helpers';
23 22
@@ -172,13 +171,6 @@ export default class AppStore extends Store {
172 171
173 debug('Window is visible/focused', isVisible); 172 debug('Window is visible/focused', isVisible);
174 }); 173 });
175
176 // analytics autorun
177 reaction(() => this.stores.router.location.pathname, (pathname) => {
178 gaPage(pathname);
179 });
180
181 statsEvent('app-start');
182 } 174 }
183 175
184 @computed get cacheSize() { 176 @computed get cacheSize() {
@@ -266,8 +258,6 @@ export default class AppStore extends Store {
266 } catch (err) { 258 } catch (err) {
267 console.warn(err); 259 console.warn(err);
268 } 260 }
269
270 gaEvent('App', enable ? 'enable autostart' : 'disable autostart');
271 } 261 }
272 262
273 @action _openExternalUrl({ url }) { 263 @action _openExternalUrl({ url }) {
@@ -277,8 +267,6 @@ export default class AppStore extends Store {
277 if (isValidExternalURL(url)) { 267 if (isValidExternalURL(url)) {
278 shell.openExternal(url); 268 shell.openExternal(url);
279 } 269 }
280
281 gaEvent('External URL', 'open', parsedUrl.host);
282 } 270 }
283 271
284 @action _checkForUpdates() { 272 @action _checkForUpdates() {
diff --git a/src/stores/PaymentStore.js b/src/stores/PaymentStore.js
index d4de476c8..8579812ad 100644
--- a/src/stores/PaymentStore.js
+++ b/src/stores/PaymentStore.js
@@ -3,7 +3,6 @@ import { action, observable, computed } from 'mobx';
3import Store from './lib/Store'; 3import Store from './lib/Store';
4import CachedRequest from './lib/CachedRequest'; 4import CachedRequest from './lib/CachedRequest';
5import Request from './lib/Request'; 5import Request from './lib/Request';
6import { gaEvent } from '../lib/analytics';
7 6
8export default class PaymentStore extends Store { 7export default class PaymentStore extends Store {
9 @observable plansRequest = new CachedRequest(this.api.payment, 'plans'); 8 @observable plansRequest = new CachedRequest(this.api.payment, 'plans');
@@ -26,8 +25,6 @@ export default class PaymentStore extends Store {
26 @action _createHostedPage({ planId }) { 25 @action _createHostedPage({ planId }) {
27 const request = this.createHostedPageRequest.execute(planId); 26 const request = this.createHostedPageRequest.execute(planId);
28 27
29 gaEvent('Payment', 'createHostedPage', planId);
30
31 return request; 28 return request;
32 } 29 }
33} 30}
diff --git a/src/stores/RecipePreviewsStore.js b/src/stores/RecipePreviewsStore.js
index 382820d58..a93aedfff 100644
--- a/src/stores/RecipePreviewsStore.js
+++ b/src/stores/RecipePreviewsStore.js
@@ -5,7 +5,6 @@ import ms from 'ms';
5import Store from './lib/Store'; 5import Store from './lib/Store';
6import CachedRequest from './lib/CachedRequest'; 6import CachedRequest from './lib/CachedRequest';
7import Request from './lib/Request'; 7import Request from './lib/Request';
8import { gaEvent } from '../lib/analytics';
9 8
10export default class RecipePreviewsStore extends Store { 9export default class RecipePreviewsStore extends Store {
11 @observable allRecipePreviewsRequest = new CachedRequest(this.api.recipePreviews, 'all'); 10 @observable allRecipePreviewsRequest = new CachedRequest(this.api.recipePreviews, 'all');
@@ -41,13 +40,6 @@ export default class RecipePreviewsStore extends Store {
41 @action _search({ needle }) { 40 @action _search({ needle }) {
42 if (needle !== '') { 41 if (needle !== '') {
43 this.searchRecipePreviewsRequest.execute(needle); 42 this.searchRecipePreviewsRequest.execute(needle);
44
45 this._analyticsSearch(needle);
46 } 43 }
47 } 44 }
48
49 // Helper
50 _analyticsSearch = debounce((needle) => {
51 gaEvent('Recipe', 'search', needle);
52 }, ms('3s'));
53} 45}
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 109ac5cd7..4d98df851 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -11,7 +11,6 @@ import Store from './lib/Store';
11import Request from './lib/Request'; 11import Request from './lib/Request';
12import CachedRequest from './lib/CachedRequest'; 12import CachedRequest from './lib/CachedRequest';
13import { matchRoute } from '../helpers/routing-helpers'; 13import { matchRoute } from '../helpers/routing-helpers';
14import { gaEvent, statsEvent } from '../lib/analytics';
15import { workspaceStore } from '../features/workspaces'; 14import { workspaceStore } from '../features/workspaces';
16 15
17const debug = require('debug')('Franz:ServiceStore'); 16const debug = require('debug')('Franz:ServiceStore');
@@ -173,7 +172,6 @@ export default class ServicesStore extends Store {
173 172
174 if (redirect) { 173 if (redirect) {
175 this.stores.router.push('/settings/recipes'); 174 this.stores.router.push('/settings/recipes');
176 gaEvent('Service', 'create', recipeId);
177 } 175 }
178 } 176 }
179 177
@@ -250,7 +248,6 @@ export default class ServicesStore extends Store {
250 248
251 if (redirect) { 249 if (redirect) {
252 this.stores.router.push('/settings/services'); 250 this.stores.router.push('/settings/services');
253 gaEvent('Service', 'update', service.recipe.id);
254 } 251 }
255 } 252 }
256 253
@@ -269,15 +266,12 @@ export default class ServicesStore extends Store {
269 266
270 await request._promise; 267 await request._promise;
271 this.actionStatus = request.result.status; 268 this.actionStatus = request.result.status;
272
273 gaEvent('Service', 'delete', service.recipe.id);
274 } 269 }
275 270
276 @action async _clearCache({ serviceId }) { 271 @action async _clearCache({ serviceId }) {
277 this.clearCacheRequest.reset(); 272 this.clearCacheRequest.reset();
278 const request = this.clearCacheRequest.execute(serviceId); 273 const request = this.clearCacheRequest.execute(serviceId);
279 await request._promise; 274 await request._promise;
280 gaEvent('Service', 'clear cache');
281 } 275 }
282 276
283 @action _setActive({ serviceId, keepActiveRoute }) { 277 @action _setActive({ serviceId, keepActiveRoute }) {
@@ -289,8 +283,6 @@ export default class ServicesStore extends Store {
289 }); 283 });
290 service.isActive = true; 284 service.isActive = true;
291 285
292 statsEvent('activate-service', service.recipe.id);
293
294 this._focusActiveService(); 286 this._focusActiveService();
295 } 287 }
296 288
@@ -536,8 +528,6 @@ export default class ServicesStore extends Store {
536 service.order = services[s.id]; 528 service.order = services[s.id];
537 }); 529 });
538 }); 530 });
539
540 this._reorderAnalytics();
541 } 531 }
542 532
543 @action _toggleNotifications({ serviceId }) { 533 @action _toggleNotifications({ serviceId }) {
@@ -710,10 +700,6 @@ export default class ServicesStore extends Store {
710 } 700 }
711 } 701 }
712 702
713 _reorderAnalytics = debounce(() => {
714 gaEvent('Service', 'order');
715 }, ms('5s'));
716
717 _wrapIndex(index, delta, size) { 703 _wrapIndex(index, delta, size) {
718 return (((index + delta) % size) + size) % size; 704 return (((index + delta) % size) + size) % size;
719 } 705 }
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index b5423af3b..9e7951637 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -7,7 +7,6 @@ import { isDevMode } from '../environment';
7import Store from './lib/Store'; 7import Store from './lib/Store';
8import Request from './lib/Request'; 8import Request from './lib/Request';
9import CachedRequest from './lib/CachedRequest'; 9import CachedRequest from './lib/CachedRequest';
10import { gaEvent } from '../lib/analytics';
11 10
12const debug = require('debug')('Franz:UserStore'); 11const debug = require('debug')('Franz:UserStore');
13 12
@@ -156,16 +155,12 @@ export default class UserStore extends Store {
156 this._setUserData(authToken); 155 this._setUserData(authToken);
157 156
158 this.stores.router.push('/'); 157 this.stores.router.push('/');
159
160 gaEvent('User', 'login');
161 } 158 }
162 159
163 @action _tokenLogin(authToken) { 160 @action _tokenLogin(authToken) {
164 this._setUserData(authToken); 161 this._setUserData(authToken);
165 162
166 this.stores.router.push('/'); 163 this.stores.router.push('/');
167
168 gaEvent('User', 'tokenLogin');
169 } 164 }
170 165
171 @action async _signup({ 166 @action async _signup({
@@ -186,8 +181,6 @@ export default class UserStore extends Store {
186 this._setUserData(authToken); 181 this._setUserData(authToken);
187 182
188 this.stores.router.push(this.PRICING_ROUTE); 183 this.stores.router.push(this.PRICING_ROUTE);
189
190 gaEvent('User', 'signup');
191 } 184 }
192 185
193 @action async _retrievePassword({ email }) { 186 @action async _retrievePassword({ email }) {
@@ -195,8 +188,6 @@ export default class UserStore extends Store {
195 188
196 await request._promise; 189 await request._promise;
197 this.actionStatus = request.result.status || []; 190 this.actionStatus = request.result.status || [];
198
199 gaEvent('User', 'retrievePassword');
200 } 191 }
201 192
202 @action async _invite({ invites }) { 193 @action async _invite({ invites }) {
@@ -210,8 +201,6 @@ export default class UserStore extends Store {
210 if (this.stores.router.location.pathname.includes(this.INVITE_ROUTE)) { 201 if (this.stores.router.location.pathname.includes(this.INVITE_ROUTE)) {
211 this.stores.router.push('/'); 202 this.stores.router.push('/');
212 } 203 }
213
214 gaEvent('User', 'inviteUsers');
215 } 204 }
216 205
217 @action async _update({ userData }) { 206 @action async _update({ userData }) {
@@ -221,8 +210,6 @@ export default class UserStore extends Store {
221 210
222 this.getUserInfoRequest.patch(() => response.data); 211 this.getUserInfoRequest.patch(() => response.data);
223 this.actionStatus = response.status || []; 212 this.actionStatus = response.status || [];
224
225 gaEvent('User', 'update');
226 } 213 }
227 214
228 @action _resetStatus() { 215 @action _resetStatus() {