mirror of
https://github.com/liriliri/eruda.git
synced 2026-02-02 09:49:00 +08:00
Fix: Repeat log
This commit is contained in:
@@ -16,6 +16,7 @@ export default class Log
|
||||
this.type = type;
|
||||
this.args = args;
|
||||
this.idx = idx;
|
||||
this.count = 1;
|
||||
this.displayHeader = displayHeader;
|
||||
this.ignoreFilter = false;
|
||||
|
||||
@@ -27,6 +28,31 @@ export default class Log
|
||||
|
||||
this._formatMsg();
|
||||
}
|
||||
addCount()
|
||||
{
|
||||
this.count++;
|
||||
let count = this.count,
|
||||
msg = this.formattedMsg;
|
||||
if (count === 2) msg = msg.replace('eruda-count eruda-hidden', 'eruda-count');
|
||||
msg = msg.replace(/data-mark="count">\d*/, 'data-mark="count">' + count);
|
||||
|
||||
this.formattedMsg = msg;
|
||||
|
||||
return this;
|
||||
}
|
||||
updateTime(time)
|
||||
{
|
||||
let msg = this.formattedMsg;
|
||||
|
||||
if (this.time)
|
||||
{
|
||||
msg = msg.replace(/data-mark="time">(.*?)</, `data-mark="time">${time}<`);
|
||||
this.time = time;
|
||||
this.formattedMsg = msg;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
_needSrc()
|
||||
{
|
||||
let {type, args} = this;
|
||||
@@ -94,6 +120,7 @@ export default class Log
|
||||
break;
|
||||
}
|
||||
|
||||
this.value = msg;
|
||||
msg = render({msg, type, icon, idx, displayHeader, time, from});
|
||||
|
||||
delete this.args;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<li>
|
||||
{{#if displayHeader}}
|
||||
<div class="eruda-header">
|
||||
{{time}} {{from}}
|
||||
<span data-mark="time">{{time}}</span> <span>{{from}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="eruda-{{type}} eruda-log-item" data-idx="{{idx}}" data-type="{{type}}">
|
||||
@@ -10,7 +10,7 @@
|
||||
<span class="eruda-icon eruda-icon-{{icon}}"></span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if displayTimes}}<div class="eruda-times">{{times}}</div>{{/if}}
|
||||
<div class="eruda-count eruda-hidden" data-mark="count"></div>
|
||||
<div class="eruda-log-content-wrapper">
|
||||
<div class="eruda-log-content">
|
||||
{{{msg}}}
|
||||
|
||||
@@ -15,6 +15,7 @@ export default class Logger extends util.Emitter
|
||||
this._parent = parent;
|
||||
this._logs = [];
|
||||
this._timer = {};
|
||||
this._lastLog = {};
|
||||
this._filter = 'all';
|
||||
this._maxNum = 'infinite';
|
||||
this._displayHeader = false;
|
||||
@@ -33,7 +34,6 @@ export default class Logger extends util.Emitter
|
||||
if (util.isNum(val) && logs.length > val)
|
||||
{
|
||||
this._logs = logs.slice(logs.length - val);
|
||||
this._isUpdated = true;
|
||||
this.render();
|
||||
}
|
||||
}
|
||||
@@ -80,6 +80,7 @@ export default class Logger extends util.Emitter
|
||||
clear()
|
||||
{
|
||||
this._logs = [];
|
||||
this._lastLog = {};
|
||||
|
||||
return this.render();
|
||||
}
|
||||
@@ -161,7 +162,8 @@ export default class Logger extends util.Emitter
|
||||
}
|
||||
insert(type, args)
|
||||
{
|
||||
let logs = this._logs;
|
||||
let logs = this._logs,
|
||||
$el = this._$el;
|
||||
|
||||
let options = util.isStr(type) ? {type, args} : type;
|
||||
util.extend(options, {
|
||||
@@ -170,8 +172,32 @@ export default class Logger extends util.Emitter
|
||||
});
|
||||
|
||||
let log = new Log(options);
|
||||
logs.push(log);
|
||||
this.render();
|
||||
|
||||
let lastLog = this._lastLog;
|
||||
if (log.type !== 'html' &&
|
||||
lastLog.type === log.type &&
|
||||
lastLog.value === log.value)
|
||||
{
|
||||
lastLog.addCount();
|
||||
if (log.time) lastLog.updateTime(log.time);
|
||||
$el.find('li').last().remove();
|
||||
log = lastLog;
|
||||
} else
|
||||
{
|
||||
logs.push(log);
|
||||
this._lastLog = log;
|
||||
}
|
||||
|
||||
if (this._maxNum !== 'infinite' && logs.length >= this._maxNum)
|
||||
{
|
||||
$el.find('li').first().remove();
|
||||
logs.shift();
|
||||
}
|
||||
|
||||
if (this._filterLog(log) && this._parent.active) $el.append(log.formattedMsg);
|
||||
|
||||
this.emit('insert', log);
|
||||
this.scrollToBottom();
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -187,17 +213,31 @@ export default class Logger extends util.Emitter
|
||||
|
||||
if (filter === 'all') return logs;
|
||||
|
||||
var isRegexp = util.isRegExp(filter),
|
||||
let isRegExp = util.isRegExp(filter),
|
||||
isFn = util.isFn(filter);
|
||||
|
||||
return logs.filter(val =>
|
||||
return logs.filter(log =>
|
||||
{
|
||||
if (isFn) return filter(val);
|
||||
if (isRegexp) return filter.test(util.stripHtmlTag(val.formattedMsg));
|
||||
if (isFn) return filter(log);
|
||||
if (isRegExp) return filter.test(util.stripHtmlTag(log.formattedMsg));
|
||||
|
||||
return val.ignoreFilter || val.type === filter;
|
||||
return log.ignoreFilter || log.type === filter;
|
||||
});
|
||||
}
|
||||
_filterLog(log)
|
||||
{
|
||||
let filter = this._filter;
|
||||
|
||||
if (filter === 'all') return true;
|
||||
|
||||
let isRegExp = util.isRegExp(filter),
|
||||
isFn = util.isFn(filter);
|
||||
|
||||
if (isFn) return filter(log);
|
||||
if (isRegExp) return filter.test(util.stripHtmlTag(log.formattedMsg));
|
||||
|
||||
return log.ignoreFilter || log.type === filter;
|
||||
}
|
||||
_loadJs(name)
|
||||
{
|
||||
util.loadJs(libraries[name], (result) =>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
a {
|
||||
color: $blue !important;
|
||||
}
|
||||
.times, .icon-container {
|
||||
.count, .icon-container {
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
}
|
||||
@@ -47,7 +47,7 @@
|
||||
color: $yellow-dark;
|
||||
}
|
||||
}
|
||||
.times {
|
||||
.count {
|
||||
background: $blue;
|
||||
padding: 2px 4px;
|
||||
color: #fff;
|
||||
@@ -91,7 +91,7 @@
|
||||
color: $gray-dark;
|
||||
padding-left: 1.2em;
|
||||
}
|
||||
.times {
|
||||
.count {
|
||||
background: $red;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,6 +79,15 @@ describe('substitution', function ()
|
||||
tool.clear().log('%cblue%cgreen', 'color:blue', 'color:green');
|
||||
expect($tool.find('.eruda-log')).toContainHtml('<span style="color:blue">blue</span><span style="color:green">green</span>');
|
||||
});
|
||||
|
||||
it('Repeat log', function ()
|
||||
{
|
||||
tool.clear();
|
||||
for (let i = 0; i < 10; i++) tool.log(1);
|
||||
let $log = $tool.find('.eruda-log-item');
|
||||
expect($log).toHaveLength(1);
|
||||
expect($log.find('.eruda-count')).toContainText('10');
|
||||
});
|
||||
});
|
||||
|
||||
describe('table', function ()
|
||||
@@ -157,5 +166,7 @@ describe('filter', function ()
|
||||
tool.filter(/test2/);
|
||||
expect($tool.find('.eruda-log-item')).toHaveLength(1);
|
||||
expect($tool.find('.eruda-log')).toContainText('test2');
|
||||
|
||||
tool.filter('all');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user