Skip to content

A Programming Framework for Building Cross-Platform Assistive Technologies

License

Notifications You must be signed in to change notification settings

InclusiveTechNU/v11

Repository files navigation

V11 for A11Y

Status Apache 2.0 License Travis (.com) Northwestern HCI NSF Grant 1901456

V11 logo

Made with 💜 in Evanston, IL at the Northwestern Inclusive Technology Lab

V11 is a cross-platform framework for building assistive scripts, workflows, and plugins. It is built on top of V8 and Node.JS to provide a lightweight and easy to learn interface for querying and manipulating native accessibility APIs, while also relieving you of cross-platform nightmares when building for multiple operating systems.

V11 is currently in a Developer Preview and will have a beta release later this spring

For stability reasons, this API currently showcases the MacOS implementation of V11. The beta release will include support for all major platforms (mac, windows, linux). For an early preview of whats to come please reach out to the project's lead: Tommy McHugh at [email protected].

Get Started

Install Prerequisite Software

Make sure to install:

Once these have installed, run the following commands

npm install -g node-gyp
node-gyp install

On macOS, you might also have to install XCode and install command line tools by running

xcode-select --install

Building V11 From Source

V11 uses the Bazel build system for compiling the project. This allows the project to rely on a single build system for building all cross-platform components. Once you have installed Bazel you can generate the V11 developer-mode javascript library by running:

git clone https://github.com/InclusiveTechNU/v11.git && cd v11
bazel build //v11/typescript:v11_lib_node_dev

The output library can be imported into a Node project using the following statement:

const v11 = require('./bazel-bin/v11/typescript/v11.js');

Note: There are a few prerequisites that will embeded within a future release of V11. Make sure to have Node.JS, Yarn, and Pip installed. Otherwise you might have some fun errors.

Examples

V11 is inspired by the DOM to make modifying the accessibility tree easy. Here's a simple example to mute a track in GarageBand.

const v11 = require('v11');
const gb = v11.system.getApplicationByName("GarageBand");
const mute = gb.getElementsByLabel("Mute")[0];
mute.actions.press();

V11 supports more than just performing accessibility actions. In fact, you can even listen for them too. Here's an example of how to listen for textbox entry in TextEdit.

const v11 = require('v11');
const notes = v11.system.getApplicationByName("TextEdit");
notes.getElementsByType("textarea")[0].addEventListener('value', () => {
    console.log("hey");
});

You can learn about the current stable API here. We are continually adding features to improve accessibility modifications and querying so check back often! You can also see some simple examples of V11 scripts here. Additionally, we provide a boilerplate project to help you get setup here.

Good luck and happy coding!

Contributing

We welcome contributions of all kinds from filing issues and bug or typo fixes to large feature implementations. Our team is trying to build the premiere tool for developing assistive services on all platforms, so we need your help!

If you have ideas or want to start working on a contribution, file an issue and submit a pull request.

Read more in the CONTRIBUTING.md file.

This project is supported by NSF Award 1901456