Last active
December 25, 2015 18:19
-
-
Save Kein1945/d499c5c9027f719cc9ae to your computer and use it in GitHub Desktop.
Simple function that allow see events flow in dev console with stack trace and data.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var bind_logging = (function(strategies, loggers) { | |
var log_always = '#bind_logging' == document.location.hash; | |
var canWeLogThis = function(eventflow) { | |
return _.every(['on', 'off', 'trigger'], function(n){ return eventflow && _.isFunction(eventflow[n]) }); | |
}, | |
canWeLogHere = function() { | |
return _.every(['groupCollapsed', 'groupEnd', 'log', 'trace'], function(n){ return console && _.isFunction(console[n]) }); | |
}, | |
getLogger = function(ctx, args) { | |
for(var i = 0; i < strategies.length; i++) { | |
var logger = strategies[i](ctx, args, loggers); | |
if(logger) return logger; | |
} | |
return function(ctx, arguments){ console.log("Uncatched event flow: "+args[0], ctx, args.slice(1)) }; | |
}, | |
shouldWeLogNow = function() { | |
return log_always || '#bind_logging' == document.location.hash; | |
}; | |
this.bind_logging = function(eventflow, name) { | |
if(!canWeLogHere()) return false; | |
if(canWeLogThis(eventflow)) { | |
eventflow.on('all', function() { | |
if(!shouldWeLogNow()) return; | |
var logger = getLogger(this, _.toArray(arguments)) | |
, args = _.toArray(arguments); | |
args.unshift(name); | |
logger.apply(this, args); | |
}) | |
return true; | |
} else { | |
throw new Error("Can't observer for " + name); | |
console.log(eventflow); | |
} | |
return false; | |
}; | |
return this.bind_logging; | |
})([ | |
function(ctx, args, loggers) { | |
return _.isArray(ctx.models) && loggers.collection; | |
}, | |
function(ctx, args, loggers) { | |
return _.isFunction(ctx.isValid) && loggers.model; | |
}, | |
function(ctx, args, loggers) { | |
return loggers.defaultLogger; | |
} | |
], { | |
collection: function(name, event_name, model, collection) { | |
if('change' != event_name){ | |
console.groupCollapsed('[] %s : %s', name, event_name); | |
console.log("Arguments: ", _.toArray(arguments).slice(2)); | |
console.trace(); | |
console.groupEnd(); | |
} | |
}, | |
model: function(name, event_name, model, value) { | |
if('change' != event_name){ | |
if('change:' == event_name.substr(0, 7)){ | |
console.groupCollapsed('$ %s : %s = %s', name, event_name.substr(7), value); | |
} else { | |
console.groupCollapsed('$ %s : %s', name, event_name); | |
console.log("Arguments: ", _.toArray(arguments).slice(2)); | |
} | |
console.trace(); | |
console.groupEnd(); | |
} | |
}, | |
defaultLogger: function(name, event_name) { | |
console.groupCollapsed('%s : %s', name, event_name); | |
console.log("Arguments: ", _.toArray(arguments).slice(2)); | |
console.trace(); | |
console.groupEnd(); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage: