Source Code for file /OpenAjax/AoAoA.js

// -----
// aoaoa.js: Aspects Of Ajax Open Ajax compatible hub implementation
// This implementation is cut out of the open source AjaxEngine project,
// that includes a implementation inside the Javascript Common behaviors Library (jcl.js).
// See http://www.mathertel.de/AJAXEngine/controls/jcl.js
// Copyright (c) by Matthias Hertel, http://www.mathertel.de
// This work is licensed under a BSD style license. See http://www.mathertel.de/License.aspx
// More information on: http://ajaxaspects.blogspot.com/ and http://ajaxaspekte.blogspot.com/
// -----
// 06.06.2007 created

if (typeof(window.OpenAjax) == "undefined") {
  // setup the OpenAjax framework - hub
  window.OpenAjax = {};
} // if

if (typeof(OpenAjax.hub) == "undefined") {
  // a hub implementation
  OpenAjax.hub = {
    implementer: "http://www.mathertel.de/OpenAjax",
    implVersion: "0.4",
    specVersion: "0.5",
    implExtraData: {},

    // ----- library management -----

    // the list of libraries that have registered
    libraries: {},

    // Registers an Ajax library with the OpenAjax Hub. 
    registerLibrary: function (p, u, v, e) {
      var entry = { prefix: p, namespaceURI: u, version: v, extraData: e };
      this.libraries[p] = entry;
      this.publish("org.openajax.hub.registerLibrary", entry);
    },

    // Unregisters an Ajax library with the OpenAjax Hub.
    unregisterLibrary: function (p) {
      var entry = this.libraries[p];
      this.publish("org.openajax.hub.unregisterLibrary", entry);
      if (entry != null)
        this.libraries[p] = null;
    },

    // ----- event management -----

    _regs: {},
    _regsId: 0,

    /// name, callback, scope, data, filter
    subscribe: function (n, c, s, d, f) {
      var h = this._regsId;

      s = s || window;

      // treating upper/lowercase equal is not clearly defined, but true with domain names.
      var rn = n.toLocaleLowerCase();

      // build a regexp pattern that will match the event names
      rn = rn.replace(/\*\*$/, "\S{0,}").replace(/\./g, "\\.").replace(/\*/g, "[^.]*");

      var entry = { id: h, n: rn, c: c, s: s, d: d, f: f };
      this._regs[h] = entry;

      this._regsId++;
      return (h);
    }, // subscribe


    unsubscribe: function (h) {
      this._regs[h] = null;
    }, // unsubscribe


    publish: function (n, data) {
      n = n.toLocaleLowerCase();
      for (var h in this._regs) {
        var r = this._regs[h];
        if (r && (n.match(r.n))) {
          var ff = r.f; if (typeof (ff) == "string") ff = r.s[ff];
          var fc = r.c; if (typeof (fc) == "string") fc = r.s[fc];
          if ((ff == null) || (ff.call(r.s, n, data, r.d)))
            fc.call(r.s, n, data, r.d);
        } // if
      } // for
    } // publish

  }; // OpenAjax.hub
  OpenAjax.hub.registerLibrary("aoa", "http://www.mathertel.de/OpenAjax", "0.4", {});

} // if (! hub)

// ----- End -----


This page is part of the http://www.mathertel.de/ web site.