{"_id":"switchboard","_rev":"9-0f28920a0a08dc7974eff9e7ce428d2b","name":"switchboard","description":"Event listener for the browser and node.js for composite events (i.e., will not trigger until several specified events occur).","dist-tags":{"latest":"1.3.0"},"versions":{"0.0.1":{"name":"switchboard","description":"Dependency chains for events","version":"0.0.1","author":{"name":"Bryn Austin Bellomy","email":"bryn.bellomy@gmail.com"},"main":"index","engines":{"node":">= 0.2.0"},"dependencies":{},"devDependencies":{},"_id":"switchboard@0.0.1","_engineSupported":true,"_npmVersion":"1.0.1rcFINAL","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"e6226058dcc4b66caa2659cd7e7e976e61b4889c","tarball":"https://registry.npmjs.org/switchboard/-/switchboard-0.0.1.tgz","integrity":"sha512-EQlfn6SrdCR9ZfttJXNO20gJgFKTY4rrsQZxBm6nosRbp3xirAESSjnBZD4uz2NlAfwVuQL+LYEdHJLb4xZjww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPn3NvNSPBGBnf21ys0YPAzmJwdsHeub/qfl+PFaKUUAIgSrDpQAFAawDrMBJXuhlcy6H8mkHfp5oquZH3XtoyGF0="}]},"scripts":{}},"1.3.0":{"author":{"name":"bryn austin bellomy","email":"bryn@signals.io","url":"http://signals.io"},"name":"switchboard","description":"Event listener for the browser and node.js for composite events (i.e., will not trigger until several specified events occur).","version":"1.3.0","homepage":"http://github.com/brynbellomy/node-switchboard","keywords":["event","events","eventemitter","eventemitter2","emitter","async","asynchronous","control","flow"],"repository":{"type":"git","url":"git://github.com/brynbellomy/node-switchboard.git"},"main":"./index.js","dependencies":{"eventemitter2":"0.4.x","node-uuid":"1.4.x"},"devDependencies":{},"engines":{"node":"*"},"_id":"switchboard@1.3.0","dist":{"shasum":"93bbd0722dd216af7df6d77ee8c0d1f90d6bf705","tarball":"https://registry.npmjs.org/switchboard/-/switchboard-1.3.0.tgz","integrity":"sha512-l5K3Oh1GScM+ehDdz9hc2qJSHcLcWtNVjx0Rg47SlwMcpiCIXnnxyASKRv1zIH6Cx4qxRmNXieioDgZIwcRJFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICIbuMo1+Pcy2AOS4zzN41aVAu2sS9g1Ng9TNsKjvvEcAiEAleG/590t8+RoT9Xm3uRyxWROGeLFZSgwjDVWJWIb+Xw="}]},"_npmVersion":"1.1.63","_npmUser":{"name":"brynb","email":"bryn.bellomy@gmail.com"},"maintainers":[{"name":"bryn","email":"bryn.bellomy@gmail.com"},{"name":"brynb","email":"bryn.bellomy@gmail.com"}]}},"maintainers":[{"email":"github@sellside.com","name":"jonschlinkert"},{"email":"bryn.bellomy@gmail.com","name":"brynb"},{"email":"bryn.bellomy@gmail.com","name":"bryn"}],"time":{"modified":"2022-06-27T03:01:15.600Z","created":"2011-07-04T06:03:24.026Z","0.0.1":"2011-07-04T06:03:24.204Z","1.3.0":"2012-12-01T01:03:54.557Z"},"author":{"name":"bryn austin bellomy","email":"bryn@signals.io","url":"http://signals.io"},"repository":{"type":"git","url":"git://github.com/brynbellomy/node-switchboard.git"},"homepage":"http://github.com/brynbellomy/node-switchboard","keywords":["event","events","eventemitter","eventemitter2","emitter","async","asynchronous","control","flow"],"readme":"# // switchboard.js\n\nA composite event listener.  Waits for several events to occur before firing the handler.\n\nSwitchboard returns the arguments of each respective `emit` to the specified handler.  These arguments can be named if desired.\n\n## Installing\n\nnode.js:\n\n```sh\nnpm install switchboard\n```\n\nbower:\n\n```sh\nbower install switchboardjs\n```\n\n```html\n<script src=\"components/switchboardjs/index.js\"></script>\n```\n\n## Why do I need this?\n\nSometimes you have to wait for 2 or more things to happen before a certain part\nof your program can move forward.  Let's say you're rendering a bunch of\ntemplates, for example.  You want to do it asynchronously, but it's kind of a\npain to figure out when everything's done without something kludgey (like a\nstatic counter or a jungle of if statements).  **switchboard.js** can hide the\nkludge for you.\n\nFamiliar syntax, too.  Just uses the classic EventEmitter 'on/once' pattern.\nExcept instead of a single event name, you specify an array.\n\n## How to use\n\nYou've got two choices, cowboy.\n\n### 1. Extremely simple way\n\n```javascript\nvar Switchboard = require('switchboard').Switchboard,\n    myEmitter   = new Switchboard();\n\nvar events = ['firstEvent', 'secondEvent', 'thirdEvent'];\n\nmyEmitter.on(events, function(args) {\n  // after calling `myEmitter.emit(e)` for all three events, args is something like:\n  // { 'firstEvent':  [ ... the args ... ],\n  //   'secondEvent': [ ... the args ... ],\n  //   ...\n  // }\n  // etc.\n});\n```\n\n### 2. With a little bit more code, you get your results returned in a dictionary!\n\n```javascript\nvar Switchboard = require('switchboard').Switchboard,\n    myEmitter   = new Switchboard();\n\nvar events = ['firstEvent', 'secondEvent', 'thirdEvent'];\n\nmyEmitter.registerEventArguments({\n  firstEvent: ['err', 'resultA', 'resultB']\n});\n\n// multiple calls to registerEventArguments are a-okay\n// (hint: good for loops or for registering callbacks from\n// within other callbacks)\nmyEmitter.registerEventArguments({\n  secondEvent: ['resultC', 'resultD', 'resultE'],\n  thirdEvent:  ['err', 'myVar', 'someJunk']\n});\n\nmyEmitter.once(events, function(args) {\n  console.log(args)\n});\n```\n\nNow that you've defined your events, you can go ahead and emit things...\n\n```javascript\nmyEmitter.emit('firstEvent', null, 'aaaa', 'bbbbb')\nmyEmitter.emit('thirdEvent', {err: 'someErr'}, 'mvvvarrr', 'junk~!')\nmyEmitter.emit('secondEvent', 'CCCC', 222222, 'EEEE')\n```\n\nWhich will produce the following output:\n\n```javascript\n{ firstEvent: \n  { '0': null,\n    '1': 'aaaa',\n    '2': 'bbbbb',\n    err: null,\n    resultA: 'aaaa',\n    resultB: 'bbbbb' },\nsecondEvent: \n  { '0': 'CCCC',\n    '1': 222222,\n    '2': 'EEEE',\n    resultC: 'CCCC',\n    resultD: 222222,\n    resultE: 'EEEE' },\nthirdEvent: \n  { '0': { err: 'someErr' },\n    '1': 'mvvvarrr',\n    '2': 'junk~!',\n    err: { err: 'someErr' },\n    myVar: 'mvvvarrr',\n    someJunk: 'junk~!' } }\n```\n\nAs you can see, each event's arguments are enumerated as well as being named.  The point: you can skip the call to `registerEventArguments()` if you want.\n\n\n","readmeFilename":""}