string formatter
by james young
HTML
<div id='output'></div>
JavaScript
var output = document.getElementById('output'),
log,
format;
format = function format() {
var args = arguments[0],
data,
length = args.length,
i,
objects = [],
response,
x;
if (typeof args[0] !== 'string') {
for (i = 0; i < length; i++) {
objects.push(args[i]);
}
response = objects.join(' ');
} else {
i = 1;
data = args[0];
response = data.replace(/%[sdj%]/g, function (match) {
if (match === '%%') {
return '%';
}
if (i >= length) {
return match;
}
switch (match) {
case '%s':
return String(args[i++]);
case '%d':
return Number(args[i++]);
case '%j':
try {
return JSON.stringify(args[i++]);
} catch (error) {
return '[Circular]';
}
break;
default:
return match;
}
});
for (x = args[i]; i < length; x = args[++i]) {
response += ' ' + x;
}
}
return response;
};
log = function log() {
output.innerText = format(arguments);
};
log('hello %s %j', 'world', {foo: 'bar'})