Skip to content

Instantly share code, notes, and snippets.

@fatihacet
Created October 15, 2011 22:02
Show Gist options
  • Save fatihacet/1290216 to your computer and use it in GitHub Desktop.
Save fatihacet/1290216 to your computer and use it in GitHub Desktop.

Revisions

  1. fatihacet revised this gist Aug 26, 2012. No changes.
  2. fatihacet created this gist Oct 15, 2011.
    45 changes: 45 additions & 0 deletions pubsub-simple.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    var pubsub = {};
    (function(q) {
    var topics = {}, subUid = -1;
    q.subscribe = function(topic, func) {
    if (!topics[topic]) {
    topics[topic] = [];
    }
    var token = (++subUid).toString();
    topics[topic].push({
    token: token,
    func: func
    });
    return token;
    };

    q.publish = function(topic, args) {
    if (!topics[topic]) {
    return false;
    }
    setTimeout(function() {
    var subscribers = topics[topic],
    len = subscribers ? subscribers.length : 0;

    while (len--) {
    subscribers[len].func(topic, args);
    }
    }, 0);
    return true;

    };

    q.unsubscribe = function(token) {
    for (var m in topics) {
    if (topics[m]) {
    for (var i = 0, j = topics[m].length; i < j; i++) {
    if (topics[m][i].token === token) {
    topics[m].splice(i, 1);
    return token;
    }
    }
    }
    }
    return false;
    };
    }(pubsub));