| /* |
| Copyright (c) 2004-2005, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| dojo.require("dojo.event"); |
| dojo.provide("dojo.event.topic"); |
| |
| dojo.event.topic = new function(){ |
| this.topics = {}; |
| |
| this.getTopic = function(topicName){ |
| if(!this.topics[topicName]){ |
| this.topics[topicName] = new this.TopicImpl(topicName); |
| } |
| return this.topics[topicName]; |
| } |
| |
| this.registerPublisher = function(topic, obj, funcName){ |
| var topic = this.getTopic(topic); |
| topic.registerPublisher(obj, funcName); |
| } |
| |
| this.subscribe = function(topic, obj, funcName){ |
| var topic = this.getTopic(topic); |
| topic.subscribe(obj, funcName); |
| } |
| |
| this.unsubscribe = function(topic, obj, funcName){ |
| var topic = this.getTopic(topic); |
| topic.unsubscribe(obj, funcName); |
| } |
| |
| this.publish = function(topic, message){ |
| var topic = this.getTopic(topic); |
| // if message is an array, we treat it as a set of arguments, |
| // otherwise, we just pass on the arguments passed in as-is |
| var args = []; |
| if((arguments.length == 2)&&(message.length)&&(typeof message != "string")){ |
| args = message; |
| }else{ |
| var args = []; |
| for(var x=1; x<arguments.length; x++){ |
| args.push(arguments[x]); |
| } |
| } |
| topic.sendMessage.apply(topic, args); |
| } |
| } |
| |
| dojo.event.topic.TopicImpl = function(topicName){ |
| this.topicName = topicName; |
| var self = this; |
| |
| self.subscribe = function(listenerObject, listenerMethod){ |
| var tf = listenerMethod||listenerObject; |
| var to = (!listenerMethod) ? dj_global : listenerObject; |
| dojo.event.kwConnect({ |
| srcObj: self, |
| srcFunc: "sendMessage", |
| adviceObj: to, |
| adviceFunc: tf |
| }); |
| } |
| |
| self.unsubscribe = function(listenerObject, listenerMethod){ |
| var tf = (!listenerMethod) ? listenerObject : listenerMethod; |
| var to = (!listenerMethod) ? null : listenerObject; |
| dojo.event.kwDisconnect({ |
| srcObj: self, |
| srcFunc: "sendMessage", |
| adviceObj: to, |
| adviceFunc: tf |
| }); |
| } |
| |
| self.registerPublisher = function(publisherObject, publisherMethod){ |
| dojo.event.connect(publisherObject, publisherMethod, self, "sendMessage"); |
| } |
| |
| self.sendMessage = function(message){ |
| // The message has been propagated |
| } |
| } |
| |