# x-eventable

> make anything eventable

Latest version **1.3.0** (published 2020-07-27) · ISC license · 0 weekly downloads

## Install

```sh
npm install x-eventable
pnpm add x-eventable
yarn add x-eventable
bun add x-eventable
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.3.0 |
| Published | 2020-07-27 |
| First published | 2020-07-08 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 10.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Tom Siegel |
| Maintainers | tosi___ |
| Keywords | event, eventable, js, library, emitter |

## Links

- npm: https://www.npmjs.com/package/x-eventable
- Repository: https://github.com/Tom-Siegel/eventable
- Homepage: https://github.com/Tom-Siegel/eventable#readme
- Issues: https://github.com/Tom-Siegel/eventable/issues
- npm.io page: https://npm.io/package/x-eventable

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 1.3.0 (latest) — 2020-07-27
- 1.2.0 — 2020-07-22
- 1.1.1 — 2020-07-09
- 1.1.0 — 2020-07-09
- 1.0.0 — 2020-07-08

## README

# eventable.js

## Install

```
npm install x-eventable
```

## Usage

### Node.js

```javascript
const { eventable } = require("eventable.js");

let listener = new eventable();

listener.on("work", (e) => {
  console.log("successful");
});

listener.raise("work");
```

### Javascript

```html
<script src="eventable.browser.js" />
```

---

```javascript
let listener = new eventable();

listener.on("work", (e) => {
  console.log("successful");
});

listener.raise("work");
```

## Examples

### Add multiple listeners

```javascript
let listener = new eventable();

listener.on("A", (e) => {
  console.log(e.type);
});

listener.on("B", (e) => {
  console.log(e.type);
});

listener.raise("A"); //logs: A
listener.raise("B"); //logs: B
```

### Remove listener

```javascript
let listener = new eventable();

function callback(e) {
  console.log("Hello :)");
}

listener.on("speak", callback);

listener.raise("speak"); //logs: Hello :)
listener.off("speak", callback);
listener.raise("speak"); //Nothing happens
```

### Stop chain

```javascript
let listener = new eventable();

function callback(e) {
  console.log("Hello :)");

  e.stop = true; //cancels each listener that is positioned after the current
}

listener.on("speak", callback); //logs: Hello :)
listener.on("speak", callback); //nothing happens

listener.raise("speak");
```

### Options

```javascript
let listener = new eventable();

function callback(e) {
  console.log(`Hello ${e.details}`); //logs: Hello World!
  console.log(e.target); //logs: listener (object)
  console.log(e.type); //logs: speak
  console.log(e.stop); //logs: false
  console.log(e.return); //logs: null

  return "nice to meet you";
}

listener.on("speak", callback); //logs: Hello :)

var ev = listener.raise({
  type: "speak",
  details: "World!", //can be any object
});

console.log(ev.return); //logs: nice to meet you
```

### Inheritance

```javascript
function myObject() {
  eventable.call(this);

  this.answer = "foo";
}

myObject.on("ask", (e) => {
  console.log("answer is: " + e.target.answer); //logs: answer is: foo
});
myObject.raise("ask");
```

### Try raise

```javascript
var A = new eventable();
var B = {};

A.on("test", (e) => {
  console.log("success");
});

console.log(eventable.canRaise(A)); //logs: true
console.log(eventable.canRaise(B)); //logs: false

//or if eventable.raise == null
var resultA = eventable.raise(A, "test");
var resultB = eventable.raise(B, "test");

console.log(resultA); //logs: event (object)
console.log(resultB); //logs: null
```

## Definition

### Event-Object

```javascript
function _event() {
  this.target = null; //the eventable
  this.details = {}; //any data you want to share with your listeners
  this.stop = false; //true stops each listener that would be called after the current one
  this.type = ""; //the event type
  this.return = null; //the return of the previous listener
}
```

---
_Source: https://npm.io/package/x-eventable · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
