Wrap console
by Chris Watson
HTML
<pre id="console"></pre>
CSS
body {
background: #000;
}
#console {
margin: 0.5em;
font-family: monospace;
font-size: 150%;
}
.line {
margin: 0.5em 0;
}
.err {
color: #f00;
}
.log {
color: #09f;
}
.warn {
color: #ee0;
}
JavaScript
(function (w) {
w.onerror = function(e) { console.error(e); };
debugger;
var _c = w.console;
var $console = $('#console');
console.clear();
function combine(fn, ctx, extraFn, extraCtx) {
return function () {
fn.apply(ctx, arguments);
extraFn.apply(extraCtx, arguments);
}
}
function write() {
var args = Array.prototype.map.call(arguments, String);
var className = args.shift();
var text = args.join(' ');
$('<div/>', { text: text, class: className + ' line'}).appendTo($console);
}
_c.log = combine(_c.log, _c, write.bind(null, 'log'));
_c.warn = combine(_c.warn, _c, write.bind(null, 'warn'));
_c.error = combine(_c.error, _c, write.bind(null, 'err'));
// Testing addon -----------------------------------
w.test = function test(desc, fn) {
try {
fn();
console.log('✓ ' + desc);
} catch (e) {
console.error('✗ ' + desc);
console.error(' ' + e.message);
}
console.log(' ');
}
w.assert = function assert(cond) {
if (!cond) {
throw new Error('expected ' + cond + ' to be truthy');
}
}
})(this);
// Test --------------------------------------------
test('test fails', function () {
assert(undefined);
});
test('test passes', function () {
assert(true);
});
console.log('foo');
console.log('undefined:', undefined);
console.warn('bar');
throw 'baz';