Fix: Repeat log

This commit is contained in:
surunzi
2016-08-26 17:12:50 +08:00
parent c3f2dae3ee
commit 74350ff64b
5 changed files with 92 additions and 14 deletions

View File

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

View File

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

View File

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

View File

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

View File

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