mirror of https://github.com/keeweb/keeweb.git
option to show app logs
This commit is contained in:
parent
4d1e2fbee8
commit
466c0a24d1
|
@ -10,6 +10,12 @@ var Format = {
|
|||
}
|
||||
return str;
|
||||
},
|
||||
padStr: function(str, len) {
|
||||
while (str.length < len) {
|
||||
str += ' ';
|
||||
}
|
||||
return str;
|
||||
},
|
||||
dtStr: function(dt) {
|
||||
return dt ? this.dStr(dt) + ' ' + this.pad(dt.getHours(), 2) + ':' + this.pad(dt.getMinutes(), 2) +
|
||||
':' + this.pad(dt.getSeconds(), 2) : '';
|
||||
|
|
|
@ -324,10 +324,12 @@ var Locale = {
|
|||
setGenLockCopy: 'Auto-lock on password copy',
|
||||
setGenStorage: 'Storage',
|
||||
setGenAdvanced: 'Advanced',
|
||||
setGenShowAdvanced: 'Show advanced settings (these settings may be dangerous)',
|
||||
setGenDevTools: 'Show dev tools',
|
||||
setGenTryBeta: 'Try beta version for one time',
|
||||
setGenTryBetaWarning: 'Unsaved files',
|
||||
setGenTryBetaWarningBody: 'Please save all files and click this button again',
|
||||
setGenShowAppLogs: 'Show app logs',
|
||||
|
||||
setFilePath: 'File path',
|
||||
setFileStorage: 'This file is opened from {}.',
|
||||
|
|
|
@ -12,6 +12,10 @@ var Level = {
|
|||
All: 5
|
||||
};
|
||||
|
||||
var MaxLogsToSave = 100;
|
||||
|
||||
var lastLogs = [];
|
||||
|
||||
var Logger = function(name, id) {
|
||||
this.prefix = (name ? name + (id ? ':' + id : '') : 'default');
|
||||
this.level = Level.All;
|
||||
|
@ -32,6 +36,7 @@ Logger.prototype.getPrefix = function() {
|
|||
Logger.prototype.debug = function() {
|
||||
arguments[0] = this.getPrefix() + arguments[0];
|
||||
if (this.level > Level.Debug) {
|
||||
Logger.saveLast('debug', arguments);
|
||||
console.debug.apply(console, arguments);
|
||||
}
|
||||
};
|
||||
|
@ -39,6 +44,7 @@ Logger.prototype.debug = function() {
|
|||
Logger.prototype.info = function() {
|
||||
arguments[0] = this.getPrefix() + arguments[0];
|
||||
if (this.level > Level.Info) {
|
||||
Logger.saveLast('info', arguments);
|
||||
console.log.apply(console, arguments);
|
||||
}
|
||||
};
|
||||
|
@ -46,6 +52,7 @@ Logger.prototype.info = function() {
|
|||
Logger.prototype.warn = function() {
|
||||
arguments[0] = this.getPrefix() + arguments[0];
|
||||
if (this.level > Level.Warn) {
|
||||
Logger.saveLast('warn', arguments);
|
||||
console.warn.apply(console, arguments);
|
||||
}
|
||||
};
|
||||
|
@ -53,6 +60,7 @@ Logger.prototype.warn = function() {
|
|||
Logger.prototype.error = function() {
|
||||
arguments[0] = this.getPrefix() + arguments[0];
|
||||
if (this.level > Level.Error) {
|
||||
Logger.saveLast('error', arguments);
|
||||
console.error.apply(console, arguments);
|
||||
}
|
||||
};
|
||||
|
@ -65,6 +73,17 @@ Logger.prototype.getLevel = function() {
|
|||
return this.level;
|
||||
};
|
||||
|
||||
Logger.saveLast = function(level, args) {
|
||||
lastLogs.push({ level: level, args: Array.prototype.slice.call(args) });
|
||||
if (lastLogs.length > MaxLogsToSave) {
|
||||
lastLogs.shift();
|
||||
}
|
||||
};
|
||||
|
||||
Logger.getLast = function() {
|
||||
return lastLogs;
|
||||
};
|
||||
|
||||
Logger.Level = Level;
|
||||
|
||||
module.exports = Logger;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
var Backbone = require('backbone'),
|
||||
SettingsPrvView = require('./settings-prv-view'),
|
||||
SettingsLogsView = require('./settings-logs-view'),
|
||||
Launcher = require('../../comp/launcher'),
|
||||
Updater = require('../../comp/updater'),
|
||||
Format = require('../../util/format'),
|
||||
|
@ -36,8 +37,10 @@ var SettingsGeneralView = Backbone.View.extend({
|
|||
'click .settings__general-download-update-btn': 'downloadUpdate',
|
||||
'click .settings__general-update-found-btn': 'installFoundUpdate',
|
||||
'change .settings__general-prv-check': 'changeStorageEnabled',
|
||||
'click .settings__general-show-advanced': 'showAdvancedSettings',
|
||||
'click .settings__general-dev-tools-link': 'openDevTools',
|
||||
'click .settings__general-try-beta-link': 'tryBeta'
|
||||
'click .settings__general-try-beta-link': 'tryBeta',
|
||||
'click .settings__general-show-logs-link': 'showLogs'
|
||||
},
|
||||
|
||||
views: {},
|
||||
|
@ -266,6 +269,11 @@ var SettingsGeneralView = Backbone.View.extend({
|
|||
}
|
||||
},
|
||||
|
||||
showAdvancedSettings: function() {
|
||||
this.$el.find('.settings__general-show-advanced, .settings__general-advanced').toggleClass('hide');
|
||||
this.scrollToBottom();
|
||||
},
|
||||
|
||||
openDevTools: function() {
|
||||
if (Launcher) {
|
||||
Launcher.openDevTools();
|
||||
|
@ -281,6 +289,15 @@ var SettingsGeneralView = Backbone.View.extend({
|
|||
} else {
|
||||
location.href = Links.BetaWebApp;
|
||||
}
|
||||
},
|
||||
|
||||
showLogs: function() {
|
||||
new SettingsLogsView({ el: this.$el.find('.settings__general-advanced') }).render();
|
||||
this.scrollToBottom();
|
||||
},
|
||||
|
||||
scrollToBottom: function() {
|
||||
this.$el.closest('.scroller').scrollTop(this.$el.height());
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
'use strict';
|
||||
|
||||
var Backbone = require('backbone'),
|
||||
Logger = require('../../util/logger'),
|
||||
Format = require('../../util/format');
|
||||
|
||||
var SettingsLogView = Backbone.View.extend({
|
||||
template: require('templates/settings/settings-logs-view.hbs'),
|
||||
|
||||
render: function() {
|
||||
var logs = Logger.getLast().map(function(item) {
|
||||
return {
|
||||
level: item.level,
|
||||
msg: '[' + Format.padStr(item.level.toUpperCase(), 5) + '] ' + item.args.join(' ')
|
||||
};
|
||||
});
|
||||
this.renderTemplate({ logs: logs });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = SettingsLogView;
|
|
@ -114,4 +114,15 @@
|
|||
&__general-prv {
|
||||
margin-bottom: $base-padding-v;
|
||||
}
|
||||
&__logs {
|
||||
@include user-select(text);
|
||||
margin-top: $base-padding-v;
|
||||
&-log {
|
||||
margin: 0;
|
||||
&--debug { color: $white; opacity: .8; }
|
||||
&--info { color: $white; }
|
||||
&--warn { color: $yellow; }
|
||||
&--error { color: $red; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ body {
|
|||
background-color: background-color();
|
||||
}
|
||||
font-family: $base-font-family;
|
||||
font-feature-settings: "kern", "liga";
|
||||
font-feature-settings: "kern", "liga 0";
|
||||
font-size: 1rem;
|
||||
line-height: $base-line-height;
|
||||
}
|
||||
|
|
|
@ -128,9 +128,13 @@
|
|||
<div class="settings__general-prv-wrap settings__general-{{prv.name}} {{#ifeq prv.enabled false}}hide{{/ifeq}}"></div>
|
||||
{{/each}}
|
||||
|
||||
{{#if devTools}}
|
||||
<h2>{{res 'setGenAdvanced'}}</h2>
|
||||
<button class="btn-silent settings__general-dev-tools-link">{{res 'setGenDevTools'}}</button>
|
||||
<button class="btn-silent settings__general-try-beta-link">{{res 'setGenTryBeta'}}</button>
|
||||
{{/if}}
|
||||
<a class="settings__general-show-advanced">{{res 'setGenShowAdvanced'}}</a>
|
||||
<div class="settings__general-advanced hide">
|
||||
{{#if devTools}}
|
||||
<button class="btn-silent settings__general-dev-tools-link">{{res 'setGenDevTools'}}</button>
|
||||
<button class="btn-silent settings__general-try-beta-link">{{res 'setGenTryBeta'}}</button>
|
||||
{{/if}}
|
||||
<button class="btn-silent settings__general-show-logs-link">{{res 'setGenShowAppLogs'}}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<div class="settings__logs">
|
||||
{{#each logs as |log|}}
|
||||
<pre class="settings__logs-log settings__logs-log--{{level}}">{{msg}}</pre>
|
||||
{{/each}}
|
||||
</div>
|
|
@ -11,6 +11,7 @@ Auto-type, ui improvements
|
|||
`+` high contrast theme
|
||||
`+` ability to increase font size
|
||||
`+` improved start page ux on mobile
|
||||
`+` option to show app logs
|
||||
`-` prevent second app instance on windows
|
||||
`*` don't check updates at startup
|
||||
|
||||
|
|
Loading…
Reference in New Issue