Publisher.js 654 Bytes
var Class = require('./Class'),
	bind = require('./bind'),
	slice = require('./slice')

module.exports = Class(function() {

	this.init = function() {
		this._subscribers = {}
	}
	
	this.on = this.subscribe = function(signal, fn) {
		var subscribers = this._subscribers[signal]
		if (!subscribers) { subscribers = this._subscribers[signal] = [] }
		subscribers.push(fn)
		return this
	}

	this._publish = function(signal) {
		var args = slice(arguments, 1),
			subscribers = this._subscribers[signal]
		if (!signal || !subscribers) { return this }
		for (var i=0; i<subscribers.length; i++) {
			subscribers[i].apply(this, args)
		}
		return this
	}
})