Debug Log: Copy URL instead of open in browser
This commit is contained in:
parent
dc81bf2bba
commit
7bb7c0d1e1
7 changed files with 61 additions and 34 deletions
|
@ -413,6 +413,18 @@
|
||||||
"debugLogError": {
|
"debugLogError": {
|
||||||
"message": "Something went wrong with the upload! Please consider manually adding your log to the bug you file."
|
"message": "Something went wrong with the upload! Please consider manually adding your log to the bug you file."
|
||||||
},
|
},
|
||||||
|
"debugLogCopy": {
|
||||||
|
"message": "Copy",
|
||||||
|
"description": "Shown as the text for the copy button on the debug log screen"
|
||||||
|
},
|
||||||
|
"debugLogCopyAlt": {
|
||||||
|
"message": "Copy link to your clipboard",
|
||||||
|
"description": "Shown as the alt text for the copy button on the debug log screen"
|
||||||
|
},
|
||||||
|
"debugLogLinkCopied": {
|
||||||
|
"message": "Link Copied to Your Clipboard",
|
||||||
|
"description": "Shown in a taost to let the user know that the link to the debug log has been copied to their clipboard"
|
||||||
|
},
|
||||||
"reportIssue": {
|
"reportIssue": {
|
||||||
"message": "Report an issue",
|
"message": "Report an issue",
|
||||||
"description": "Link to open the issue tracker"
|
"description": "Link to open the issue tracker"
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<script type='text/x-tmpl-mustache' id='debug-log-link'>
|
<script type='text/x-tmpl-mustache' id='debug-log-link'>
|
||||||
<div class='input-group clearfix'>
|
<div class='input-group clearfix'>
|
||||||
<input type='text' class='link' readonly value='{{ url }}' />
|
<input type='text' class='link' readonly value='{{ url }}' />
|
||||||
<a class='open' alt='open in a new browser tab' target='_blank' href='{{ url }}'></a>
|
<a class='copy' alt='{{ debugLogCopyAlt }}' target='_blank' href='{{ url }}'>{{ debugLogCopy }}</a>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
<a class='report-link' target='_blank'
|
<a class='report-link' target='_blank'
|
||||||
|
@ -47,8 +47,12 @@
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</script>
|
</script>
|
||||||
|
<script type='text/x-tmpl-mustache' id='toast'>
|
||||||
|
{{ toastMessage }}
|
||||||
|
</script>
|
||||||
<script type='text/javascript' src='js/components.js'></script>
|
<script type='text/javascript' src='js/components.js'></script>
|
||||||
<script type='text/javascript' src='js/views/whisper_view.js'></script>
|
<script type='text/javascript' src='js/views/whisper_view.js'></script>
|
||||||
|
<script type='text/javascript' src='js/views/toast_view.js'></script>
|
||||||
<script type='text/javascript' src='js/views/debug_log_view.js'></script>
|
<script type='text/javascript' src='js/views/debug_log_view.js'></script>
|
||||||
<script type='text/javascript' src='js/debug_log_start.js'></script>
|
<script type='text/javascript' src='js/debug_log_start.js'></script>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
const { ipcRenderer } = require('electron');
|
const { ipcRenderer } = require('electron');
|
||||||
const url = require('url');
|
const url = require('url');
|
||||||
|
const copyText = require('copy-text-to-clipboard');
|
||||||
const i18n = require('./js/modules/i18n');
|
const i18n = require('./js/modules/i18n');
|
||||||
|
|
||||||
const config = url.parse(window.location.toString(), true).query;
|
const config = url.parse(window.location.toString(), true).query;
|
||||||
|
@ -11,6 +12,7 @@ const localeMessages = ipcRenderer.sendSync('locale-data');
|
||||||
window.getVersion = () => config.version;
|
window.getVersion = () => config.version;
|
||||||
window.theme = config.theme;
|
window.theme = config.theme;
|
||||||
window.i18n = i18n.setup(locale, localeMessages);
|
window.i18n = i18n.setup(locale, localeMessages);
|
||||||
|
window.copyText = copyText;
|
||||||
|
|
||||||
// got.js appears to need this to successfully submit debug logs to the cloud
|
// got.js appears to need this to successfully submit debug logs to the cloud
|
||||||
window.nodeSetImmediate = setImmediate;
|
window.nodeSetImmediate = setImmediate;
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>open-24</title><path d="M20,11.5V19a3,3,0,0,1-3,3H5a3,3,0,0,1-3-3V7A3,3,0,0,1,5,4h7.5V5.5H5A1.5,1.5,0,0,0,3.5,7V19A1.5,1.5,0,0,0,5,20.5H17A1.5,1.5,0,0,0,18.5,19V11.5ZM14,2V3.5h4.518l1.106-.184L8.97,13.97l1.06,1.06L20.684,4.376,20.5,5.482V10H22V2Z"/></svg>
|
|
Before Width: | Height: | Size: 345 B |
|
@ -7,17 +7,33 @@
|
||||||
|
|
||||||
window.Whisper = window.Whisper || {};
|
window.Whisper = window.Whisper || {};
|
||||||
|
|
||||||
|
Whisper.LinkedCopiedToast = Whisper.ToastView.extend({
|
||||||
|
render_attributes() {
|
||||||
|
return { toastMessage: i18n('debugLogLinkCopied') };
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
Whisper.DebugLogLinkView = Whisper.View.extend({
|
Whisper.DebugLogLinkView = Whisper.View.extend({
|
||||||
templateName: 'debug-log-link',
|
templateName: 'debug-log-link',
|
||||||
initialize(options) {
|
initialize(options) {
|
||||||
this.url = options.url;
|
this.url = options.url;
|
||||||
},
|
},
|
||||||
|
events: {
|
||||||
|
'click .copy': 'copy',
|
||||||
|
},
|
||||||
render_attributes() {
|
render_attributes() {
|
||||||
return {
|
return {
|
||||||
url: this.url,
|
url: this.url,
|
||||||
reportIssue: i18n('reportIssue'),
|
reportIssue: i18n('reportIssue'),
|
||||||
|
debugLogCopy: i18n('debugLogCopy'),
|
||||||
|
debugLogCopyAlt: i18n('debugLogCopyAlt'),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
copy(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
window.copyText(e.currentTarget.href);
|
||||||
|
Whisper.ToastView.show(Whisper.LinkedCopiedToast, document.body);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
Whisper.DebugLogView = Whisper.View.extend({
|
Whisper.DebugLogView = Whisper.View.extend({
|
||||||
templateName: 'debug-log',
|
templateName: 'debug-log',
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
.result {
|
.result {
|
||||||
$link-max-width: 400px;
|
$link-max-width: 400px;
|
||||||
$open-width: 72px;
|
$open-width: 100px;
|
||||||
$open-height: 36px;
|
$open-height: 36px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
|
@ -41,14 +41,16 @@
|
||||||
max-width: $group-max-width;
|
max-width: $group-max-width;
|
||||||
}
|
}
|
||||||
|
|
||||||
$open-pad-x: ($open-width - 22px) / 2;
|
$open-pad-x: ($open-width - 40px) / 2;
|
||||||
$open-pad-y: ($open-height - 22px) / 2;
|
$open-pad-y: ($open-height - 22px) / 2;
|
||||||
.open {
|
.copy {
|
||||||
float: left;
|
float: left;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: $open-width;
|
width: $open-width;
|
||||||
height: $open-height;
|
height: $open-height;
|
||||||
padding: $open-pad-y $open-pad-x;
|
padding: $open-pad-y $open-pad-x;
|
||||||
|
color: unset;
|
||||||
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
border-radius: 0 5px 5px 0;
|
border-radius: 0 5px 5px 0;
|
||||||
|
@ -56,24 +58,16 @@
|
||||||
@include light-theme {
|
@include light-theme {
|
||||||
border: solid 1px $color-gray-25;
|
border: solid 1px $color-gray-25;
|
||||||
background: $color-gray-02;
|
background: $color-gray-02;
|
||||||
|
&:active {
|
||||||
|
background: $color-gray-25;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@include dark-theme {
|
@include dark-theme {
|
||||||
border: solid 1px $color-gray-45;
|
border: solid 1px $color-gray-45;
|
||||||
background-color: $color-gray-90;
|
background-color: $color-gray-90;
|
||||||
color: $color-gray-02;
|
color: $color-gray-02;
|
||||||
}
|
&:active {
|
||||||
|
background: $color-gray-25;
|
||||||
&:before {
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
|
|
||||||
@include light-theme {
|
|
||||||
@include header-icon-black('../images/icons/v2/open-24.svg');
|
|
||||||
}
|
|
||||||
@include dark-theme {
|
|
||||||
@include header-icon-white('../images/icons/v2/open-24.svg');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,72 +370,72 @@
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " this.$('textarea').val(i18n('loading'));",
|
"line": " this.$('textarea').val(i18n('loading'));",
|
||||||
"lineNumber": 27,
|
"lineNumber": 43,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " this.$('textarea').val(text);",
|
"line": " this.$('textarea').val(text);",
|
||||||
"lineNumber": 31,
|
"lineNumber": 47,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " const text = this.$('textarea').val();",
|
"line": " const text = this.$('textarea').val();",
|
||||||
"lineNumber": 50,
|
"lineNumber": 66,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " this.$('.buttons, textarea').remove();",
|
"line": " this.$('.buttons, textarea').remove();",
|
||||||
"lineNumber": 55,
|
"lineNumber": 71,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " el: this.$('.result'),",
|
"line": " el: this.$('.result'),",
|
||||||
"lineNumber": 62,
|
"lineNumber": 78,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " this.$('.loading').removeClass('loading');",
|
"line": " this.$('.loading').removeClass('loading');",
|
||||||
"lineNumber": 64,
|
"lineNumber": 80,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " this.$('.link')",
|
"line": " this.$('.link')",
|
||||||
"lineNumber": 66,
|
"lineNumber": 82,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rule": "jQuery-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/views/debug_log_view.js",
|
"path": "js/views/debug_log_view.js",
|
||||||
"line": " this.$('.loading').removeClass('loading');",
|
"line": " this.$('.loading').removeClass('loading');",
|
||||||
"lineNumber": 74,
|
"lineNumber": 90,
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2018-09-19T21:59:32.770Z",
|
"updated": "2020-05-01T17:11:39.527Z",
|
||||||
"reasonDetail": "Protected from arbitrary input"
|
"reasonDetail": "Protected from arbitrary input"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue