{"id":25933325,"url":"https://github.com/robertwhurst/lucidjs","last_synced_at":"2025-04-04T13:12:40.883Z","repository":{"id":2523260,"uuid":"3499410","full_name":"RobertWHurst/LucidJS","owner":"RobertWHurst","description":"LucidJS is a library boasting an EventEmitter than supports emitter piping, flags, event scope, and a collection of useful meta events","archived":false,"fork":false,"pushed_at":"2015-06-06T22:27:27.000Z","size":865,"stargazers_count":365,"open_issues_count":1,"forks_count":14,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-04T12:33:59.639Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RobertWHurst.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-02-21T00:41:04.000Z","updated_at":"2025-02-14T15:50:15.000Z","dependencies_parsed_at":"2022-08-31T00:00:37.463Z","dependency_job_id":null,"html_url":"https://github.com/RobertWHurst/LucidJS","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobertWHurst%2FLucidJS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobertWHurst%2FLucidJS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobertWHurst%2FLucidJS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobertWHurst%2FLucidJS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RobertWHurst","download_url":"https://codeload.github.com/RobertWHurst/LucidJS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247182401,"owners_count":20897381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-04T00:53:27.321Z","updated_at":"2025-04-04T13:12:40.865Z","avatar_url":"https://github.com/RobertWHurst.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LucidJS\n\n[![Build Status](https://circleci.com/gh/RobertWHurst/LucidJS.png?circle-token=:circle-token)\n[![NPM version](https://badge.fury.io/js/lucidjs.png)](http://badge.fury.io/js/lucidjs)\n[![Endorse](http://api.coderwall.com/robertwhurst/endorsecount.png)](http://coderwall.com/robertwhurst)\n[![Flattr This](http://api.flattr.com/button/flattr-badge-large.png)](http://flattr.com/thing/1270541/RobertWHurstLucidJS-on-GitHub)\n\n__NOTE:__ This is release marks a very large\nchange to LucidJS, becoming fully prototypal,\naswell as matching node's EventEmitter api. Don't\nworry, all of the functionallity of the 2.x.x\nreleases can be found in this release aswell. The\nbenifits of this release is that the emitter can\nnow be inherited from, and you can use it in\nprojects that currently use node's emitter by\nsimply changing your require statement.\n\n\n##Decouple components, make them lucid.\n\nLucidJS is an event emitter library offering\nseveral unique features such as set events,\nemitter piping, sub events, along with the\nusual event triggering and binding. LucidJS\nemitters also feature meta events that  allow\nlistening for event binding and event  triggering.\n\nIt works with AMD loaders, on NodeJS, and with\nthe good old script tag.\n\n\n###Set Events\n\nLucidJS emitters have a method called `.set()`.\nSet allows you to bind to an event even after it\nhas happened.\n```javascript\nvar emitter = new lucidJS.EventEmitter();\nemitter.flag('ready');\nconsole.log('fired ready event');\nsetTimeout(function() {\n  emitter.bind('ready', function() {\n    console.log('listener bound and executed after ready event');\n  });\n}, 2000);\n\n\u003e\u003e\u003e fired ready event\n\u003e\u003e\u003e listener bound and executed after ready event\n```\nSet is extremely useful for events that only happen\nonce and indicate state. Its the perfect solution\nfor `load`, `complete` or `ready` events.\n\n\n###Emitter Piping\n\nSometimes its nice to have a collection of emitters\nand a central emitter to aggregate them. This is\npossible with LucidJS emitters.\n```javascript\nvar centralEmitter = new lucidJS.EventEmitter();\nvar emitterA = new lucidJS.EventEmitter();\nvar emitterB = new lucidJS.EventEmitter();\nvar emitterC = new lucidJS.EventEmitter();\n\n//pipe the foo event from emitter A\nemitterA.pipe('foo', centralEmitter);\n\n//pipe the bar and baz event from emitter B\nemitterB.pipe(['bar', 'baz'], centralEmitter);\n\n//pipe all events from emitter C\nemitterC.pipe(centralEmitter);\n```\n\n\n###Sub Events\n\nEver wish you could have events with sub events?\nLucidJS makes this possible. Trigger an event called\n`foo.bar.baz` will trigger `foo.bar.baz`, `foo.bar`,\nand `foo`.\n```javascript\nvar emitter = new lucidJS.EventEmitter();\nemitter.bind('foo.bar', function() {\n  console.log('foo.bar');\n});\nemitter.bind('foo', function() {\n  console.log('foo');\n});\nemitter.emit('foo.bar.baz');\n\n\u003e\u003e\u003e 'foo.bar'\n\u003e\u003e\u003e 'foo'\n```\n\n\n###Simple Events\n\nAlong with all the tasty bits above LucidJS\nemitters are also very good at good old regular\nevent passing.\n```javascript\nvar emitter = new lucidJS.EventEmitter();\nemitter.bind('foo', function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n  console.log([arg1, arg2, arg3, arg4, arg5, arg6, arg7].join(' '));\n});\nemitter.emit('foo', 'any', 'number', 'of', 'arguments', 'can', 'be', 'passed');\n\n\u003e\u003e\u003e 'any number of arguments can be passed'\n```\n\n\n###Meta Events\n\nLucidJS each emitter also emits a set of meta\nevents that let you listen for new listeners on\nan emitter.\n```javascript\nvar emitter = new lucidJS.EventEmitter();\nemitter.bind('emitter.listener', function(listener) {\n  console.log('captured listener', listener, 'on event ' + this.event);\n});\nemitter.bind('foo', function() { console.log('bar'); });\n\n\u003e\u003e\u003e 'captured listeners' function() { console.log('bar'); } 'on event foo'\n```\n\nYou can event listen to all of the events emitted\nby an emitter.\n```javascript\nvar emitter = new lucidJS.EventEmitter();\nemitter.bind('emitter.event', function(event) {\n  console.log('captured event ' + event);\n});\nemitter.emit('foo');\n\n\u003e\u003e\u003e 'captured event foo'\n```\n\n\n### Class: lucidJS.EventEmitter\n\n```\nvar eventEmitter = new lucidJS.EventEmitter();\n```\nEventEmitter is a drop in replacement for node's\nevent emitter. An event emitter can be created by\nsimply using the `new` keyword.\n\n\n### eventEmitter.bind(event, listener)\n\nTo bind to an event you can use `bind()`, or its\naliases `addListener()` and `addListener()`.\nIt accepts two arguments; An event, or array\nof events, and a callback, or an array of\ncallbacks. Listeners are always triggered in the\norder they are registered. The eventEmitter is\nreturned.\n\n#### Aliases\n\n- eventEmitter.addListener\n- eventEmitter.on\n\n#### Arguments\n\n```\neventEmitter.bind(String event, Function listener([arg[, arg[, ...]])) =\u003e EventEmitter eventEmitter\neventEmitter.bind(Array events, Function listener([arg[, arg[, ...]])) =\u003e EventEmitter eventEmitter\neventEmitter.bind(String event, Array listeners) =\u003e EventEmitter eventEmitter\neventEmitter.bind(Array events, Array listeners) =\u003e EventEmitter eventEmitter\n```\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\nevent | String | An event name to bind too.\nlistener | String | A function to call when the event(s) are dispatched.\nevents | Array | An array of event names to bind to.\nlisteners | Array | An array of functions to call when the event(s) are dispatched.\n\n\n### eventEmitter.weakBind(event, listener)\n\nSimilar to `bind()`, `weakBind()` binds a listener\nto an event, however, `weakBind()` automatically\nunbinds its listener after its event is fired just\nonce. Listeners are always triggered in the order\nthey are registered. The eventEmitter is returned.\n\n#### Aliases\n\n- eventEmitter.once\n\n#### Arguments\n\n```\neventEmitter.weakBind(String event, Function listener([arg[, arg[, ...]])) =\u003e EventEmitter eventEmitter\neventEmitter.weakBind(Array events, Function listener([arg[, arg[, ...]])) =\u003e EventEmitter eventEmitter\neventEmitter.weakBind(String event, Array listeners) =\u003e EventEmitter eventEmitter\neventEmitter.weakBind(Array events, Array listeners) =\u003e EventEmitter eventEmitter\n```\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\nevent | String | An event name to bind too.\nlistener | String | A function to call when the event(s) are dispatched.\nevents | Array | An array of event names to listen for.\nlisteners | Array | An array of functions to call when the event(s) are dispatched.\n\n\n### eventEmitter.unbind(event, listener)\n\nUnbinds a listener, or an array of listeners from\nan event, or events. Once a listener is unbound\nfrom an event, it will no longer fire when the\nevent is dispatched. The eventEmitter is\nreturned.\n\n#### Aliases\n\n- eventEmitter.removeListener\n- eventEmitter.off\n\n#### Arguments\n\n```\neventEmitter.unbind(String event, Function listener([arg[, arg[, ...]])) =\u003e EventEmitter eventEmitter\neventEmitter.unbind(Array events, Function listener([arg[, arg[, ...]])) =\u003e EventEmitter eventEmitter\neventEmitter.unbind(String event, Array listeners) =\u003e EventEmitter eventEmitter\neventEmitter.unbind(Array events, Array listeners) =\u003e EventEmitter eventEmitter\n```\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\nevent | String | An event the listener is bound to.\nlistener | String | A listener to unbind from the event.\nevents | Array | An array of events the listener is bound to.\nlisteners | Array | An array of functions to unbind from the event.\n\n\n### eventEmitter.emit(event, [arg[, arg[, ...]]])\n\nDispatching events is done with `emit()`, or its\nalias `trigger()`. Any listeners bound to the\nevent passed will be triggered immediately. Any\nadditional arguments are passed to the listeners.\nListeners are always triggered in the order they\nare registered. The eventEmitter is returned.\n\n#### Aliases\n\n- eventEmitter.trigger\n\n#### Arguments\n\n```\neventEmitter.emit(String event, [* arg[, * arg[, ...]]]) =\u003e EventEmitter eventEmitter\neventEmitter.emit(Array events, [* arg[, * arg[, ...]]]) =\u003e EventEmitter eventEmitter\n```\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\nevent | String | An event to trigger.\nevents | Array | An array of events to trigger.\narg | * | Any argument to be passed to all bound event listeners.\n\n\n### eventEmitter.flag(event, [arg[, arg[, ...]]])\n\nFlags an event on an emitter. A setting a flag\nwill immediately trigger any event listeners bound\nprior to calling `flag`. Any listeners bound after\nthe flag is set will be triggered immediately\nafter they are bound. Any additional arguments are\npassed to the listeners. The eventEmitter is\nreturned.\n\n#### Arguments\n\n```\neventEmitter.flag(String event, [* arg[, * arg[, ...]]]) =\u003e EventEmitter eventEmitter\neventEmitter.flag(Array events, [* arg[, * arg[, ...]]]) =\u003e EventEmitter eventEmitter\n```\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\nevent | String | An event the flag is bound to.\nevents | Array | An array of events the flag is bound to.\narg | * | Any argument to be passed to bound or future listeners.\n\n\n### eventEmitter.unflag(event)\n\n#### Arguments\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\n\n\n### eventEmitter.pipe([event], eventEmitter)\n\n#### Arguments\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\n\n\n### eventEmitter.unpipe([event], eventEmitter)\n\n#### Arguments\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\n\n\n### eventEmitter.listeners([event])\n\n#### Arguments\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\n\n\n### eventEmitter.unbindAll([event])\n\n#### Aliases\n\n- eventEmitter.removeAllListeners\n\n#### Arguments\n\nArgument Name | Allowed Types | Description\n--- | --- | ---\n\n\n\n## A Foot Note\n\nIf you like my library feel free to use it however you want. If you wish to contribute to LucidJS please feel free to send me a pull request or make your own fork. Commentary is welcome on any of my projects.\n\nCheers and happy coding.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertwhurst%2Flucidjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertwhurst%2Flucidjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertwhurst%2Flucidjs/lists"}