trace.js
115 lines
| 2.8 KiB
| application/javascript
|
JavascriptLexer
|
|
r0 | define(["../text/format"], function (format) { | |
| 'use strict'; | |||
| var listeners = []; | |||
| var channels = {}; | |||
| var Trace = function (name) { | |||
| this.name = name; | |||
| this._subscribers = []; | |||
| }; | |||
| Trace.prototype.debug = function () { | |||
| if (Trace.level >= 4) | |||
| this.notify("debug", format.apply(null, arguments)); | |||
| }; | |||
| Trace.prototype.log = function () { | |||
| if (Trace.level >= 3) | |||
| this.notify("log", format.apply(null, arguments)); | |||
| }; | |||
| Trace.prototype.warn = function () { | |||
| if (Trace.level >= 2) | |||
| this.notify("warn", format.apply(null, arguments)); | |||
| }; | |||
| Trace.prototype.error = function () { | |||
| if (Trace.level >= 1) | |||
| this.notify("error", format.apply(null, arguments)); | |||
| }; | |||
| Trace.prototype.notify = function (name, msg) { | |||
| var me = this; | |||
| me._subscribers.forEach(function (cb) { | |||
| cb(me, name, msg); | |||
| }); | |||
| }; | |||
| Trace.prototype.subscribe = function (cb) { | |||
| this._subscribers.push(cb); | |||
| }; | |||
| Trace.prototype.toString = function () { | |||
| return this.name; | |||
| }; | |||
| Trace.createChannel = function (type, name, cb) { | |||
| var chId = name; | |||
| if (channels[chId]) | |||
| return channels[chId]; | |||
| var channel = new type(chId); | |||
| channels[chId] = channel; | |||
| Trace._onNewChannel(chId, channel); | |||
| cb(channel); | |||
| }; | |||
| Trace._onNewChannel = function (chId, ch) { | |||
| listeners.forEach(function (listener) { | |||
| listener(chId, ch); | |||
| }); | |||
| }; | |||
| Trace.on = function (filter, cb) { | |||
| if (arguments.length == 1) { | |||
| cb = filter; | |||
| filter = undefined; | |||
| } | |||
| var d, test; | |||
| if (filter instanceof RegExp) { | |||
| test = function (chId) { | |||
| return filter.test(chId); | |||
| }; | |||
| } else if (filter instanceof Function) { | |||
| test = filter; | |||
| } else if (filter) { | |||
| test = function (chId) { | |||
| return chId == filter; | |||
| }; | |||
| } | |||
| if (test) { | |||
| d = function(chId, ch) { | |||
| if(test(chId)) | |||
| ch.subscribe(cb); | |||
| }; | |||
| } else { | |||
| d = function(chId, ch) { | |||
| ch.subscribe(cb); | |||
| }; | |||
| } | |||
| listeners.push(d); | |||
| for(var chId in channels) | |||
| d(chId,channels[chId]); | |||
| }; | |||
| Trace.load = function (id, require, cb) { | |||
| if (id) | |||
| Trace.createChannel(Trace, id, cb); | |||
| else if (require.module && require.module.mid) | |||
| Trace.createChannel(Trace, require.module.mid, cb); | |||
| else | |||
| require(['module'], function (module) { | |||
| Trace.createChannel(Trace, module && module.id, cb); | |||
| }); | |||
| }; | |||
| Trace.dynamic = true; | |||
| Trace.level = 4; | |||
| return Trace; | |||
| }); |
