You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.1 KiB
100 lines
3.1 KiB
// ========================================== |
|
// Copyright 2013 Twitter, Inc |
|
// Licensed under The MIT License |
|
// http://opensource.org/licenses/MIT |
|
// ========================================== |
|
|
|
define( |
|
|
|
[ |
|
'./utils' |
|
], |
|
|
|
function(utils) { |
|
'use strict'; |
|
|
|
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) { |
|
if (!window.DEBUG || !window.DEBUG.enabled) return; |
|
var name, eventType, elem, fn, payload, logFilter, toRegExp, actionLoggable, nameLoggable, info; |
|
|
|
if (typeof eventArgs[eventArgs.length-1] == 'function') { |
|
fn = eventArgs.pop(); |
|
fn = fn.unbound || fn; // use unbound version if any (better info) |
|
} |
|
|
|
if (eventArgs.length == 1) { |
|
elem = component.$node[0]; |
|
eventType = eventArgs[0]; |
|
} else if ((eventArgs.length == 2) && typeof eventArgs[1] == 'object' && !eventArgs[1].type) { |
|
//2 args, first arg is not elem |
|
elem = component.$node[0]; |
|
eventType = eventArgs[0]; |
|
if (action == "trigger") { |
|
payload = eventArgs[1]; |
|
} |
|
} else { |
|
//2+ args, first arg is elem |
|
elem = eventArgs[0]; |
|
eventType = eventArgs[1]; |
|
if (action == "trigger") { |
|
payload = eventArgs[2]; |
|
} |
|
} |
|
|
|
name = typeof eventType == 'object' ? eventType.type : eventType; |
|
|
|
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) { |
|
info = [actionSymbols[action], action, '[' + name + ']']; |
|
payload && info.push(payload); |
|
info.push(elemToString(elem)); |
|
info.push(component.constructor.describe.split(' ').slice(0,3).join(' ')); |
|
console.groupCollapsed && action == 'trigger' && console.groupCollapsed(action, name); |
|
console.info.apply(console, info); |
|
} |
|
} |
|
|
|
function withLogging() { |
|
this.before('trigger', function() { |
|
log('trigger', this, utils.toArray(arguments)); |
|
}); |
|
if (console.groupCollapsed) { |
|
this.after('trigger', function() { |
|
console.groupEnd(); |
|
}); |
|
} |
|
this.before('on', function() { |
|
log('on', this, utils.toArray(arguments)); |
|
}); |
|
this.before('off', function() { |
|
log('off', this, utils.toArray(arguments)); |
|
}); |
|
} |
|
|
|
return withLogging; |
|
} |
|
);
|
|
|