home *** CD-ROM | disk | FTP | other *** search
/ Minami 83 / MINAMI83.iso / Extra / DivXInstaller.exe / $PLUGINSDIR / GoogleToolbarFirefox.msi / xpi / amulet-jslib / google3 / eventregistrar.js < prev    next >
Text File  |  2006-08-07  |  2KB  |  49 lines

  1. function EventRegistrar(eventTypes) {
  2. this.eventTypes = [];
  3. this.listeners_ = {};          // Listener sets, index by event type
  4. if (eventTypes instanceof Array) {
  5. var events = eventTypes;
  6. } else if (typeof eventTypes == "object") {
  7. var events = [];
  8. for (var e in eventTypes)
  9. events.push(eventTypes[e]);
  10. } else {
  11. throw new Error("Unrecognized init parameter to EventRegistrar");
  12. }
  13. for (var i = 0; i < events.length; i++) {
  14. this.eventTypes.push(events[i]);          // Copy in case caller mutates
  15. this.listeners_[events[i]] =
  16. new ListDictionary(events[i] + "Listeners");
  17. }
  18. }
  19. EventRegistrar.prototype.isKnownEventType = function(eventType) {
  20. for (var i=0; i < this.eventTypes.length; i++)
  21. if (eventType == this.eventTypes[i])
  22. return eventType;
  23. return false;
  24. }
  25. EventRegistrar.prototype.addEventType = function(eventType) {
  26. if (this.isKnownEventType(eventType))
  27. throw new Error("Event type already known: " + eventType);
  28. this.eventTypes.push(eventType);
  29. this.listeners_[eventType] = new ListDictionary(eventType + "Listeners");
  30. }
  31. EventRegistrar.prototype.registerListener = function(eventType, listener) {
  32. if (this.isKnownEventType(eventType) === false)
  33. throw new Error("Unknown event type: " + eventType);
  34. this.listeners_[eventType].addMember(listener);
  35. }
  36. EventRegistrar.prototype.removeListener = function(eventType, listener) {
  37. if (this.isKnownEventType(eventType) === false)
  38. throw new Error("Unknown event type: " + eventType);
  39. this.listeners_[eventType].removeMember(listener);
  40. }
  41. EventRegistrar.prototype.fire = function(eventType, e) {
  42. if (this.isKnownEventType(eventType) === false)
  43. throw new Error("Unknown event type: " + eventType);
  44. var invoke = function(listener) {
  45. listener(e);
  46. };
  47. this.listeners_[eventType].forEach(invoke);
  48. }
  49.