| // ========================================== |
| // Copyright 2013 Twitter, Inc |
| // Licensed under The MIT License |
| // http://opensource.org/licenses/MIT |
| // ========================================== |
| |
| "use strict"; |
| |
| define( |
| |
| [ |
| './compose', |
| './utils' |
| ], |
| |
| function (compose, util) { |
| |
| var actionSymbols = { |
| on:'<-', |
| trigger: '->', |
| off: 'x ' |
| }; |
| |
| function elemToString(elem) { |
| var tagStr = elem.tagName ? elem.tagName.toLowerCase() : elem.toString(); |
| var classStr = elem.className ? "." + (elem.className) : ""; |
| var result = tagStr + classStr; |
| return elem.tagName ? ['\'', '\''].join(result) : result; |
| } |
| |
| function log(action, component, eventArgs) { |
| |
| var name, elem, fn, fnName, logFilter, toRegExp, actionLoggable, nameLoggable; |
| |
| if (typeof eventArgs[eventArgs.length-1] == 'function') { |
| fn = eventArgs.pop(); |
| fn = fn.unbound || fn; //use unbound version if any (better info) |
| } |
| |
| if (typeof eventArgs[eventArgs.length - 1] == 'object') { |
| eventArgs.pop(); //trigger data arg - not logged right now |
| } |
| |
| if (eventArgs.length == 2) { |
| elem = eventArgs[0]; |
| name = eventArgs[1]; |
| } else { |
| elem = component.$node[0]; |
| name = eventArgs[0]; |
| } |
| |
| if (window.DEBUG && window.DEBUG.enabled) { |
| logFilter = DEBUG.events.logFilter; |
| |
| // no regex for you, actions... |
| actionLoggable = logFilter.actions=="all" || (logFilter.actions.indexOf(action) > -1); |
| // event name filter allow wildcards or regex... |
| toRegExp = function(expr) { |
| return expr.test ? expr : new RegExp("^" + expr.replace(/\*/g, ".*") + "$"); |
| }; |
| nameLoggable = |
| logFilter.eventNames=="all" || |
| logFilter.eventNames.some(function(e) {return toRegExp(e).test(name)}); |
| |
| if (actionLoggable && nameLoggable) { |
| console.info( |
| actionSymbols[action], |
| action, |
| '[' + name + ']', |
| elemToString(elem), |
| component.constructor.toString(), |
| fn && (fnName = fn.name || fn.displayName) && '-> ' + fnName |
| ); |
| } |
| } |
| } |
| |
| |
| function withLogging() { |
| this.before('trigger', function() { |
| log('trigger', this, util.toArray(arguments)); |
| }); |
| this.before('on', function() { |
| log('on', this, util.toArray(arguments)); |
| }); |
| this.before('off', function(eventArgs) { |
| log('off', this, util.toArray(arguments)); |
| }); |
| } |
| |
| return withLogging; |
| } |
| ); |