Security News
PyPI Introduces Digital Attestations to Strengthen Python Package Security
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
d3-dispatch
Advanced tools
The d3-dispatch module provides a simple mechanism for registering named callbacks and dispatching events to those callbacks. It is part of the D3.js library and is useful for managing events in a modular and decoupled way.
Creating a Dispatcher
This feature allows you to create a dispatcher with named events. In this example, a dispatcher is created with two events: 'start' and 'end'.
const d3 = require('d3-dispatch');
const dispatch = d3.dispatch('start', 'end');
Registering Callbacks
This feature allows you to register callbacks for the named events. Here, two callbacks are registered: one for the 'start' event and one for the 'end' event.
dispatch.on('start', () => console.log('Started!'));
dispatch.on('end', () => console.log('Ended!'));
Dispatching Events
This feature allows you to dispatch events, triggering the registered callbacks. In this example, the 'start' and 'end' events are dispatched, causing the respective callbacks to be executed.
dispatch.call('start');
dispatch.call('end');
Passing Arguments to Callbacks
This feature allows you to pass arguments to the callbacks when dispatching events. Here, a message is passed to the 'start' event callback.
dispatch.on('start', (message) => console.log('Started:', message));
dispatch.call('start', null, 'Initialization complete');
EventEmitter3 is a high performance EventEmitter for Node.js and the browser. It provides a similar event dispatching mechanism but is more general-purpose and not tied to the D3.js ecosystem.
Mitt is a tiny functional event emitter. It is very lightweight and provides a simple API for event handling, making it a good alternative for small projects or when minimal overhead is desired.
Node-Event-Emitter is a simple and lightweight event emitter for Node.js. It offers similar functionality to d3-dispatch but is designed specifically for Node.js environments.
Dispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as d3-request, use this mechanism to emit events to listeners. Think of this like Node’s EventEmitter, except every listener has a well-defined name so it’s easy to remove or replace them.
For example, to create a dispatch for start and end events:
var dispatch = d3.dispatch("start", "end");
You can then register callbacks for these events using dispatch.on:
dispatch.on("start", callback1);
dispatch.on("start.foo", callback2);
dispatch.on("end", callback3);
Then, you can invoke all the start callbacks using dispatch.call or dispatch.apply:
dispatch.call("start");
Like function.call, you may also specify the this
context and any arguments:
dispatch.call("start", {about: "I am a context object"}, "I am an argument");
Want a more involved example? See how to use d3-dispatch for coordinated views.
If you use NPM, npm install d3-dispatch
. Otherwise, download the latest release. You can also load directly from d3js.org, either as a standalone library or as part of D3 4.0. AMD, CommonJS, and vanilla environments are supported. In vanilla, a d3
global is exported:
<script src="https://d3js.org/d3-dispatch.v1.min.js"></script>
<script>
var dispatch = d3.dispatch("start", "end");
</script>
Try d3-dispatch in your browser.
Creates a new dispatch for the specified event types. Each type is a string, such as "start"
or "end"
.
# dispatch.on(typenames[, callback]) <>
Adds, removes or gets the callback for the specified typenames. If a callback function is specified, it is registered for the specified (fully-qualified) typenames. If a callback was already registered for the given typenames, the existing callback is removed before the new callback is added.
The specified typenames is a string, such as start
or end.foo
. The type may be optionally followed by a period (.
) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as start.foo
and start.bar
. To specify multiple typenames, separate typenames with spaces, such as start end
or start.foo start.bar
.
To remove all callbacks for a given name foo
, say dispatch.on(".foo", null)
.
If callback is not specified, returns the current callback for the specified typenames, if any. If multiple typenames are specified, the first matching callback is returned.
Returns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.
# dispatch.call(type[, that[, arguments…]]) <>
Like function.call, invokes each registered callback for the specified type, passing the callback the specified arguments, with that as the this
context. See dispatch.apply for more information.
# dispatch.apply(type[, that[, arguments]]) <>
Like function.apply, invokes each registered callback for the specified type, passing the callback the specified arguments, with that as the this
context. For example, if you wanted to dispatch your custom callbacks after handling a native click event, while preserving the current this
context and arguments, you could say:
selection.on("click", function() {
dispatch.apply("custom", this, arguments);
});
You can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (d) and index (i). See function.call and function.apply for further information.
FAQs
Register named callbacks and call them with arguments.
The npm package d3-dispatch receives a total of 1,990,648 weekly downloads. As such, d3-dispatch popularity was classified as popular.
We found that d3-dispatch demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.