aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/layout/AppLayout.js2
-rw-r--r--src/config.js2
-rw-r--r--src/features/publishDebugInfo/Component.js194
-rw-r--r--src/features/publishDebugInfo/index.js24
-rw-r--r--src/i18n/locales/defaultMessages.json262
-rw-r--r--src/i18n/locales/en-US.json8
-rw-r--r--src/i18n/messages/src/components/layout/AppLayout.json16
-rw-r--r--src/i18n/messages/src/features/debugger/Component.json15
-rw-r--r--src/i18n/messages/src/features/publishDebugInfo/Component.json80
-rw-r--r--src/i18n/messages/src/lib/Menu.json145
-rw-r--r--src/lib/Menu.js15
-rw-r--r--src/stores/FeaturesStore.js2
12 files changed, 614 insertions, 151 deletions
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index 80e6daf19..fe43c42d2 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -9,6 +9,7 @@ import InfoBar from '../ui/InfoBar';
9import { Component as BasicAuth } from '../../features/basicAuth'; 9import { Component as BasicAuth } from '../../features/basicAuth';
10import { Component as ShareFranz } from '../../features/shareFranz'; 10import { Component as ShareFranz } from '../../features/shareFranz';
11import { Component as QuickSwitch } from '../../features/quickSwitch'; 11import { Component as QuickSwitch } from '../../features/quickSwitch';
12import { Component as PublishDebugInfo } from '../../features/publishDebugInfo';
12import ErrorBoundary from '../util/ErrorBoundary'; 13import ErrorBoundary from '../util/ErrorBoundary';
13 14
14// import globalMessages from '../../i18n/globalMessages'; 15// import globalMessages from '../../i18n/globalMessages';
@@ -189,6 +190,7 @@ class AppLayout extends Component {
189 <BasicAuth /> 190 <BasicAuth />
190 <ShareFranz /> 191 <ShareFranz />
191 <QuickSwitch /> 192 <QuickSwitch />
193 <PublishDebugInfo />
192 {services} 194 {services}
193 {children} 195 {children}
194 <TrialStatusBar /> 196 <TrialStatusBar />
diff --git a/src/config.js b/src/config.js
index b4705105d..b5314ab8e 100644
--- a/src/config.js
+++ b/src/config.js
@@ -14,6 +14,8 @@ export const LOCAL_API = 'http://localhost:3000';
14export const DEV_API = 'https://dev.franzinfra.com'; 14export const DEV_API = 'https://dev.franzinfra.com';
15export const LIVE_API = 'https://api.getferdi.com'; 15export const LIVE_API = 'https://api.getferdi.com';
16 16
17export const DEBUG_API = 'http://localhost:3333';
18
17export const LOCAL_WS_API = 'ws://localhost:3000'; 19export const LOCAL_WS_API = 'ws://localhost:3000';
18export const DEV_WS_API = 'wss://dev.franzinfra.com'; 20export const DEV_WS_API = 'wss://dev.franzinfra.com';
19export const LIVE_WS_API = 'wss://api.franzinfra.com'; 21export const LIVE_WS_API = 'wss://api.franzinfra.com';
diff --git a/src/features/publishDebugInfo/Component.js b/src/features/publishDebugInfo/Component.js
new file mode 100644
index 000000000..fbaa88a43
--- /dev/null
+++ b/src/features/publishDebugInfo/Component.js
@@ -0,0 +1,194 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer, inject } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl';
5import { H1 } from '@meetfranz/ui';
6import injectSheet from 'react-jss';
7
8import Input from '../../components/ui/Input';
9import Button from '../../components/ui/Button';
10import Modal from '../../components/ui/Modal';
11import { state as ModalState } from '.';
12import AppStore from '../../stores/AppStore';
13import { DEBUG_API } from '../../config';
14import { sendAuthRequest } from '../../api/utils/auth';
15
16const messages = defineMessages({
17 title: {
18 id: 'feature.publishDebugInfo.title',
19 defaultMessage: '!!!Publish debug information',
20 },
21 info: {
22 id: 'feature.publishDebugInfo.info',
23 defaultMessage: '!!!Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger\'s privacy policy and terms of service',
24 },
25 privacy: {
26 id: 'feature.publishDebugInfo.privacy',
27 defaultMessage: '!!!Privacy policy',
28 },
29 terms: {
30 id: 'feature.publishDebugInfo.terms',
31 defaultMessage: '!!!Terms of service',
32 },
33 publish: {
34 id: 'feature.publishDebugInfo.publish',
35 defaultMessage: '!!!Accept and publish',
36 },
37 published: {
38 id: 'feature.publishDebugInfo.published',
39 defaultMessage: '!!!Your debug log was published and is now availible at',
40 },
41});
42
43const styles = theme => ({
44 container: {
45 minWidth: '70vw',
46 },
47 info: {
48 paddingTop: 20,
49 paddingBottom: 20,
50 },
51 link: {
52 color: `${theme.styleTypes.primary.accent} !important`,
53 padding: 10,
54 cursor: 'pointer',
55 },
56 button: {
57 width: '100%',
58 marginTop: 10,
59 cursor: 'pointer',
60 },
61 url: {
62 marginTop: 20,
63 width: '100%',
64
65 '& div': {
66 fontFamily: 'SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace',
67 },
68
69 '& input': {
70 width: '100%',
71 padding: 15,
72 borderRadius: 6,
73 border: `solid 1px ${theme.styleTypes.primary.accent}`,
74 },
75 },
76});
77
78export default @injectSheet(styles) @inject('stores') @observer class PublishDebugLogModal extends Component {
79 static propTypes = {
80 classes: PropTypes.object.isRequired,
81 };
82
83 static contextTypes = {
84 intl: intlShape,
85 };
86
87 state = {
88 log: null,
89 isSendingLog: false,
90 }
91
92 // Close this modal
93 close() {
94 ModalState.isModalVisible = false;
95 }
96
97 async publishDebugInfo() {
98 this.setState({
99 isSendingLog: true,
100 });
101
102 const debugInfo = JSON.stringify(this.props.stores.app.debugInfo);
103
104 const request = await sendAuthRequest(`${DEBUG_API}/create`, {
105 method: 'POST',
106 body: JSON.stringify({
107 log: debugInfo,
108 }),
109 }, false);
110 const response = await request.json();
111
112 if (response.id) {
113 this.setState({
114 log: response.id,
115 });
116 } else {
117 // TODO: Show error message
118 this.close();
119 }
120 }
121
122 render() {
123 const { isModalVisible } = ModalState;
124
125 const {
126 classes,
127 } = this.props;
128
129 const {
130 log,
131 } = this.state;
132
133 const { intl } = this.context;
134
135 return (
136 <Modal
137 isOpen={isModalVisible}
138 shouldCloseOnOverlayClick
139 close={this.close.bind(this)}
140 >
141 <div className={classes.container}>
142 <H1>
143 {intl.formatMessage(messages.title)}
144 </H1>
145 { log ? (
146 <>
147 <p className={classes.info}>{intl.formatMessage(messages.published)}</p>
148 <Input
149 className={classes.url}
150 showLabel={false}
151 field={{
152 type: 'url',
153 value: `${DEBUG_API}/${log}`,
154 disabled: true,
155 }}
156 readonly
157 />
158 </>
159 ) : (
160 <>
161 <p className={classes.info}>{intl.formatMessage(messages.info)}</p>
162
163 <a href={`${DEBUG_API}/privacy.html`} target="_blank" className={classes.link}>
164 {intl.formatMessage(messages.privacy)}
165 </a>
166 <a href={`${DEBUG_API}/terms.html`} target="_blank" className={classes.link}>
167 {intl.formatMessage(messages.terms)}
168 </a>
169
170 <Button
171 type="button"
172 label={intl.formatMessage(messages.publish)}
173 className={classes.button}
174 onClick={this.publishDebugInfo.bind(this)}
175 disabled={this.state.isSendingLog}
176 />
177 </>
178 ) }
179 </div>
180 </Modal>
181 );
182 }
183}
184
185PublishDebugLogModal.wrappedComponent.propTypes = {
186 stores: PropTypes.shape({
187 app: PropTypes.instanceOf(AppStore).isRequired,
188 }).isRequired,
189 actions: PropTypes.shape({
190 service: PropTypes.shape({
191 setActive: PropTypes.func.isRequired,
192 }).isRequired,
193 }).isRequired,
194};
diff --git a/src/features/publishDebugInfo/index.js b/src/features/publishDebugInfo/index.js
new file mode 100644
index 000000000..7d0d310c2
--- /dev/null
+++ b/src/features/publishDebugInfo/index.js
@@ -0,0 +1,24 @@
1import { observable } from 'mobx';
2
3export { default as Component } from './Component';
4
5const debug = require('debug')('Ferdi:feature:publishDebugInfo');
6
7const defaultState = {
8 isModalVisible: false,
9};
10
11export const state = observable(defaultState);
12
13export default function initialize() {
14 debug('Initialize publishDebugInfo feature');
15
16 function showModal() {
17 state.isModalVisible = true;
18 }
19
20 window.ferdi.features.publishDebugInfo = {
21 state,
22 showModal,
23 };
24}
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 59930a054..8d5a6b9c4 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -934,52 +934,52 @@
934 "defaultMessage": "!!!Your services have been updated.", 934 "defaultMessage": "!!!Your services have been updated.",
935 "end": { 935 "end": {
936 "column": 3, 936 "column": 3,
937 "line": 33 937 "line": 34
938 }, 938 },
939 "file": "src/components/layout/AppLayout.js", 939 "file": "src/components/layout/AppLayout.js",
940 "id": "infobar.servicesUpdated", 940 "id": "infobar.servicesUpdated",
941 "start": { 941 "start": {
942 "column": 19, 942 "column": 19,
943 "line": 30 943 "line": 31
944 } 944 }
945 }, 945 },
946 { 946 {
947 "defaultMessage": "!!!Reload services", 947 "defaultMessage": "!!!Reload services",
948 "end": { 948 "end": {
949 "column": 3, 949 "column": 3,
950 "line": 37 950 "line": 38
951 }, 951 },
952 "file": "src/components/layout/AppLayout.js", 952 "file": "src/components/layout/AppLayout.js",
953 "id": "infobar.buttonReloadServices", 953 "id": "infobar.buttonReloadServices",
954 "start": { 954 "start": {
955 "column": 24, 955 "column": 24,
956 "line": 34 956 "line": 35
957 } 957 }
958 }, 958 },
959 { 959 {
960 "defaultMessage": "!!!Could not load services and user information", 960 "defaultMessage": "!!!Could not load services and user information",
961 "end": { 961 "end": {
962 "column": 3, 962 "column": 3,
963 "line": 41 963 "line": 42
964 }, 964 },
965 "file": "src/components/layout/AppLayout.js", 965 "file": "src/components/layout/AppLayout.js",
966 "id": "infobar.requiredRequestsFailed", 966 "id": "infobar.requiredRequestsFailed",
967 "start": { 967 "start": {
968 "column": 26, 968 "column": 26,
969 "line": 38 969 "line": 39
970 } 970 }
971 }, 971 },
972 { 972 {
973 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 973 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
974 "end": { 974 "end": {
975 "column": 3, 975 "column": 3,
976 "line": 45 976 "line": 46
977 }, 977 },
978 "file": "src/components/layout/AppLayout.js", 978 "file": "src/components/layout/AppLayout.js",
979 "id": "infobar.authRequestFailed", 979 "id": "infobar.authRequestFailed",
980 "start": { 980 "start": {
981 "column": 21, 981 "column": 21,
982 "line": 42 982 "line": 43
983 } 983 }
984 } 984 }
985 ], 985 ],
@@ -4645,6 +4645,24 @@
4645 { 4645 {
4646 "descriptors": [ 4646 "descriptors": [
4647 { 4647 {
4648 "defaultMessage": "!!!Publish debugging information",
4649 "end": {
4650 "column": 3,
4651 "line": 19
4652 },
4653 "file": "src/features/debugger/Component.js",
4654 "id": "feature.debugger.title",
4655 "start": {
4656 "column": 9,
4657 "line": 16
4658 }
4659 }
4660 ],
4661 "path": "src/features/debugger/Component.json"
4662 },
4663 {
4664 "descriptors": [
4665 {
4648 "defaultMessage": "!!!Please purchase license to skip waiting", 4666 "defaultMessage": "!!!Please purchase license to skip waiting",
4649 "end": { 4667 "end": {
4650 "column": 3, 4668 "column": 3,
@@ -5008,6 +5026,89 @@
5008 { 5026 {
5009 "descriptors": [ 5027 "descriptors": [
5010 { 5028 {
5029 "defaultMessage": "!!!Publish debug information",
5030 "end": {
5031 "column": 3,
5032 "line": 20
5033 },
5034 "file": "src/features/publishDebugInfo/Component.js",
5035 "id": "feature.publishDebugInfo.title",
5036 "start": {
5037 "column": 9,
5038 "line": 17
5039 }
5040 },
5041 {
5042 "defaultMessage": "!!!Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service",
5043 "end": {
5044 "column": 3,
5045 "line": 24
5046 },
5047 "file": "src/features/publishDebugInfo/Component.js",
5048 "id": "feature.publishDebugInfo.info",
5049 "start": {
5050 "column": 8,
5051 "line": 21
5052 }
5053 },
5054 {
5055 "defaultMessage": "!!!Privacy policy",
5056 "end": {
5057 "column": 3,
5058 "line": 28
5059 },
5060 "file": "src/features/publishDebugInfo/Component.js",
5061 "id": "feature.publishDebugInfo.privacy",
5062 "start": {
5063 "column": 11,
5064 "line": 25
5065 }
5066 },
5067 {
5068 "defaultMessage": "!!!Terms of service",
5069 "end": {
5070 "column": 3,
5071 "line": 32
5072 },
5073 "file": "src/features/publishDebugInfo/Component.js",
5074 "id": "feature.publishDebugInfo.terms",
5075 "start": {
5076 "column": 9,
5077 "line": 29
5078 }
5079 },
5080 {
5081 "defaultMessage": "!!!Accept and publish",
5082 "end": {
5083 "column": 3,
5084 "line": 36
5085 },
5086 "file": "src/features/publishDebugInfo/Component.js",
5087 "id": "feature.publishDebugInfo.publish",
5088 "start": {
5089 "column": 11,
5090 "line": 33
5091 }
5092 },
5093 {
5094 "defaultMessage": "!!!Your debug log was published and is now availible at",
5095 "end": {
5096 "column": 3,
5097 "line": 40
5098 },
5099 "file": "src/features/publishDebugInfo/Component.js",
5100 "id": "feature.publishDebugInfo.published",
5101 "start": {
5102 "column": 13,
5103 "line": 37
5104 }
5105 }
5106 ],
5107 "path": "src/features/publishDebugInfo/Component.json"
5108 },
5109 {
5110 "descriptors": [
5111 {
5011 "defaultMessage": "!!!QuickSwitch", 5112 "defaultMessage": "!!!QuickSwitch",
5012 "end": { 5113 "end": {
5013 "column": 3, 5114 "column": 3,
@@ -6593,432 +6694,445 @@
6593 } 6694 }
6594 }, 6695 },
6595 { 6696 {
6596 "defaultMessage": "!!!Ferdi Debug Information", 6697 "defaultMessage": "!!!Publish Debug Information",
6597 "end": { 6698 "end": {
6598 "column": 3, 6699 "column": 3,
6599 "line": 160 6700 "line": 160
6600 }, 6701 },
6601 "file": "src/lib/Menu.js", 6702 "file": "src/lib/Menu.js",
6703 "id": "menu.help.publishDebugInfo",
6704 "start": {
6705 "column": 20,
6706 "line": 157
6707 }
6708 },
6709 {
6710 "defaultMessage": "!!!Ferdi Debug Information",
6711 "end": {
6712 "column": 3,
6713 "line": 164
6714 },
6715 "file": "src/lib/Menu.js",
6602 "id": "menu.help.debugInfoCopiedHeadline", 6716 "id": "menu.help.debugInfoCopiedHeadline",
6603 "start": { 6717 "start": {
6604 "column": 27, 6718 "column": 27,
6605 "line": 157 6719 "line": 161
6606 } 6720 }
6607 }, 6721 },
6608 { 6722 {
6609 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", 6723 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
6610 "end": { 6724 "end": {
6611 "column": 3, 6725 "column": 3,
6612 "line": 164 6726 "line": 168
6613 }, 6727 },
6614 "file": "src/lib/Menu.js", 6728 "file": "src/lib/Menu.js",
6615 "id": "menu.help.debugInfoCopiedBody", 6729 "id": "menu.help.debugInfoCopiedBody",
6616 "start": { 6730 "start": {
6617 "column": 23, 6731 "column": 23,
6618 "line": 161 6732 "line": 165
6619 } 6733 }
6620 }, 6734 },
6621 { 6735 {
6622 "defaultMessage": "!!!Terms of Service", 6736 "defaultMessage": "!!!Terms of Service",
6623 "end": { 6737 "end": {
6624 "column": 3, 6738 "column": 3,
6625 "line": 168 6739 "line": 172
6626 }, 6740 },
6627 "file": "src/lib/Menu.js", 6741 "file": "src/lib/Menu.js",
6628 "id": "menu.help.tos", 6742 "id": "menu.help.tos",
6629 "start": { 6743 "start": {
6630 "column": 7, 6744 "column": 7,
6631 "line": 165 6745 "line": 169
6632 } 6746 }
6633 }, 6747 },
6634 { 6748 {
6635 "defaultMessage": "!!!Privacy Statement", 6749 "defaultMessage": "!!!Privacy Statement",
6636 "end": { 6750 "end": {
6637 "column": 3, 6751 "column": 3,
6638 "line": 172 6752 "line": 176
6639 }, 6753 },
6640 "file": "src/lib/Menu.js", 6754 "file": "src/lib/Menu.js",
6641 "id": "menu.help.privacy", 6755 "id": "menu.help.privacy",
6642 "start": { 6756 "start": {
6643 "column": 11, 6757 "column": 11,
6644 "line": 169 6758 "line": 173
6645 } 6759 }
6646 }, 6760 },
6647 { 6761 {
6648 "defaultMessage": "!!!File", 6762 "defaultMessage": "!!!File",
6649 "end": { 6763 "end": {
6650 "column": 3, 6764 "column": 3,
6651 "line": 176 6765 "line": 180
6652 }, 6766 },
6653 "file": "src/lib/Menu.js", 6767 "file": "src/lib/Menu.js",
6654 "id": "menu.file", 6768 "id": "menu.file",
6655 "start": { 6769 "start": {
6656 "column": 8, 6770 "column": 8,
6657 "line": 173 6771 "line": 177
6658 } 6772 }
6659 }, 6773 },
6660 { 6774 {
6661 "defaultMessage": "!!!View", 6775 "defaultMessage": "!!!View",
6662 "end": { 6776 "end": {
6663 "column": 3, 6777 "column": 3,
6664 "line": 180 6778 "line": 184
6665 }, 6779 },
6666 "file": "src/lib/Menu.js", 6780 "file": "src/lib/Menu.js",
6667 "id": "menu.view", 6781 "id": "menu.view",
6668 "start": { 6782 "start": {
6669 "column": 8, 6783 "column": 8,
6670 "line": 177 6784 "line": 181
6671 } 6785 }
6672 }, 6786 },
6673 { 6787 {
6674 "defaultMessage": "!!!Services", 6788 "defaultMessage": "!!!Services",
6675 "end": { 6789 "end": {
6676 "column": 3, 6790 "column": 3,
6677 "line": 184 6791 "line": 188
6678 }, 6792 },
6679 "file": "src/lib/Menu.js", 6793 "file": "src/lib/Menu.js",
6680 "id": "menu.services", 6794 "id": "menu.services",
6681 "start": { 6795 "start": {
6682 "column": 12, 6796 "column": 12,
6683 "line": 181 6797 "line": 185
6684 } 6798 }
6685 }, 6799 },
6686 { 6800 {
6687 "defaultMessage": "!!!Window", 6801 "defaultMessage": "!!!Window",
6688 "end": { 6802 "end": {
6689 "column": 3, 6803 "column": 3,
6690 "line": 188 6804 "line": 192
6691 }, 6805 },
6692 "file": "src/lib/Menu.js", 6806 "file": "src/lib/Menu.js",
6693 "id": "menu.window", 6807 "id": "menu.window",
6694 "start": { 6808 "start": {
6695 "column": 10, 6809 "column": 10,
6696 "line": 185 6810 "line": 189
6697 } 6811 }
6698 }, 6812 },
6699 { 6813 {
6700 "defaultMessage": "!!!Help", 6814 "defaultMessage": "!!!Help",
6701 "end": { 6815 "end": {
6702 "column": 3, 6816 "column": 3,
6703 "line": 192 6817 "line": 196
6704 }, 6818 },
6705 "file": "src/lib/Menu.js", 6819 "file": "src/lib/Menu.js",
6706 "id": "menu.help", 6820 "id": "menu.help",
6707 "start": { 6821 "start": {
6708 "column": 8, 6822 "column": 8,
6709 "line": 189 6823 "line": 193
6710 } 6824 }
6711 }, 6825 },
6712 { 6826 {
6713 "defaultMessage": "!!!About Ferdi", 6827 "defaultMessage": "!!!About Ferdi",
6714 "end": { 6828 "end": {
6715 "column": 3, 6829 "column": 3,
6716 "line": 196 6830 "line": 200
6717 }, 6831 },
6718 "file": "src/lib/Menu.js", 6832 "file": "src/lib/Menu.js",
6719 "id": "menu.app.about", 6833 "id": "menu.app.about",
6720 "start": { 6834 "start": {
6721 "column": 9, 6835 "column": 9,
6722 "line": 193 6836 "line": 197
6723 } 6837 }
6724 }, 6838 },
6725 { 6839 {
6726 "defaultMessage": "!!!What's new?", 6840 "defaultMessage": "!!!What's new?",
6727 "end": { 6841 "end": {
6728 "column": 3, 6842 "column": 3,
6729 "line": 200 6843 "line": 204
6730 }, 6844 },
6731 "file": "src/lib/Menu.js", 6845 "file": "src/lib/Menu.js",
6732 "id": "menu.app.announcement", 6846 "id": "menu.app.announcement",
6733 "start": { 6847 "start": {
6734 "column": 16, 6848 "column": 16,
6735 "line": 197 6849 "line": 201
6736 } 6850 }
6737 }, 6851 },
6738 { 6852 {
6739 "defaultMessage": "!!!Settings", 6853 "defaultMessage": "!!!Settings",
6740 "end": { 6854 "end": {
6741 "column": 3, 6855 "column": 3,
6742 "line": 204 6856 "line": 208
6743 }, 6857 },
6744 "file": "src/lib/Menu.js", 6858 "file": "src/lib/Menu.js",
6745 "id": "menu.app.settings", 6859 "id": "menu.app.settings",
6746 "start": { 6860 "start": {
6747 "column": 12, 6861 "column": 12,
6748 "line": 201 6862 "line": 205
6749 } 6863 }
6750 }, 6864 },
6751 { 6865 {
6752 "defaultMessage": "!!!Check for updates", 6866 "defaultMessage": "!!!Check for updates",
6753 "end": { 6867 "end": {
6754 "column": 3, 6868 "column": 3,
6755 "line": 208 6869 "line": 212
6756 }, 6870 },
6757 "file": "src/lib/Menu.js", 6871 "file": "src/lib/Menu.js",
6758 "id": "menu.app.checkForUpdates", 6872 "id": "menu.app.checkForUpdates",
6759 "start": { 6873 "start": {
6760 "column": 19, 6874 "column": 19,
6761 "line": 205 6875 "line": 209
6762 } 6876 }
6763 }, 6877 },
6764 { 6878 {
6765 "defaultMessage": "!!!Hide", 6879 "defaultMessage": "!!!Hide",
6766 "end": { 6880 "end": {
6767 "column": 3, 6881 "column": 3,
6768 "line": 212 6882 "line": 216
6769 }, 6883 },
6770 "file": "src/lib/Menu.js", 6884 "file": "src/lib/Menu.js",
6771 "id": "menu.app.hide", 6885 "id": "menu.app.hide",
6772 "start": { 6886 "start": {
6773 "column": 8, 6887 "column": 8,
6774 "line": 209 6888 "line": 213
6775 } 6889 }
6776 }, 6890 },
6777 { 6891 {
6778 "defaultMessage": "!!!Hide Others", 6892 "defaultMessage": "!!!Hide Others",
6779 "end": { 6893 "end": {
6780 "column": 3, 6894 "column": 3,
6781 "line": 216 6895 "line": 220
6782 }, 6896 },
6783 "file": "src/lib/Menu.js", 6897 "file": "src/lib/Menu.js",
6784 "id": "menu.app.hideOthers", 6898 "id": "menu.app.hideOthers",
6785 "start": { 6899 "start": {
6786 "column": 14, 6900 "column": 14,
6787 "line": 213 6901 "line": 217
6788 } 6902 }
6789 }, 6903 },
6790 { 6904 {
6791 "defaultMessage": "!!!Unhide", 6905 "defaultMessage": "!!!Unhide",
6792 "end": { 6906 "end": {
6793 "column": 3, 6907 "column": 3,
6794 "line": 220 6908 "line": 224
6795 }, 6909 },
6796 "file": "src/lib/Menu.js", 6910 "file": "src/lib/Menu.js",
6797 "id": "menu.app.unhide", 6911 "id": "menu.app.unhide",
6798 "start": { 6912 "start": {
6799 "column": 10, 6913 "column": 10,
6800 "line": 217 6914 "line": 221
6801 } 6915 }
6802 }, 6916 },
6803 { 6917 {
6804 "defaultMessage": "!!!Auto-hide menu bar", 6918 "defaultMessage": "!!!Auto-hide menu bar",
6805 "end": { 6919 "end": {
6806 "column": 3, 6920 "column": 3,
6807 "line": 224 6921 "line": 228
6808 }, 6922 },
6809 "file": "src/lib/Menu.js", 6923 "file": "src/lib/Menu.js",
6810 "id": "menu.app.autohideMenuBar", 6924 "id": "menu.app.autohideMenuBar",
6811 "start": { 6925 "start": {
6812 "column": 19, 6926 "column": 19,
6813 "line": 221 6927 "line": 225
6814 } 6928 }
6815 }, 6929 },
6816 { 6930 {
6817 "defaultMessage": "!!!Quit", 6931 "defaultMessage": "!!!Quit",
6818 "end": { 6932 "end": {
6819 "column": 3, 6933 "column": 3,
6820 "line": 228 6934 "line": 232
6821 }, 6935 },
6822 "file": "src/lib/Menu.js", 6936 "file": "src/lib/Menu.js",
6823 "id": "menu.app.quit", 6937 "id": "menu.app.quit",
6824 "start": { 6938 "start": {
6825 "column": 8, 6939 "column": 8,
6826 "line": 225 6940 "line": 229
6827 } 6941 }
6828 }, 6942 },
6829 { 6943 {
6830 "defaultMessage": "!!!Add New Service...", 6944 "defaultMessage": "!!!Add New Service...",
6831 "end": { 6945 "end": {
6832 "column": 3, 6946 "column": 3,
6833 "line": 232 6947 "line": 236
6834 }, 6948 },
6835 "file": "src/lib/Menu.js", 6949 "file": "src/lib/Menu.js",
6836 "id": "menu.services.addNewService", 6950 "id": "menu.services.addNewService",
6837 "start": { 6951 "start": {
6838 "column": 17, 6952 "column": 17,
6839 "line": 229 6953 "line": 233
6840 } 6954 }
6841 }, 6955 },
6842 { 6956 {
6843 "defaultMessage": "!!!Add New Workspace...", 6957 "defaultMessage": "!!!Add New Workspace...",
6844 "end": { 6958 "end": {
6845 "column": 3, 6959 "column": 3,
6846 "line": 236 6960 "line": 240
6847 }, 6961 },
6848 "file": "src/lib/Menu.js", 6962 "file": "src/lib/Menu.js",
6849 "id": "menu.workspaces.addNewWorkspace", 6963 "id": "menu.workspaces.addNewWorkspace",
6850 "start": { 6964 "start": {
6851 "column": 19, 6965 "column": 19,
6852 "line": 233 6966 "line": 237
6853 } 6967 }
6854 }, 6968 },
6855 { 6969 {
6856 "defaultMessage": "!!!Open workspace drawer", 6970 "defaultMessage": "!!!Open workspace drawer",
6857 "end": { 6971 "end": {
6858 "column": 3, 6972 "column": 3,
6859 "line": 240 6973 "line": 244
6860 }, 6974 },
6861 "file": "src/lib/Menu.js", 6975 "file": "src/lib/Menu.js",
6862 "id": "menu.workspaces.openWorkspaceDrawer", 6976 "id": "menu.workspaces.openWorkspaceDrawer",
6863 "start": { 6977 "start": {
6864 "column": 23, 6978 "column": 23,
6865 "line": 237 6979 "line": 241
6866 } 6980 }
6867 }, 6981 },
6868 { 6982 {
6869 "defaultMessage": "!!!Close workspace drawer", 6983 "defaultMessage": "!!!Close workspace drawer",
6870 "end": { 6984 "end": {
6871 "column": 3, 6985 "column": 3,
6872 "line": 244 6986 "line": 248
6873 }, 6987 },
6874 "file": "src/lib/Menu.js", 6988 "file": "src/lib/Menu.js",
6875 "id": "menu.workspaces.closeWorkspaceDrawer", 6989 "id": "menu.workspaces.closeWorkspaceDrawer",
6876 "start": { 6990 "start": {
6877 "column": 24, 6991 "column": 24,
6878 "line": 241 6992 "line": 245
6879 } 6993 }
6880 }, 6994 },
6881 { 6995 {
6882 "defaultMessage": "!!!Activate next service...", 6996 "defaultMessage": "!!!Activate next service...",
6883 "end": { 6997 "end": {
6884 "column": 3, 6998 "column": 3,
6885 "line": 248 6999 "line": 252
6886 }, 7000 },
6887 "file": "src/lib/Menu.js", 7001 "file": "src/lib/Menu.js",
6888 "id": "menu.services.setNextServiceActive", 7002 "id": "menu.services.setNextServiceActive",
6889 "start": { 7003 "start": {
6890 "column": 23, 7004 "column": 23,
6891 "line": 245 7005 "line": 249
6892 } 7006 }
6893 }, 7007 },
6894 { 7008 {
6895 "defaultMessage": "!!!Activate previous service...", 7009 "defaultMessage": "!!!Activate previous service...",
6896 "end": { 7010 "end": {
6897 "column": 3, 7011 "column": 3,
6898 "line": 252 7012 "line": 256
6899 }, 7013 },
6900 "file": "src/lib/Menu.js", 7014 "file": "src/lib/Menu.js",
6901 "id": "menu.services.activatePreviousService", 7015 "id": "menu.services.activatePreviousService",
6902 "start": { 7016 "start": {
6903 "column": 27, 7017 "column": 27,
6904 "line": 249 7018 "line": 253
6905 } 7019 }
6906 }, 7020 },
6907 { 7021 {
6908 "defaultMessage": "!!!Disable notifications & audio", 7022 "defaultMessage": "!!!Disable notifications & audio",
6909 "end": { 7023 "end": {
6910 "column": 3, 7024 "column": 3,
6911 "line": 256 7025 "line": 260
6912 }, 7026 },
6913 "file": "src/lib/Menu.js", 7027 "file": "src/lib/Menu.js",
6914 "id": "sidebar.muteApp", 7028 "id": "sidebar.muteApp",
6915 "start": { 7029 "start": {
6916 "column": 11, 7030 "column": 11,
6917 "line": 253 7031 "line": 257
6918 } 7032 }
6919 }, 7033 },
6920 { 7034 {
6921 "defaultMessage": "!!!Enable notifications & audio", 7035 "defaultMessage": "!!!Enable notifications & audio",
6922 "end": { 7036 "end": {
6923 "column": 3, 7037 "column": 3,
6924 "line": 260 7038 "line": 264
6925 }, 7039 },
6926 "file": "src/lib/Menu.js", 7040 "file": "src/lib/Menu.js",
6927 "id": "sidebar.unmuteApp", 7041 "id": "sidebar.unmuteApp",
6928 "start": { 7042 "start": {
6929 "column": 13, 7043 "column": 13,
6930 "line": 257 7044 "line": 261
6931 } 7045 }
6932 }, 7046 },
6933 { 7047 {
6934 "defaultMessage": "!!!Workspaces", 7048 "defaultMessage": "!!!Workspaces",
6935 "end": { 7049 "end": {
6936 "column": 3, 7050 "column": 3,
6937 "line": 264 7051 "line": 268
6938 }, 7052 },
6939 "file": "src/lib/Menu.js", 7053 "file": "src/lib/Menu.js",
6940 "id": "menu.workspaces", 7054 "id": "menu.workspaces",
6941 "start": { 7055 "start": {
6942 "column": 14, 7056 "column": 14,
6943 "line": 261 7057 "line": 265
6944 } 7058 }
6945 }, 7059 },
6946 { 7060 {
6947 "defaultMessage": "!!!Default", 7061 "defaultMessage": "!!!Default",
6948 "end": { 7062 "end": {
6949 "column": 3, 7063 "column": 3,
6950 "line": 268 7064 "line": 272
6951 }, 7065 },
6952 "file": "src/lib/Menu.js", 7066 "file": "src/lib/Menu.js",
6953 "id": "menu.workspaces.defaultWorkspace", 7067 "id": "menu.workspaces.defaultWorkspace",
6954 "start": { 7068 "start": {
6955 "column": 20, 7069 "column": 20,
6956 "line": 265 7070 "line": 269
6957 } 7071 }
6958 }, 7072 },
6959 { 7073 {
6960 "defaultMessage": "!!!Todos", 7074 "defaultMessage": "!!!Todos",
6961 "end": { 7075 "end": {
6962 "column": 3, 7076 "column": 3,
6963 "line": 272 7077 "line": 276
6964 }, 7078 },
6965 "file": "src/lib/Menu.js", 7079 "file": "src/lib/Menu.js",
6966 "id": "menu.todos", 7080 "id": "menu.todos",
6967 "start": { 7081 "start": {
6968 "column": 9, 7082 "column": 9,
6969 "line": 269 7083 "line": 273
6970 } 7084 }
6971 }, 7085 },
6972 { 7086 {
6973 "defaultMessage": "!!!Open Todos drawer", 7087 "defaultMessage": "!!!Open Todos drawer",
6974 "end": { 7088 "end": {
6975 "column": 3, 7089 "column": 3,
6976 "line": 276 7090 "line": 280
6977 }, 7091 },
6978 "file": "src/lib/Menu.js", 7092 "file": "src/lib/Menu.js",
6979 "id": "menu.Todoss.openTodosDrawer", 7093 "id": "menu.Todoss.openTodosDrawer",
6980 "start": { 7094 "start": {
6981 "column": 19, 7095 "column": 19,
6982 "line": 273 7096 "line": 277
6983 } 7097 }
6984 }, 7098 },
6985 { 7099 {
6986 "defaultMessage": "!!!Close Todos drawer", 7100 "defaultMessage": "!!!Close Todos drawer",
6987 "end": { 7101 "end": {
6988 "column": 3, 7102 "column": 3,
6989 "line": 280 7103 "line": 284
6990 }, 7104 },
6991 "file": "src/lib/Menu.js", 7105 "file": "src/lib/Menu.js",
6992 "id": "menu.Todoss.closeTodosDrawer", 7106 "id": "menu.Todoss.closeTodosDrawer",
6993 "start": { 7107 "start": {
6994 "column": 20, 7108 "column": 20,
6995 "line": 277 7109 "line": 281
6996 } 7110 }
6997 }, 7111 },
6998 { 7112 {
6999 "defaultMessage": "!!!Enable Todos", 7113 "defaultMessage": "!!!Enable Todos",
7000 "end": { 7114 "end": {
7001 "column": 3, 7115 "column": 3,
7002 "line": 284 7116 "line": 288
7003 }, 7117 },
7004 "file": "src/lib/Menu.js", 7118 "file": "src/lib/Menu.js",
7005 "id": "menu.todos.enableTodos", 7119 "id": "menu.todos.enableTodos",
7006 "start": { 7120 "start": {
7007 "column": 15, 7121 "column": 15,
7008 "line": 281 7122 "line": 285
7009 } 7123 }
7010 }, 7124 },
7011 { 7125 {
7012 "defaultMessage": "!!!Home", 7126 "defaultMessage": "!!!Home",
7013 "end": { 7127 "end": {
7014 "column": 3, 7128 "column": 3,
7015 "line": 288 7129 "line": 292
7016 }, 7130 },
7017 "file": "src/lib/Menu.js", 7131 "file": "src/lib/Menu.js",
7018 "id": "menu.services.goHome", 7132 "id": "menu.services.goHome",
7019 "start": { 7133 "start": {
7020 "column": 17, 7134 "column": 17,
7021 "line": 285 7135 "line": 289
7022 } 7136 }
7023 } 7137 }
7024 ], 7138 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 1a8e9f743..f523bc380 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -2,6 +2,7 @@
2 "app.errorHandler.action": "Reload", 2 "app.errorHandler.action": "Reload",
3 "app.errorHandler.headline": "Something went wrong", 3 "app.errorHandler.headline": "Something went wrong",
4 "feature.announcements.changelog.headline": "Changes in Ferdi {version}", 4 "feature.announcements.changelog.headline": "Changes in Ferdi {version}",
5 "feature.debugger.title": "Publish debugging information",
5 "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting", 6 "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting",
6 "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", 7 "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.",
7 "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", 8 "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional",
@@ -25,6 +26,12 @@
25 "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.", 26 "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.",
26 "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment", 27 "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment",
27 "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", 28 "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.",
29 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service",
30 "feature.publishDebugInfo.privacy": "Privacy policy",
31 "feature.publishDebugInfo.publish": "Accept and publish",
32 "feature.publishDebugInfo.published": "Your debug log was published and is now availible at",
33 "feature.publishDebugInfo.terms": "Terms of service",
34 "feature.publishDebugInfo.title": "Publish debug information",
28 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 35 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
29 "feature.quickSwitch.search": "Search...", 36 "feature.quickSwitch.search": "Search...",
30 "feature.quickSwitch.title": "QuickSwitch", 37 "feature.quickSwitch.title": "QuickSwitch",
@@ -122,6 +129,7 @@
122 "menu.help.debugInfoCopiedHeadline": "Ferdi Debug Information", 129 "menu.help.debugInfoCopiedHeadline": "Ferdi Debug Information",
123 "menu.help.learnMore": "Learn More", 130 "menu.help.learnMore": "Learn More",
124 "menu.help.privacy": "Privacy Statement", 131 "menu.help.privacy": "Privacy Statement",
132 "menu.help.publishDebugInfo": "Publish Debug Information",
125 "menu.help.support": "Support", 133 "menu.help.support": "Support",
126 "menu.help.tos": "Terms of Service", 134 "menu.help.tos": "Terms of Service",
127 "menu.services": "Services", 135 "menu.services": "Services",
diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json
index bca181d0f..5a8e082f2 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": 30, 7 "line": 31,
8 "column": 19 8 "column": 19
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 33, 11 "line": 34,
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": 34, 20 "line": 35,
21 "column": 24 21 "column": 24
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 37, 24 "line": 38,
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": 38, 33 "line": 39,
34 "column": 26 34 "column": 26
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 41, 37 "line": 42,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 43 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
44 "file": "src/components/layout/AppLayout.js", 44 "file": "src/components/layout/AppLayout.js",
45 "start": { 45 "start": {
46 "line": 42, 46 "line": 43,
47 "column": 21 47 "column": 21
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 45, 50 "line": 46,
51 "column": 3 51 "column": 3
52 } 52 }
53 } 53 }
diff --git a/src/i18n/messages/src/features/debugger/Component.json b/src/i18n/messages/src/features/debugger/Component.json
new file mode 100644
index 000000000..86a5a05f4
--- /dev/null
+++ b/src/i18n/messages/src/features/debugger/Component.json
@@ -0,0 +1,15 @@
1[
2 {
3 "id": "feature.debugger.title",
4 "defaultMessage": "!!!Publish debugging information",
5 "file": "src/features/debugger/Component.js",
6 "start": {
7 "line": 16,
8 "column": 9
9 },
10 "end": {
11 "line": 19,
12 "column": 3
13 }
14 }
15] \ No newline at end of file
diff --git a/src/i18n/messages/src/features/publishDebugInfo/Component.json b/src/i18n/messages/src/features/publishDebugInfo/Component.json
new file mode 100644
index 000000000..500f2c01b
--- /dev/null
+++ b/src/i18n/messages/src/features/publishDebugInfo/Component.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "feature.publishDebugInfo.title",
4 "defaultMessage": "!!!Publish debug information",
5 "file": "src/features/publishDebugInfo/Component.js",
6 "start": {
7 "line": 17,
8 "column": 9
9 },
10 "end": {
11 "line": 20,
12 "column": 3
13 }
14 },
15 {
16 "id": "feature.publishDebugInfo.info",
17 "defaultMessage": "!!!Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service",
18 "file": "src/features/publishDebugInfo/Component.js",
19 "start": {
20 "line": 21,
21 "column": 8
22 },
23 "end": {
24 "line": 24,
25 "column": 3
26 }
27 },
28 {
29 "id": "feature.publishDebugInfo.privacy",
30 "defaultMessage": "!!!Privacy policy",
31 "file": "src/features/publishDebugInfo/Component.js",
32 "start": {
33 "line": 25,
34 "column": 11
35 },
36 "end": {
37 "line": 28,
38 "column": 3
39 }
40 },
41 {
42 "id": "feature.publishDebugInfo.terms",
43 "defaultMessage": "!!!Terms of service",
44 "file": "src/features/publishDebugInfo/Component.js",
45 "start": {
46 "line": 29,
47 "column": 9
48 },
49 "end": {
50 "line": 32,
51 "column": 3
52 }
53 },
54 {
55 "id": "feature.publishDebugInfo.publish",
56 "defaultMessage": "!!!Accept and publish",
57 "file": "src/features/publishDebugInfo/Component.js",
58 "start": {
59 "line": 33,
60 "column": 11
61 },
62 "end": {
63 "line": 36,
64 "column": 3
65 }
66 },
67 {
68 "id": "feature.publishDebugInfo.published",
69 "defaultMessage": "!!!Your debug log was published and is now availible at",
70 "file": "src/features/publishDebugInfo/Component.js",
71 "start": {
72 "line": 37,
73 "column": 13
74 },
75 "end": {
76 "line": 40,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json
index f69d951fd..e323d6174 100644
--- a/src/i18n/messages/src/lib/Menu.json
+++ b/src/i18n/messages/src/lib/Menu.json
@@ -455,15 +455,28 @@
455 } 455 }
456 }, 456 },
457 { 457 {
458 "id": "menu.help.publishDebugInfo",
459 "defaultMessage": "!!!Publish Debug Information",
460 "file": "src/lib/Menu.js",
461 "start": {
462 "line": 157,
463 "column": 20
464 },
465 "end": {
466 "line": 160,
467 "column": 3
468 }
469 },
470 {
458 "id": "menu.help.debugInfoCopiedHeadline", 471 "id": "menu.help.debugInfoCopiedHeadline",
459 "defaultMessage": "!!!Ferdi Debug Information", 472 "defaultMessage": "!!!Ferdi Debug Information",
460 "file": "src/lib/Menu.js", 473 "file": "src/lib/Menu.js",
461 "start": { 474 "start": {
462 "line": 157, 475 "line": 161,
463 "column": 27 476 "column": 27
464 }, 477 },
465 "end": { 478 "end": {
466 "line": 160, 479 "line": 164,
467 "column": 3 480 "column": 3
468 } 481 }
469 }, 482 },
@@ -472,11 +485,11 @@
472 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", 485 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
473 "file": "src/lib/Menu.js", 486 "file": "src/lib/Menu.js",
474 "start": { 487 "start": {
475 "line": 161, 488 "line": 165,
476 "column": 23 489 "column": 23
477 }, 490 },
478 "end": { 491 "end": {
479 "line": 164, 492 "line": 168,
480 "column": 3 493 "column": 3
481 } 494 }
482 }, 495 },
@@ -485,11 +498,11 @@
485 "defaultMessage": "!!!Terms of Service", 498 "defaultMessage": "!!!Terms of Service",
486 "file": "src/lib/Menu.js", 499 "file": "src/lib/Menu.js",
487 "start": { 500 "start": {
488 "line": 165, 501 "line": 169,
489 "column": 7 502 "column": 7
490 }, 503 },
491 "end": { 504 "end": {
492 "line": 168, 505 "line": 172,
493 "column": 3 506 "column": 3
494 } 507 }
495 }, 508 },
@@ -498,11 +511,11 @@
498 "defaultMessage": "!!!Privacy Statement", 511 "defaultMessage": "!!!Privacy Statement",
499 "file": "src/lib/Menu.js", 512 "file": "src/lib/Menu.js",
500 "start": { 513 "start": {
501 "line": 169, 514 "line": 173,
502 "column": 11 515 "column": 11
503 }, 516 },
504 "end": { 517 "end": {
505 "line": 172, 518 "line": 176,
506 "column": 3 519 "column": 3
507 } 520 }
508 }, 521 },
@@ -511,11 +524,11 @@
511 "defaultMessage": "!!!File", 524 "defaultMessage": "!!!File",
512 "file": "src/lib/Menu.js", 525 "file": "src/lib/Menu.js",
513 "start": { 526 "start": {
514 "line": 173, 527 "line": 177,
515 "column": 8 528 "column": 8
516 }, 529 },
517 "end": { 530 "end": {
518 "line": 176, 531 "line": 180,
519 "column": 3 532 "column": 3
520 } 533 }
521 }, 534 },
@@ -524,11 +537,11 @@
524 "defaultMessage": "!!!View", 537 "defaultMessage": "!!!View",
525 "file": "src/lib/Menu.js", 538 "file": "src/lib/Menu.js",
526 "start": { 539 "start": {
527 "line": 177, 540 "line": 181,
528 "column": 8 541 "column": 8
529 }, 542 },
530 "end": { 543 "end": {
531 "line": 180, 544 "line": 184,
532 "column": 3 545 "column": 3
533 } 546 }
534 }, 547 },
@@ -537,11 +550,11 @@
537 "defaultMessage": "!!!Services", 550 "defaultMessage": "!!!Services",
538 "file": "src/lib/Menu.js", 551 "file": "src/lib/Menu.js",
539 "start": { 552 "start": {
540 "line": 181, 553 "line": 185,
541 "column": 12 554 "column": 12
542 }, 555 },
543 "end": { 556 "end": {
544 "line": 184, 557 "line": 188,
545 "column": 3 558 "column": 3
546 } 559 }
547 }, 560 },
@@ -550,11 +563,11 @@
550 "defaultMessage": "!!!Window", 563 "defaultMessage": "!!!Window",
551 "file": "src/lib/Menu.js", 564 "file": "src/lib/Menu.js",
552 "start": { 565 "start": {
553 "line": 185, 566 "line": 189,
554 "column": 10 567 "column": 10
555 }, 568 },
556 "end": { 569 "end": {
557 "line": 188, 570 "line": 192,
558 "column": 3 571 "column": 3
559 } 572 }
560 }, 573 },
@@ -563,11 +576,11 @@
563 "defaultMessage": "!!!Help", 576 "defaultMessage": "!!!Help",
564 "file": "src/lib/Menu.js", 577 "file": "src/lib/Menu.js",
565 "start": { 578 "start": {
566 "line": 189, 579 "line": 193,
567 "column": 8 580 "column": 8
568 }, 581 },
569 "end": { 582 "end": {
570 "line": 192, 583 "line": 196,
571 "column": 3 584 "column": 3
572 } 585 }
573 }, 586 },
@@ -576,11 +589,11 @@
576 "defaultMessage": "!!!About Ferdi", 589 "defaultMessage": "!!!About Ferdi",
577 "file": "src/lib/Menu.js", 590 "file": "src/lib/Menu.js",
578 "start": { 591 "start": {
579 "line": 193, 592 "line": 197,
580 "column": 9 593 "column": 9
581 }, 594 },
582 "end": { 595 "end": {
583 "line": 196, 596 "line": 200,
584 "column": 3 597 "column": 3
585 } 598 }
586 }, 599 },
@@ -589,11 +602,11 @@
589 "defaultMessage": "!!!What's new?", 602 "defaultMessage": "!!!What's new?",
590 "file": "src/lib/Menu.js", 603 "file": "src/lib/Menu.js",
591 "start": { 604 "start": {
592 "line": 197, 605 "line": 201,
593 "column": 16 606 "column": 16
594 }, 607 },
595 "end": { 608 "end": {
596 "line": 200, 609 "line": 204,
597 "column": 3 610 "column": 3
598 } 611 }
599 }, 612 },
@@ -602,11 +615,11 @@
602 "defaultMessage": "!!!Settings", 615 "defaultMessage": "!!!Settings",
603 "file": "src/lib/Menu.js", 616 "file": "src/lib/Menu.js",
604 "start": { 617 "start": {
605 "line": 201, 618 "line": 205,
606 "column": 12 619 "column": 12
607 }, 620 },
608 "end": { 621 "end": {
609 "line": 204, 622 "line": 208,
610 "column": 3 623 "column": 3
611 } 624 }
612 }, 625 },
@@ -615,11 +628,11 @@
615 "defaultMessage": "!!!Check for updates", 628 "defaultMessage": "!!!Check for updates",
616 "file": "src/lib/Menu.js", 629 "file": "src/lib/Menu.js",
617 "start": { 630 "start": {
618 "line": 205, 631 "line": 209,
619 "column": 19 632 "column": 19
620 }, 633 },
621 "end": { 634 "end": {
622 "line": 208, 635 "line": 212,
623 "column": 3 636 "column": 3
624 } 637 }
625 }, 638 },
@@ -628,11 +641,11 @@
628 "defaultMessage": "!!!Hide", 641 "defaultMessage": "!!!Hide",
629 "file": "src/lib/Menu.js", 642 "file": "src/lib/Menu.js",
630 "start": { 643 "start": {
631 "line": 209, 644 "line": 213,
632 "column": 8 645 "column": 8
633 }, 646 },
634 "end": { 647 "end": {
635 "line": 212, 648 "line": 216,
636 "column": 3 649 "column": 3
637 } 650 }
638 }, 651 },
@@ -641,11 +654,11 @@
641 "defaultMessage": "!!!Hide Others", 654 "defaultMessage": "!!!Hide Others",
642 "file": "src/lib/Menu.js", 655 "file": "src/lib/Menu.js",
643 "start": { 656 "start": {
644 "line": 213, 657 "line": 217,
645 "column": 14 658 "column": 14
646 }, 659 },
647 "end": { 660 "end": {
648 "line": 216, 661 "line": 220,
649 "column": 3 662 "column": 3
650 } 663 }
651 }, 664 },
@@ -654,11 +667,11 @@
654 "defaultMessage": "!!!Unhide", 667 "defaultMessage": "!!!Unhide",
655 "file": "src/lib/Menu.js", 668 "file": "src/lib/Menu.js",
656 "start": { 669 "start": {
657 "line": 217, 670 "line": 221,
658 "column": 10 671 "column": 10
659 }, 672 },
660 "end": { 673 "end": {
661 "line": 220, 674 "line": 224,
662 "column": 3 675 "column": 3
663 } 676 }
664 }, 677 },
@@ -667,11 +680,11 @@
667 "defaultMessage": "!!!Auto-hide menu bar", 680 "defaultMessage": "!!!Auto-hide menu bar",
668 "file": "src/lib/Menu.js", 681 "file": "src/lib/Menu.js",
669 "start": { 682 "start": {
670 "line": 221, 683 "line": 225,
671 "column": 19 684 "column": 19
672 }, 685 },
673 "end": { 686 "end": {
674 "line": 224, 687 "line": 228,
675 "column": 3 688 "column": 3
676 } 689 }
677 }, 690 },
@@ -680,11 +693,11 @@
680 "defaultMessage": "!!!Quit", 693 "defaultMessage": "!!!Quit",
681 "file": "src/lib/Menu.js", 694 "file": "src/lib/Menu.js",
682 "start": { 695 "start": {
683 "line": 225, 696 "line": 229,
684 "column": 8 697 "column": 8
685 }, 698 },
686 "end": { 699 "end": {
687 "line": 228, 700 "line": 232,
688 "column": 3 701 "column": 3
689 } 702 }
690 }, 703 },
@@ -693,11 +706,11 @@
693 "defaultMessage": "!!!Add New Service...", 706 "defaultMessage": "!!!Add New Service...",
694 "file": "src/lib/Menu.js", 707 "file": "src/lib/Menu.js",
695 "start": { 708 "start": {
696 "line": 229, 709 "line": 233,
697 "column": 17 710 "column": 17
698 }, 711 },
699 "end": { 712 "end": {
700 "line": 232, 713 "line": 236,
701 "column": 3 714 "column": 3
702 } 715 }
703 }, 716 },
@@ -706,11 +719,11 @@
706 "defaultMessage": "!!!Add New Workspace...", 719 "defaultMessage": "!!!Add New Workspace...",
707 "file": "src/lib/Menu.js", 720 "file": "src/lib/Menu.js",
708 "start": { 721 "start": {
709 "line": 233, 722 "line": 237,
710 "column": 19 723 "column": 19
711 }, 724 },
712 "end": { 725 "end": {
713 "line": 236, 726 "line": 240,
714 "column": 3 727 "column": 3
715 } 728 }
716 }, 729 },
@@ -719,11 +732,11 @@
719 "defaultMessage": "!!!Open workspace drawer", 732 "defaultMessage": "!!!Open workspace drawer",
720 "file": "src/lib/Menu.js", 733 "file": "src/lib/Menu.js",
721 "start": { 734 "start": {
722 "line": 237, 735 "line": 241,
723 "column": 23 736 "column": 23
724 }, 737 },
725 "end": { 738 "end": {
726 "line": 240, 739 "line": 244,
727 "column": 3 740 "column": 3
728 } 741 }
729 }, 742 },
@@ -732,11 +745,11 @@
732 "defaultMessage": "!!!Close workspace drawer", 745 "defaultMessage": "!!!Close workspace drawer",
733 "file": "src/lib/Menu.js", 746 "file": "src/lib/Menu.js",
734 "start": { 747 "start": {
735 "line": 241, 748 "line": 245,
736 "column": 24 749 "column": 24
737 }, 750 },
738 "end": { 751 "end": {
739 "line": 244, 752 "line": 248,
740 "column": 3 753 "column": 3
741 } 754 }
742 }, 755 },
@@ -745,11 +758,11 @@
745 "defaultMessage": "!!!Activate next service...", 758 "defaultMessage": "!!!Activate next service...",
746 "file": "src/lib/Menu.js", 759 "file": "src/lib/Menu.js",
747 "start": { 760 "start": {
748 "line": 245, 761 "line": 249,
749 "column": 23 762 "column": 23
750 }, 763 },
751 "end": { 764 "end": {
752 "line": 248, 765 "line": 252,
753 "column": 3 766 "column": 3
754 } 767 }
755 }, 768 },
@@ -758,11 +771,11 @@
758 "defaultMessage": "!!!Activate previous service...", 771 "defaultMessage": "!!!Activate previous service...",
759 "file": "src/lib/Menu.js", 772 "file": "src/lib/Menu.js",
760 "start": { 773 "start": {
761 "line": 249, 774 "line": 253,
762 "column": 27 775 "column": 27
763 }, 776 },
764 "end": { 777 "end": {
765 "line": 252, 778 "line": 256,
766 "column": 3 779 "column": 3
767 } 780 }
768 }, 781 },
@@ -771,11 +784,11 @@
771 "defaultMessage": "!!!Disable notifications & audio", 784 "defaultMessage": "!!!Disable notifications & audio",
772 "file": "src/lib/Menu.js", 785 "file": "src/lib/Menu.js",
773 "start": { 786 "start": {
774 "line": 253, 787 "line": 257,
775 "column": 11 788 "column": 11
776 }, 789 },
777 "end": { 790 "end": {
778 "line": 256, 791 "line": 260,
779 "column": 3 792 "column": 3
780 } 793 }
781 }, 794 },
@@ -784,11 +797,11 @@
784 "defaultMessage": "!!!Enable notifications & audio", 797 "defaultMessage": "!!!Enable notifications & audio",
785 "file": "src/lib/Menu.js", 798 "file": "src/lib/Menu.js",
786 "start": { 799 "start": {
787 "line": 257, 800 "line": 261,
788 "column": 13 801 "column": 13
789 }, 802 },
790 "end": { 803 "end": {
791 "line": 260, 804 "line": 264,
792 "column": 3 805 "column": 3
793 } 806 }
794 }, 807 },
@@ -797,11 +810,11 @@
797 "defaultMessage": "!!!Workspaces", 810 "defaultMessage": "!!!Workspaces",
798 "file": "src/lib/Menu.js", 811 "file": "src/lib/Menu.js",
799 "start": { 812 "start": {
800 "line": 261, 813 "line": 265,
801 "column": 14 814 "column": 14
802 }, 815 },
803 "end": { 816 "end": {
804 "line": 264, 817 "line": 268,
805 "column": 3 818 "column": 3
806 } 819 }
807 }, 820 },
@@ -810,11 +823,11 @@
810 "defaultMessage": "!!!Default", 823 "defaultMessage": "!!!Default",
811 "file": "src/lib/Menu.js", 824 "file": "src/lib/Menu.js",
812 "start": { 825 "start": {
813 "line": 265, 826 "line": 269,
814 "column": 20 827 "column": 20
815 }, 828 },
816 "end": { 829 "end": {
817 "line": 268, 830 "line": 272,
818 "column": 3 831 "column": 3
819 } 832 }
820 }, 833 },
@@ -823,11 +836,11 @@
823 "defaultMessage": "!!!Todos", 836 "defaultMessage": "!!!Todos",
824 "file": "src/lib/Menu.js", 837 "file": "src/lib/Menu.js",
825 "start": { 838 "start": {
826 "line": 269, 839 "line": 273,
827 "column": 9 840 "column": 9
828 }, 841 },
829 "end": { 842 "end": {
830 "line": 272, 843 "line": 276,
831 "column": 3 844 "column": 3
832 } 845 }
833 }, 846 },
@@ -836,11 +849,11 @@
836 "defaultMessage": "!!!Open Todos drawer", 849 "defaultMessage": "!!!Open Todos drawer",
837 "file": "src/lib/Menu.js", 850 "file": "src/lib/Menu.js",
838 "start": { 851 "start": {
839 "line": 273, 852 "line": 277,
840 "column": 19 853 "column": 19
841 }, 854 },
842 "end": { 855 "end": {
843 "line": 276, 856 "line": 280,
844 "column": 3 857 "column": 3
845 } 858 }
846 }, 859 },
@@ -849,11 +862,11 @@
849 "defaultMessage": "!!!Close Todos drawer", 862 "defaultMessage": "!!!Close Todos drawer",
850 "file": "src/lib/Menu.js", 863 "file": "src/lib/Menu.js",
851 "start": { 864 "start": {
852 "line": 277, 865 "line": 281,
853 "column": 20 866 "column": 20
854 }, 867 },
855 "end": { 868 "end": {
856 "line": 280, 869 "line": 284,
857 "column": 3 870 "column": 3
858 } 871 }
859 }, 872 },
@@ -862,11 +875,11 @@
862 "defaultMessage": "!!!Enable Todos", 875 "defaultMessage": "!!!Enable Todos",
863 "file": "src/lib/Menu.js", 876 "file": "src/lib/Menu.js",
864 "start": { 877 "start": {
865 "line": 281, 878 "line": 285,
866 "column": 15 879 "column": 15
867 }, 880 },
868 "end": { 881 "end": {
869 "line": 284, 882 "line": 288,
870 "column": 3 883 "column": 3
871 } 884 }
872 }, 885 },
@@ -875,11 +888,11 @@
875 "defaultMessage": "!!!Home", 888 "defaultMessage": "!!!Home",
876 "file": "src/lib/Menu.js", 889 "file": "src/lib/Menu.js",
877 "start": { 890 "start": {
878 "line": 285, 891 "line": 289,
879 "column": 17 892 "column": 17
880 }, 893 },
881 "end": { 894 "end": {
882 "line": 288, 895 "line": 292,
883 "column": 3 896 "column": 3
884 } 897 }
885 } 898 }
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index 303845e55..6167f1c59 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -154,6 +154,10 @@ const menuItems = defineMessages({
154 id: 'menu.help.debugInfo', 154 id: 'menu.help.debugInfo',
155 defaultMessage: '!!!Copy Debug Information', 155 defaultMessage: '!!!Copy Debug Information',
156 }, 156 },
157 publishDebugInfo: {
158 id: 'menu.help.publishDebugInfo',
159 defaultMessage: '!!!Publish Debug Information',
160 },
157 debugInfoCopiedHeadline: { 161 debugInfoCopiedHeadline: {
158 id: 'menu.help.debugInfoCopiedHeadline', 162 id: 'menu.help.debugInfoCopiedHeadline',
159 defaultMessage: '!!!Ferdi Debug Information', 163 defaultMessage: '!!!Ferdi Debug Information',
@@ -959,7 +963,7 @@ export default class FranzMenu {
959 963
960 tpl[tpl.length - 1].submenu.push({ 964 tpl[tpl.length - 1].submenu.push({
961 type: 'separator', 965 type: 'separator',
962 }, this.debugMenu()); 966 }, ...this.debugMenu());
963 967
964 this.currentTemplate = tpl; 968 this.currentTemplate = tpl;
965 const menu = Menu.buildFromTemplate(tpl); 969 const menu = Menu.buildFromTemplate(tpl);
@@ -1117,7 +1121,7 @@ export default class FranzMenu {
1117 debugMenu() { 1121 debugMenu() {
1118 const { intl } = window.ferdi; 1122 const { intl } = window.ferdi;
1119 1123
1120 return { 1124 return [{
1121 label: intl.formatMessage(menuItems.debugInfo), 1125 label: intl.formatMessage(menuItems.debugInfo),
1122 click: () => { 1126 click: () => {
1123 const { debugInfo } = this.stores.app; 1127 const { debugInfo } = this.stores.app;
@@ -1133,7 +1137,12 @@ export default class FranzMenu {
1133 }, 1137 },
1134 }); 1138 });
1135 }, 1139 },
1136 }; 1140 }, {
1141 label: intl.formatMessage(menuItems.publishDebugInfo),
1142 click: () => {
1143 window.ferdi.features.publishDebugInfo.state.isModalVisible = true;
1144 },
1145 }];
1137 } 1146 }
1138 1147
1139 _getServiceName(service) { 1148 _getServiceName(service) {
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index eec4678b9..8a279bc8a 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -14,6 +14,7 @@ import serviceProxy from '../features/serviceProxy';
14import basicAuth from '../features/basicAuth'; 14import basicAuth from '../features/basicAuth';
15import workspaces from '../features/workspaces'; 15import workspaces from '../features/workspaces';
16import quickSwitch from '../features/quickSwitch'; 16import quickSwitch from '../features/quickSwitch';
17import publishDebugInfo from '../features/publishDebugInfo';
17import shareFranz from '../features/shareFranz'; 18import shareFranz from '../features/shareFranz';
18import announcements from '../features/announcements'; 19import announcements from '../features/announcements';
19import settingsWS from '../features/settingsWS'; 20import settingsWS from '../features/settingsWS';
@@ -84,6 +85,7 @@ export default class FeaturesStore extends Store {
84 basicAuth(this.stores, this.actions); 85 basicAuth(this.stores, this.actions);
85 workspaces(this.stores, this.actions); 86 workspaces(this.stores, this.actions);
86 quickSwitch(this.stores, this.actions); 87 quickSwitch(this.stores, this.actions);
88 publishDebugInfo(this.stores, this.actions);
87 shareFranz(this.stores, this.actions); 89 shareFranz(this.stores, this.actions);
88 announcements(this.stores, this.actions); 90 announcements(this.stores, this.actions);
89 settingsWS(this.stores, this.actions); 91 settingsWS(this.stores, this.actions);