option to show app logs

This commit is contained in:
antelle 2016-06-04 11:31:06 +03:00
parent 4d1e2fbee8
commit 466c0a24d1
10 changed files with 92 additions and 6 deletions

View File

@ -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) : '';

View File

@ -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 {}.',

View File

@ -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;

View File

@ -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());
}
});

View File

@ -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;

View File

@ -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; }
}
}
}

View File

@ -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;
}

View File

@ -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>

View File

@ -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>

View File

@ -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