vinnizworld
6/9/2012 - 3:57 AM

Console Log Wrapper

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