Console Log Wrapper
/*
log function for easy logging with multi parameter support
and printf like string substitution: check usage at bottom
Useful for iphone / ipad simulator where multi params not natively supported
Now also supports logging of DOM objects in iOS
*/
window.log = (function(){
var dom_log = function(obj){
var name = obj.nodeName.toLowerCase(),
fE = Array.prototype.forEach,
stringi = "<" + name;
fE.call( obj.attributes, function(at){
stringi += " " + at.nodeName + "='" + at.nodeValue + "'";
});
return stringi += ">...<" + name + ">";
};
return function (ob){
var args = Array.prototype.slice.call(arguments);
args.forEach(function(el,i){
if(el.nodeType){ args[i] = dom_log(el); }
});
var prms = args.slice(1), lo = [];
if( ob && ob.substr && (ss = ob.match(/%s/g)) && (pl = prms.length)){
var i, il = ss.length > pl ? pl : ss.length;
for(i = 0 ; i < il ; i++ ){ ob = ob.replace(/%s/,prms[i]); }
lo.push(ob);
Array.prototype.push.apply(lo,prms.slice(il));
} else { lo = args; }
console.log(lo);
};
})();
/*--------------/
Manified
/--------------*/
window.log=function(a){var e=Array.prototype.slice.call(arguments);e.forEach(function(a,b){if(a.nodeType){var c=e,d;d=a.nodeName.toLowerCase();var f="<"+d;Array.prototype.forEach.call(a.attributes,function(a){f+=" "+a.nodeName+"='"+a.nodeValue+"'"});d=f+=">...<"+d+">";c[b]=d}});var g=e.slice(1),b=[];if(a&&a.substr&&(ss=a.match(/%s/g))&&(pl=g.length)){var c,h=ss.length>pl?pl:ss.length;for(c=0;c<h;c++)a=a.replace(/%s/,g[c]);b.push(a);Array.prototype.push.apply(b,g.slice(h))}else b=e;console.log(b)};
/*---------------/
USAGE
/--------------*/
log("Ajax request %s returns %s data",'http://h5bp.com/',data);
// Logs: Ajax request http://h5bp.com/ returns "<html>"
// Or simply log everything
log(name, info, data);
// Log Dome Objects
$('a').on('click',function(){
$(this).addClass('test');
log("Node %s after adding class",this);
});
// Logs: Node <a href='#code' class='test'>...<a> after adding class