jquery/src/channel.js

46 lines
1,019 B
JavaScript

(function( jQuery ) {
var channels = {},
sliceChannel = [].slice;
jQuery.Channel = function( name ) {
var callbacks,
method,
channel = name && channels[ name ];
if ( !channel ) {
callbacks = jQuery.Callbacks();
channel = {
publish: callbacks.fire,
subscribe: callbacks.add,
unsubscribe: callbacks.remove
};
if ( name ) {
channels[ name ] = channel;
}
}
return channel;
};
jQuery.extend({
subscribe: function( id ) {
var channel = jQuery.Channel( id ),
args = sliceChannel.call( arguments, 1 );
channel.subscribe.apply( channel, args );
return {
channel: channel,
args: args
};
},
unsubscribe: function( id ) {
var channel = id && id.channel || jQuery.Channel( id );
channel.unsubscribe.apply( channel, id && id.args ||
sliceChannel.call( arguments, 1 ) );
},
publish: function( id ) {
var channel = jQuery.Channel( id );
channel.publish.apply( channel, sliceChannel.call( arguments, 1 ) );
}
});
})( jQuery );