46 lines
1,019 B
JavaScript
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 );
|