holosun
Version:
An events API with delegation and type declarations.
171 lines (123 loc) • 9.17 kB
Markdown
# Holosun
[](https://www.npmjs.com/package/holosun)
[](https://github.com/roydukkey/holosun/blob/master/LICENSE)
An events API with delegation and type declarations. Holosun is built to remain completely interoperable with the native events API.
## Usage
The distribution provided at `./dist/holosun.umd.js` can be used directly in the browser, with the API begin namespaced as a `holosun` global variable.
Or, use the package like any other node package:
```js
// ES6 module syntax
import * as holosun from 'holosun';
import { on, off } from 'holosun';
// CommonJS syntax
const holosun = require('holosun');
const { on, off } = require('holosun');
```
Alteratively, importing TypeScript directly will allow transpiled code to be optimize, including only the required portions of Holosun.
```js
import { on, off } from 'holosun/typescript';
```
Note: this package includes a proper [ECMAScript module](#ECMAScript-Modules).
## API Summary
| function | description |
| --- | --- |
| [`holosun.on()`](#HolosunOn) | Attach an event listener that will be called whenever a specified event type is delivered to the given target. |
| [`holosun.one()`](#HolosunOne) | Attach an event listener that will be called once whenever each of the specified event types are delivered to the given target. |
| [`holosun.any()`](#HolosunAny) | Attach an event listener that will be called once whenever any of the specified event types are delivered to the given target. |
| [`holosun.off()`](#HolosunOff) | Detach event listeners of the specified event types from the given target. |
| [`holosun.trigger()`](#HolosunTrigger) | Executes all listeners attached to the given target for the specified event types. |
## API
### holosun.on()
#### `on (target, types, listener[, useCapture | options])`
Attach an event listener that will be called whenever a specified event type is delivered to the given target.
#### `on (node, selector, types, listener[, useCapture | options])`
Attach an event listener that will be called whenever a specified event type is delivered to the given node from specific descendants.
##### Parameters
| parameter | type | description |
| --- | --- | --- |
| `target` | [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) | The target on which the event listener is attached. |
| `node` | [`Node`](https://developer.mozilla.org/en-US/docs/Web/API/Node) | The node on which the event listener is attached. |
| `selector` | `string` | A selector string to filter the descendants of the given node that trigger the event. |
| `types` | `string` | A case-sensitive string representing the [event type](https://developer.mozilla.org/en-US/docs/Web/Events)s to listen for. |
| `listener` | [`EventListener`](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) \|<br>[`EventListenerObject`](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) \|<br>`null` | The object that receives a notification (an object that implements the [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event) interface) when an event of a specified type occurs. This must be an object implementing the EventListener interface, or a function. |
| `useCapture` | `boolean` | Whether or not events of these types will be dispatched to the registered listener before being dispatched to any target beneath it in the DOM tree. |
| `options` | `AddEventListenerOptions` | An [options object](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#parameters) specifying characteristics about the event listener. |
##### Returns
The provided listener when successfully attached; otherwise, `undefined`.
### holosun.one()
#### `one (target, types, listener[, useCapture | options])`
Attach an event listener that will be called once whenever each of the specified event types are delivered to the given target.
#### `one (node, selector, types, listener[, useCapture | options])`
Attach an event listener that will be called once whenever each of the specified event types are delivered to the given node from specific descendants.
##### Parameters & Returns
Same as [`holosun.on()`](#HolosunOn).
### holosun.any()
#### `any (target, types, listener[, useCapture | options])`
Attach an event listener that will be called once whenever any of the specified event types are delivered to the given target.
#### `any (node, selector, types, listener[, useCapture | options])`
Attach an event listener that will be called once whenever any of the specified event types are delivered to the given node from specific descendants.
##### Parameters & Returns
Same as [`holosun.on()`](#HolosunOn).
### holosun.off()
#### `off (target, types)`
Detach all event listeners of the specified event types from the given target.
#### `off (target, types, listener[, useCapture | options])`
Detach an event listener of the specified event types from the given target.
#### `off (node, selector, types)`
Detach all event listeners of the specified event types from the given node for the specified selector.
#### `off (node, selector, types, listener[, useCapture | options])`
Detach an event listener of the specified event types from the given node for the specified selector.
##### Parameters
| parameter | type | description |
| --- | --- | --- |
| `target` | [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) | The target from which the event listener is detached. |
| `node` | [`Node`](https://developer.mozilla.org/en-US/docs/Web/API/Node) | The node from which the event listener is detached. |
| `selector` | `string` | A selector which should match the one used when attaching event listeners. |
| `types` | `string` | A case-sensitive string representing the [event type](https://developer.mozilla.org/en-US/docs/Web/Events)s to detach. |
| `listener` | [`EventListener`](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) \|<br>[`EventListenerObject`](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) \|<br>`null` | The event listener to detach from the event target. |
| `useCapture` | `boolean` | Whether or not the EventListener to be detached is registered as a capturing listener. |
| `options` | `EventListenerOptions` | An [options object](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#parameters) specifying characteristics about the event listener. |
##### Returns
`true` when successfully detached at least one listener; otherwise, `false`.
### holosun.trigger()
#### `trigger (target, types[, options])`
Executes all listeners attached to the given target for the specified event types.
##### Parameters
| parameter | type | description |
| --- | --- | --- |
| `target` | [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) | The target on which the specified events are executed. |
| `types` | `string` | A case-sensitive string representing the [event type](https://developer.mozilla.org/en-US/docs/Web/Events)s to execute. |
| `options` | `EventInit` | An [options object](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event#values) specifying characteristics about the triggered event. |
##### Returns
A list of tuples, where the first value is the event type and the second is `true`; unless the event is cancelable and at least one of the event listeners, which received the event, called [`Event.preventDefault()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault), the second value is `false`.
## ECMAScript Modules
This library comes with [ECMAScript Modules](https://www.ecma-international.org/ecma-262/6.0/#sec-modules) (ESM) support for Node.js versions that support it as well as bundlers like [rollup.js](https://rollupjs.org/guide/en/#tree-shaking) and [webpack](https://webpack.js.org/guides/tree-shaking/) (targeting both, Node.js and browser environments).
## CDN Builds
### ECMAScript Modules
To load this module directly into modern browsers that [support loading ECMAScript Modules](https://caniuse.com/#feat=es6-module) you can make use of [jspm](https://jspm.org/):
```html
<script type="module">
import { on } from 'https://jspm.dev/holosun';
on(document, 'click', () => {
window.location.href = 'https://youtu.be/950sXulKXGs?t=10';
});
</script>
```
### UMD
To load this module directly into older browsers you can use the [UMD (Universal Module Definition)](https://github.com/umdjs/umd) builds from any of the following CDNs.
These CDNs all provide the entire API as a `holosun` global variable:
```html
<script>
holosun.on(document, 'click', () => {
window.location.href = 'https://youtu.be/950sXulKXGs?t=10';
});
</script>
```
#### Using [UNPKG](https://unpkg.com/browse/holosun/dist/)
```html
<script src="https://unpkg.com/holosun@latest/dist/holosun.umd.js"></script>
```
#### Using [jsDelivr](https://cdn.jsdelivr.net/npm/holosun@latest/dist/)
```html
<script src="https://cdn.jsdelivr.net/npm/holosun@latest/dist/holosun.umd.js"></script>
```