From 7e3ac6aa6188493f64e6130bd7d646971a2ca031 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Wed, 18 May 2022 20:22:16 -0700 Subject: [PATCH 01/29] Create draft accessibility statement --- statement.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 statement.md diff --git a/statement.md b/statement.md new file mode 100644 index 00000000..bc1cb472 --- /dev/null +++ b/statement.md @@ -0,0 +1,84 @@ +# JupyterLab Accessibility Statement + +## Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) + + +## ⚠️ Draft Accessibility Statement for JupyterLab + +This is an accessibility statement from Jupyter accessibility contributors. + +### Measures to support accessibility + +Jupyter accessibility contributors take the following measures to ensure accessibility of JupyterLab: + +* Include accessibility as part of our mission statement. +* Provide continual accessibility training for our community. +* Assign clear accessibility goals and responsibilities. +* Employ formal accessibility quality assurance methods. + +### Conformance status + +The Web Content Accessibility Guidelines (WCAG) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not conform the accessibility standard. + +### Feedback + +We welcome your feedback on the accessibility of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: + +* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) +* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) + +### Compatibility with browsers and assistive technology + +JupyterLab is designed to be compatible with the following technologies: + +* Windows, macOS, iOS, Android; Firefox, Chrome, Safari, Chromium browsers (mobile and desktop). + +JupyterLab is not compatible with: + +* Internet Explorer, Edge; JAWS, NVDA, VoiceOver, Narrator, Orca screen readers; voice control technology. + +### Technical specifications + +Accessibility of JupyterLab relies on the following technologies to work with the particular combination of web browser and any assistive technologies or plugins installed on your computer: + +* HTML +* WAI-ARIA +* CSS +* JavaScript + +These technologies are relied upon for conformance with the accessibility standards used. + +### Limitations and alternatives + +Despite our best efforts to ensure accessibility of JupyterLab, there may be some limitations. Below is a description of known limitations, and potential solutions. Please contact us if you observe an issue not listed below. + +Known limitations for JupyterLab: + +1. **Documents**: Documents writen by the community may not include accessible content because we do not and cannot review every document that can be opened in JupyterLab. To support accessible documents, we are drafting guidelines for accessible document content with an emphasis on Jupyter notebooks. Please report the issue to the author and [open an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) describing the problem and the behavior you expect so we may integrate it into our content guidelines. + +2. **JupyterLab extensions**: JupyterLab extensions writen by the community may not be accessible because JupyterLab extensions can be written by anyone in the community and have no required review process. We do not and can not review every JupyterLab extension. To support accessible extensions, we encourage extension authors to use existing, accessible JupyterLab components for their extension. We also provide periodic opportunities for community education on accessibility. Please report the issue to the author and let them know the [jupyter/accessibility](https://github.com/jupyter/accessibility/) community may be able to provide guidance. + +### Assessment approach + +Jupyter accessibility contributors assessed the accessibility of JupyterLab by the following approaches: + +* Self-evaluation +* Regular automated testing to monitor for regressions (can be found at [jupyter/accessibility](https://github.com/jupyter/accessibility) +* User feedback + +### Evaluation report + +An evaluation for JupyterLab is available at: [jupyterlab/jupyterlab/issues/9399](https://github.com/jupyterlab/jupyterlab/issues/9399). + +### Evaluation report + +User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupyterlab label `tag:accessibility`](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility). + +### Formal complaints + +* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) +* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) and request it be labeled tag:accessibility. + +### Date + +This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/). \ No newline at end of file From 011704adc5e90d8fa1368ef4592f7a3b5fabe6ab Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 20 May 2022 13:58:21 +0100 Subject: [PATCH 02/29] :building_construction: Update Docker and tools dir --- .gitpod.yml | 36 +++++++++++++++++---- testing/tools/{gitpod => }/Dockerfile | 28 ++++++++++------ testing/tools/fix_permissions | 35 ++++++++++++++++++++ testing/tools/{gitpod => }/workspace_config | 0 4 files changed, 84 insertions(+), 15 deletions(-) rename testing/tools/{gitpod => }/Dockerfile (80%) create mode 100644 testing/tools/fix_permissions rename testing/tools/{gitpod => }/workspace_config (100%) diff --git a/.gitpod.yml b/.gitpod.yml index b7b5287a..ea390e33 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,13 +1,37 @@ image: file: testing/tools/gitpod/Dockerfile -ports: -- port: 9323 -- port: 8888 + tasks: - name: Install JupyterLab Node.js testing dependencies - before: | - cd testing/jupyterlab init: | + cd testing/jupyterlab yarn install - command: | npx playwright install + +# -------------------------------------------------------- +# exposing ports +ports: +- port: 9323 +- port: 8888 + +# -------------------------------------------------------- +# using prebuilds for the container +# With this configuration the prebuild will happen on push to master +github: + prebuilds: + # enable for main/default branch + master: true + # enable for other branches (defaults to false) + branches: false + # enable for pull requests coming from this repo (defaults to true) + pullRequests: false + # enable for pull requests coming from forks (defaults to false) + pullRequestsFromForks: false + # add a check to pull requests (defaults to true) + addCheck: false + # add a "Review in Gitpod" button as a comment to pull requests (defaults to false) + addComment: false + # add a "Review in Gitpod" button to the pull request's description (defaults to false) + addBadge: false + # add a label once the prebuild is ready to pull requests (defaults to false) + addLabel: false \ No newline at end of file diff --git a/testing/tools/gitpod/Dockerfile b/testing/tools/Dockerfile similarity index 80% rename from testing/tools/gitpod/Dockerfile rename to testing/tools/Dockerfile index 9bd5394d..a8857272 100644 --- a/testing/tools/gitpod/Dockerfile +++ b/testing/tools/Dockerfile @@ -18,6 +18,8 @@ FROM gitpod/workspace-base:latest ARG MAMBAFORGE_VERSION="4.10.0-0" ARG CONDA_ENV=a11y-tests ARG DEBIAN_FRONTEND=noninteractive +# making this an argument for flexibility +ARG JUPYTER_APP=jupyterlab # ---- Configure environment ---- # base HOME for all things in gitpod @@ -28,6 +30,8 @@ ENV CONDA_DIR="${GITPOD_HOME}/mambaforge3" \ SHELL=/bin/bash ENV PATH=${CONDA_DIR}/bin:$PATH +ENV JUPYTER_APP_DIR="./testing/${JUPYTER_APP}" + # ----------------------------------------------------------------------------- # ---- Creating as root - note: make sure to change to gitpod in the end ---- USER root @@ -60,35 +64,41 @@ SHELL ["/bin/bash", "--login", "-o", "pipefail", "-c"] # ----------------------------------------------------------------------------- # ---- Installing mamba ---- -USER gitpod RUN wget -q -O mambaforge3.sh \ "https://github.com/conda-forge/miniforge/releases/download/$MAMBAFORGE_VERSION/Mambaforge-$MAMBAFORGE_VERSION-Linux-x86_64.sh" && \ bash mambaforge3.sh -p ${CONDA_DIR} -b && \ - rm mambaforge3.sh + rm mambaforge3.sh && \ + fix-permissions "${CONDA_DIR}" # ----------------------------------------------------------------------------- # ---- Copy conda and config files ---- # Copy conda environment file into the container - this needs to exists inside # the container to create a conda environment from it # basic workspace configurations -USER root -COPY ./testing/tools/gitpod/workspace_config /usr/local/bin/workspace_config +COPY ./testing/tools/workspace_config /usr/local/bin/workspace_config +COPY ./testing/tools/fix_permissions /usr/local/bin/fix_permissions +COPY "${JUPYTER_APP_DIR}/environment.yml" /tmp/environment.yml + RUN chmod a+rx /usr/local/bin/workspace_config && \ + chmod a+rx /usr/local/bin/fix_permissions && \ workspace_config # ----------------------------------------------------------------------------- # ---- Create conda environment with base dependencies ---- # Install dependencies -USER gitpod -COPY ./testing/jupyterlab/environment.yml /tmp/environment.yml -RUN mamba env create -f /tmp/environment.yml && \ + +RUN mamba env create -f /tmp/environment.yml \ + --root-prefix="${CONDA_DIR}" \ + --prefix="${CONDA_DIR}" && \ conda activate ${CONDA_ENV} && \ conda clean --all -f -y && \ sudo rm -rf /tmp/* && \ - echo node --version ">" `node --version` + echo node --version ">" `node --version` && \ + fix-permissions "${CONDA_DIR}" RUN conda activate ${CONDA_ENV} && \ - npx playwright install-deps + npx playwright install-deps && \ + npm cache clean --force # ----------------------------------------------------------------------------- # Always make sure we are not root diff --git a/testing/tools/fix_permissions b/testing/tools/fix_permissions new file mode 100644 index 00000000..c4d9c877 --- /dev/null +++ b/testing/tools/fix_permissions @@ -0,0 +1,35 @@ +#!/bin/bash +# set permissions on a directory +# after any installation, if a directory needs to be (human) user-writable, +# run this script on it. +# It will make everything in the directory owned by Unix group ${NB_GID} +# and writable by that group. +# Deployments that want to set a specific user id can preserve permissions +# by adding the `--group-add users` line to `docker run`. + +# uses find to avoid touching files that already have the right permissions, +# which would cause massive image explosion + +# right permissions are: +# group=${NB_GID} +# AND permissions include group rwX (directory-execute) +# AND directories have setuid,setgid bits set + +set -e + +for d in "$@"; do + find "${d}" \ + ! \( \ + -group "${NB_GID}" \ + -a -perm -g+rwX \ + \) \ + -exec chgrp "${NB_GID}" {} \; \ + -exec chmod g+rwX {} \; + # setuid, setgid *on directories only* + find "${d}" \ + \( \ + -type d \ + -a ! -perm -6000 \ + \) \ + -exec chmod +6000 {} \; +done diff --git a/testing/tools/gitpod/workspace_config b/testing/tools/workspace_config similarity index 100% rename from testing/tools/gitpod/workspace_config rename to testing/tools/workspace_config From 7ba911d2fc7aad165bc3d11663173e9c34883631 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 20 May 2022 17:41:49 +0100 Subject: [PATCH 03/29] :building_construction: Update Dockerfile and configs --- testing/tools/Dockerfile | 53 +++++++++++++++++++---------------- testing/tools/fix_permissions | 8 +++--- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/testing/tools/Dockerfile b/testing/tools/Dockerfile index a8857272..04ff1611 100644 --- a/testing/tools/Dockerfile +++ b/testing/tools/Dockerfile @@ -1,3 +1,5 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. # # Dockerfile for jupyter/accessibility development # @@ -7,6 +9,8 @@ # From the root of the project: # docker build --rm -f "./testing/tools/gitpod/Dockerfile" -t "." # +# By default it will build for /testing/jupyterlab - to build for a different app +# docker build --build-arg JUPYTER_APP=retrolab --rm -f "./testing/tools/gitpod/Dockerfile" -t "." # To run the image: # docker run --rm -it # This image is based on: Ubuntu 20.04 (focal) @@ -15,21 +19,23 @@ FROM gitpod/workspace-base:latest -ARG MAMBAFORGE_VERSION="4.10.0-0" +# https://github.com/conda-forge/miniforge/releases +ARG MAMBAFORGE_VERSION="4.12.0-0" ARG CONDA_ENV=a11y-tests -ARG DEBIAN_FRONTEND=noninteractive # making this an argument for flexibility ARG JUPYTER_APP=jupyterlab -# ---- Configure environment ---- +# ---- Configure environment ---------- # base HOME for all things in gitpod +ENV DEBIAN_FRONTEND=noninteractive ENV GITPOD_HOME=/home/gitpod \ - WORKSPACE=/workspace/a11y + WORKSPACE=/workspace/a11y \ + USER=gitpod \ + GITPOD_GIUD=3333 ENV CONDA_DIR="${GITPOD_HOME}/mambaforge3" \ SHELL=/bin/bash ENV PATH=${CONDA_DIR}/bin:$PATH - ENV JUPYTER_APP_DIR="./testing/${JUPYTER_APP}" # ----------------------------------------------------------------------------- @@ -39,9 +45,9 @@ USER root # hadolint ignore=DL3008 RUN apt-get update && \ apt-get install -yq --no-install-recommends \ - # software-properties-common \ - # locales \ - # wget \ + software-properties-common \ + locales \ + wget \ build-essential \ ca-certificates \ curl \ @@ -62,44 +68,43 @@ RUN apt-get update && \ # Allows this Dockerfile to activate conda environments SHELL ["/bin/bash", "--login", "-o", "pipefail", "-c"] -# ----------------------------------------------------------------------------- -# ---- Installing mamba ---- -RUN wget -q -O mambaforge3.sh \ - "https://github.com/conda-forge/miniforge/releases/download/$MAMBAFORGE_VERSION/Mambaforge-$MAMBAFORGE_VERSION-Linux-x86_64.sh" && \ - bash mambaforge3.sh -p ${CONDA_DIR} -b && \ - rm mambaforge3.sh && \ - fix-permissions "${CONDA_DIR}" - # ----------------------------------------------------------------------------- # ---- Copy conda and config files ---- # Copy conda environment file into the container - this needs to exists inside # the container to create a conda environment from it +COPY "${JUPYTER_APP_DIR}/environment.yml" /tmp/environment.yml # basic workspace configurations COPY ./testing/tools/workspace_config /usr/local/bin/workspace_config +# Copy a script that we will use to correct permissions after running certain commands COPY ./testing/tools/fix_permissions /usr/local/bin/fix_permissions -COPY "${JUPYTER_APP_DIR}/environment.yml" /tmp/environment.yml RUN chmod a+rx /usr/local/bin/workspace_config && \ chmod a+rx /usr/local/bin/fix_permissions && \ workspace_config +# ----------------------------------------------------------------------------- +# ---- Installing mamba ---- +RUN wget -q -O mambaforge3.sh \ + "https://github.com/conda-forge/miniforge/releases/download/$MAMBAFORGE_VERSION/Mambaforge-$MAMBAFORGE_VERSION-Linux-x86_64.sh" && \ + bash mambaforge3.sh -p ${CONDA_DIR} -b && \ + rm mambaforge3.sh && \ + fix_permissions "${CONDA_DIR}" + # ----------------------------------------------------------------------------- # ---- Create conda environment with base dependencies ---- # Install dependencies - -RUN mamba env create -f /tmp/environment.yml \ - --root-prefix="${CONDA_DIR}" \ - --prefix="${CONDA_DIR}" && \ +RUN mamba env create -f /tmp/environment.yml && \ conda activate ${CONDA_ENV} && \ conda clean --all -f -y && \ sudo rm -rf /tmp/* && \ - echo node --version ">" `node --version` && \ - fix-permissions "${CONDA_DIR}" + chown "${USER}:${GITPOD_GIUD}}" "${CONDA_DIR}" && \ + fix_permissions "${CONDA_DIR}" RUN conda activate ${CONDA_ENV} && \ + # Install node dependencies npx playwright install-deps && \ npm cache clean --force # ----------------------------------------------------------------------------- # Always make sure we are not root -USER gitpod +USER ${USER} \ No newline at end of file diff --git a/testing/tools/fix_permissions b/testing/tools/fix_permissions index c4d9c877..3238a33f 100644 --- a/testing/tools/fix_permissions +++ b/testing/tools/fix_permissions @@ -2,7 +2,7 @@ # set permissions on a directory # after any installation, if a directory needs to be (human) user-writable, # run this script on it. -# It will make everything in the directory owned by Unix group ${NB_GID} +# It will make everything in the directory owned by Unix group ${GITPOD_GIUD} # and writable by that group. # Deployments that want to set a specific user id can preserve permissions # by adding the `--group-add users` line to `docker run`. @@ -11,7 +11,7 @@ # which would cause massive image explosion # right permissions are: -# group=${NB_GID} +# group=${GITPOD_GIUD} # AND permissions include group rwX (directory-execute) # AND directories have setuid,setgid bits set @@ -20,10 +20,10 @@ set -e for d in "$@"; do find "${d}" \ ! \( \ - -group "${NB_GID}" \ + -group "${GITPOD_GIUD}" \ -a -perm -g+rwX \ \) \ - -exec chgrp "${NB_GID}" {} \; \ + -exec chgrp "${GITPOD_GIUD}" {} \; \ -exec chmod g+rwX {} \; # setuid, setgid *on directories only* find "${d}" \ From bf781c3d778281030ee3fb0224e23044265fcf72 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 20 May 2022 17:42:14 +0100 Subject: [PATCH 04/29] :construction_worker: Add Docker workflow --- .github/workflows/docker.yml | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/docker.yml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..3519fca4 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,56 @@ +name: Build Gitpod Docker image + +on: + push: + branches: + - master + +jobs: + build: + name: Build Gitpod Docker image + runs-on: ubuntu-latest + environment: a11y-dev + if: "github.repository_owner == 'jupyter' && !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip github]')" + steps: + - name: Clone repository ⚡ + uses: actions/checkout@v3 + + - name: Lint Docker 🔍 + uses: brpaz/hadolint-action@v1.2.1 + with: + dockerfile: ./testing/tools/Dockerfile + + - name: Get refs + shell: bash + run: | + export raw_branch=${GITHUB_REF#refs/heads/} + echo "::set-output name=branch::${raw_branch//\//-}" + echo "::set-output name=date::$(date +'%Y%m%d')" + echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" + id: getrefs + + - name: Set up Docker Buildx 🐳 + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub 🔑 + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push 🛠️ + id: docker_build + uses: docker/build-push-action@v3 + with: + context: "." + file: "./testing/tools/Dockerfile" + push: ${{ github.event_name != 'pull_request' }} + cache-from: type=gha + cache-to: type=gha,mode=max + tags: | + quansight/jupyter-a11y:${{ steps.getrefs.outputs.date }}-${{ steps.getrefs.outputs.branch}}-${{ steps.getrefs.outputs.sha8 }} + quansight/jupyter-a11y:latest + + - name: Image digest + # Return details of the image build: sha and shell + run: echo ${{ steps.docker_build.outputs.digest }} \ No newline at end of file From a0071153e5aeabad59d22e067bcf557c699914ad Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 20 May 2022 17:42:31 +0100 Subject: [PATCH 05/29] :wrench: Update gitpod config --- .gitpod.yml | 2 +- .hadolint.yml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .hadolint.yml diff --git a/.gitpod.yml b/.gitpod.yml index ea390e33..b14abb58 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -6,7 +6,7 @@ tasks: init: | cd testing/jupyterlab yarn install - npx playwright install + cd workspace/a11y # -------------------------------------------------------- # exposing ports diff --git a/.hadolint.yml b/.hadolint.yml new file mode 100644 index 00000000..0188ba2c --- /dev/null +++ b/.hadolint.yml @@ -0,0 +1,7 @@ +--- +ignored: + - DL3006 + - DL3008 + - SC2016 + - DL3004 + - DL3007 \ No newline at end of file From 2e53495ac12e1ebc15119cb5c8a965bdddcbf515 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Sat, 21 May 2022 12:41:24 +0100 Subject: [PATCH 06/29] :construction_worker: Fix CI - for testing now --- .github/workflows/docker.yml | 4 +++- .gitpod.yml | 6 ++++-- testing/tools/Dockerfile | 8 ++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 3519fca4..44c57d81 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -4,13 +4,15 @@ on: push: branches: - master + # testing now + - trallard/* jobs: build: name: Build Gitpod Docker image runs-on: ubuntu-latest environment: a11y-dev - if: "github.repository_owner == 'jupyter' && !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip github]')" + if: "github.repository_owner == 'Quansight-Labs' && !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip github]')" steps: - name: Clone repository ⚡ uses: actions/checkout@v3 diff --git a/.gitpod.yml b/.gitpod.yml index b14abb58..b93355c7 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -24,13 +24,15 @@ github: # enable for other branches (defaults to false) branches: false # enable for pull requests coming from this repo (defaults to true) - pullRequests: false + # need to change + pullRequests: true # enable for pull requests coming from forks (defaults to false) pullRequestsFromForks: false # add a check to pull requests (defaults to true) addCheck: false # add a "Review in Gitpod" button as a comment to pull requests (defaults to false) - addComment: false + # need to change + addComment: true # add a "Review in Gitpod" button to the pull request's description (defaults to false) addBadge: false # add a label once the prebuild is ready to pull requests (defaults to false) diff --git a/testing/tools/Dockerfile b/testing/tools/Dockerfile index 04ff1611..7774ff25 100644 --- a/testing/tools/Dockerfile +++ b/testing/tools/Dockerfile @@ -94,11 +94,11 @@ RUN wget -q -O mambaforge3.sh \ # ---- Create conda environment with base dependencies ---- # Install dependencies RUN mamba env create -f /tmp/environment.yml && \ - conda activate ${CONDA_ENV} && \ conda clean --all -f -y && \ - sudo rm -rf /tmp/* && \ - chown "${USER}:${GITPOD_GIUD}}" "${CONDA_DIR}" && \ - fix_permissions "${CONDA_DIR}" + rm -rf /tmp/* + +RUN fix_permissions "${CONDA_DIR}" && \ + chown "${USER}:${GITPOD_GIUD}}" "${CONDA_DIR}" RUN conda activate ${CONDA_ENV} && \ # Install node dependencies From 98f78750a4afdad5d418995f7abb4c63e46b17d8 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Sat, 21 May 2022 12:44:11 +0100 Subject: [PATCH 07/29] :pushpin: Pin Docker tag --- testing/tools/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testing/tools/Dockerfile b/testing/tools/Dockerfile index 7774ff25..c9aa800d 100644 --- a/testing/tools/Dockerfile +++ b/testing/tools/Dockerfile @@ -17,7 +17,8 @@ # https://hub.docker.com/_/ubuntu/?tab=tags&name=focal # OS/ARCH: linux/amd64 -FROM gitpod/workspace-base:latest +# pinning the version +FROM gitpod/workspace-base:2022-05-20-05-44-40 # https://github.com/conda-forge/miniforge/releases ARG MAMBAFORGE_VERSION="4.12.0-0" From 893d6877d8a801e46578ac07db58371f78abd24a Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Thu, 26 May 2022 17:36:25 +0100 Subject: [PATCH 08/29] :bug: Fix annoying bug --- testing/tools/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/tools/Dockerfile b/testing/tools/Dockerfile index c9aa800d..167830cc 100644 --- a/testing/tools/Dockerfile +++ b/testing/tools/Dockerfile @@ -21,7 +21,7 @@ FROM gitpod/workspace-base:2022-05-20-05-44-40 # https://github.com/conda-forge/miniforge/releases -ARG MAMBAFORGE_VERSION="4.12.0-0" +ARG MAMBAFORGE_VERSION="4.10.0-0" ARG CONDA_ENV=a11y-tests # making this an argument for flexibility ARG JUPYTER_APP=jupyterlab @@ -32,7 +32,7 @@ ENV DEBIAN_FRONTEND=noninteractive ENV GITPOD_HOME=/home/gitpod \ WORKSPACE=/workspace/a11y \ USER=gitpod \ - GITPOD_GIUD=3333 + GITPOD_GIUD=33333 ENV CONDA_DIR="${GITPOD_HOME}/mambaforge3" \ SHELL=/bin/bash @@ -99,7 +99,7 @@ RUN mamba env create -f /tmp/environment.yml && \ rm -rf /tmp/* RUN fix_permissions "${CONDA_DIR}" && \ - chown "${USER}:${GITPOD_GIUD}}" "${CONDA_DIR}" + chown "${USER}:${GITPOD_GIUD}" "${CONDA_DIR}" RUN conda activate ${CONDA_ENV} && \ # Install node dependencies From cdb90d456eded6a7fe6e43721c1058f70671fbfc Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Thu, 26 May 2022 17:37:30 +0100 Subject: [PATCH 09/29] :memo: Consistent style --- .github/workflows/docker.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 44c57d81..5634b194 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -9,7 +9,7 @@ on: jobs: build: - name: Build Gitpod Docker image + name: Build Gitpod Docker image runs-on: ubuntu-latest environment: a11y-dev if: "github.repository_owner == 'Quansight-Labs' && !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip github]')" @@ -21,8 +21,8 @@ jobs: uses: brpaz/hadolint-action@v1.2.1 with: dockerfile: ./testing/tools/Dockerfile - - - name: Get refs + + - name: Get refs shell: bash run: | export raw_branch=${GITHUB_REF#refs/heads/} @@ -30,7 +30,7 @@ jobs: echo "::set-output name=date::$(date +'%Y%m%d')" echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" id: getrefs - + - name: Set up Docker Buildx 🐳 uses: docker/setup-buildx-action@v2 @@ -53,6 +53,6 @@ jobs: quansight/jupyter-a11y:${{ steps.getrefs.outputs.date }}-${{ steps.getrefs.outputs.branch}}-${{ steps.getrefs.outputs.sha8 }} quansight/jupyter-a11y:latest - - name: Image digest + - name: Image digest 📖 # Return details of the image build: sha and shell - run: echo ${{ steps.docker_build.outputs.digest }} \ No newline at end of file + run: echo ${{ steps.docker_build.outputs.digest }} From 9e1e4bc54864a61492ed93fc8e5bd683653836c9 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Thu, 26 May 2022 17:52:50 +0100 Subject: [PATCH 10/29] :construction_worker: Prepare for merge --- .github/workflows/docker.yml | 2 -- .gitpod.yml | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5634b194..2259f3c8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -4,8 +4,6 @@ on: push: branches: - master - # testing now - - trallard/* jobs: build: diff --git a/.gitpod.yml b/.gitpod.yml index b93355c7..b2ae493e 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -11,29 +11,29 @@ tasks: # -------------------------------------------------------- # exposing ports ports: -- port: 9323 -- port: 8888 + - port: 9323 + - port: 8888 # -------------------------------------------------------- -# using prebuilds for the container -# With this configuration the prebuild will happen on push to master +# using prebuilds for the container +# With this configuration the prebuild will happen on push to master github: prebuilds: # enable for main/default branch master: true - # enable for other branches (defaults to false) - branches: false - # enable for pull requests coming from this repo (defaults to true) + # enable for other branches (defaults to false) + branches: false + # enable for pull requests coming from this repo (defaults to true) # need to change - pullRequests: true + pullRequests: false # enable for pull requests coming from forks (defaults to false) pullRequestsFromForks: false # add a check to pull requests (defaults to true) - addCheck: false + addCheck: true # add a "Review in Gitpod" button as a comment to pull requests (defaults to false) # need to change - addComment: true + addComment: false # add a "Review in Gitpod" button to the pull request's description (defaults to false) addBadge: false # add a label once the prebuild is ready to pull requests (defaults to false) - addLabel: false \ No newline at end of file + addLabel: false From 2d1a4067190c3619f5998bebe75b118e4d282cc5 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Thu, 26 May 2022 17:57:34 +0100 Subject: [PATCH 11/29] :wrench: Gitpod to use the Docker image --- .github/workflows/docker.yml | 2 +- .gitpod.yml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2259f3c8..d772c75f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -10,7 +10,7 @@ jobs: name: Build Gitpod Docker image runs-on: ubuntu-latest environment: a11y-dev - if: "github.repository_owner == 'Quansight-Labs' && !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip github]')" + if: "github.repository_owner == 'jupyter' && !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip github]')" steps: - name: Clone repository ⚡ uses: actions/checkout@v3 diff --git a/.gitpod.yml b/.gitpod.yml index b2ae493e..e65a94c1 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,12 +1,13 @@ -image: - file: testing/tools/gitpod/Dockerfile +image: quansight/jupyter-a11y:latest tasks: - name: Install JupyterLab Node.js testing dependencies init: | cd testing/jupyterlab + echo " 📦 Installing node dependencies " yarn install cd workspace/a11y + echo "🚀 All ready" # -------------------------------------------------------- # exposing ports From 4cb85f681d884ebda913ef4f0fdb99a224a9ed2b Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Thu, 26 May 2022 11:13:00 -0700 Subject: [PATCH 12/29] Create testing script documentation --- testing/scripts/jupyterlab-testing-scripts.md | 98 +++++++++++++++++++ testing/scripts/testing-script-template.md | 30 ++++++ 2 files changed, 128 insertions(+) create mode 100644 testing/scripts/jupyterlab-testing-scripts.md create mode 100644 testing/scripts/testing-script-template.md diff --git a/testing/scripts/jupyterlab-testing-scripts.md b/testing/scripts/jupyterlab-testing-scripts.md new file mode 100644 index 00000000..c40bf461 --- /dev/null +++ b/testing/scripts/jupyterlab-testing-scripts.md @@ -0,0 +1,98 @@ +# JupyterLab Testing Scripts + +This is a series of [testing scripts](). designed to mimic common manual accessibility tests in an automated testing setting for JupyterLab. They currently reference [WCAG 2.1](), but ideally will be updated for future versions of WCAG or to align with [ACT-rules](). + +Those unfamiliar with manual testing techniques may also find these scripts helpful in understanding what to do and observe in a manual testing setting as well. + +Different scripts apply to different levels of JupyterLab (ie. the whole application versus a single extension). The ideal implementation of these tests is noted in their `Proposed JupyterLab success criteria` section. + +## Test proposals + +### [1.3.4 - Orientation](https://www.w3.org/WAI/WCAG21/quickref/#orientation) + +#### Proposed JupyterLab success criteria + +JupyterLab is responsive. When switched to portrait orientation or viewed on mobile, no UI content is lost. + +This can be tested on the whole JupyterLab application. + +#### Proposed testing script + +| Step | Expected Behavior | +|-----|-----| +| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | +| 2. Set viewport orientation to portrait (And/or mobile viewport?) | JupyterLab accepts the orientation change and doesn't error out. | +| 3. Check menu bar is in expected location | Menu bar is at the top of the page and have all menu items visible (currently it has a scroll bar).| +| 4. Check left side bar is in expected location | Left side bar is the leftmost part of the viewport . It stretches from the menu bar to status bar. All icons are visible. | +| 5. Check document area is in expected location | Document area is the center and majority of the viewport. | +| 6. Check document area toolbar is in expected location | The document area toolbar is at the top of the document area. All items are visible (currently it has a scroll bar).| +| 7. Check right side bar is in expected location | Right side bar is the rightmost part of the viewport. It stretches from the menu bar to status bar. All icons are visible. (Right now, I believe this side bar is not able to be accessed in this mode.) | +| 8. Check status bar is in expected location | The status bar is at the bottom of the page. All information is visible.| +| 9. Success if all main regions are in expected location | | + +### [2.1.2 No keyboard trap](https://www.w3.org/WAI/WCAG21/quickref/#no-keyboard-trap) + +#### Proposed JupyterLab success criteria + +Focusable areas in JupyterLab can all be unfocused. + +This can be tested on multiple regions of JupyterLab. For example, this script will test that JupyterLab's menu bar can be focused and unfocused. + +#### Proposed testing script + +| Step | Expected Behavior | +|-----|-----| +| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | +| 2. Start focus at top of tree | Focus goes to JupyterLab tab, may hit skip link. | +| 3. Tab into menu bar | Focus goes to menu bar (whole). | +| 4. Open file menu | Focus goes to File menu (within menu bar). Menu bar opens full list of menu items. | +| 5. Close file menu | Focus stays on File menu, but menu bar is closed. | +| 6. Tab out of menu bar | Focus moves from File menu, to other menu items until it leaves the region. Focus will move the left side bar/file browser. | +| 7. Success if focus switches to side bar/file browser | | + + +### [2.4.3 Focus Order](https://www.w3.org/WAI/WCAG21/quickref/#focus-order) + +#### Proposed JupyterLab success criteria + +In JupyterLab, areas can be focused in the following order: + +1. Skip link +2. Menu bar +3. Left side bar +4. Inside left side bar (selected section) +5. Top of document area (document toolbar first if it has one) +6. Document (if there is no toolbar for the document type, users go immediately into the document) +7. Right side bar +8. Inside right side bar (selected section) +9. Status bar + +This can be tested on the whole JupyterLab application. + +#### Proposed testing script + +| Step | Expected Behavior | +|-----|-----| +| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | +| 2. Tab to focus menu bar | Tab until focus is on the menu bar. (Will this run into the skip link?) | +| 3. Tab through major regions as needed (see above section) | Tab to move focus through left side bar, inside left side bar, top of document area, document area, right side bar, and inside right side bar. | +| 4. Tab to focus status bar | Focus moves to status bar. | +| 5. Success if tab brings focus to status bar | | + +### [2.5.6 Concurrent input mechanisms](https://www.w3.org/WAI/WCAG21/quickref/#concurrent-input-mechanisms) + +#### Proposed JupyterLab success criteria + +In JupyterLab, a single task can be completed using mouse, keyboard, and touch screen inputs. This works even when completing a single continuous task. + +This can be tested on multiple regions of JupyterLab. For example, this script will test that JupyterLab can open a new notebook from the launcher with mouse, keyboard, and touch screen inputs. + +#### Proposed testing script + +| Step | Expected Behavior | +|-----|-----| +| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | +| 2. Open the file menu with a mouse click | File menu opens and full list of menu items appears. | +| 3. Navigate to menu item New Launcher with arrow keys | Focus moves through the File menu list items until it reaches the New Launcher item. | +| 4. Use touch screen input to create new Notebook from Launcher | The New Notebook from Launcher is selected and the command is initiated. | +| 5. Success if new notebook opens | | \ No newline at end of file diff --git a/testing/scripts/testing-script-template.md b/testing/scripts/testing-script-template.md new file mode 100644 index 00000000..782bfa2e --- /dev/null +++ b/testing/scripts/testing-script-template.md @@ -0,0 +1,30 @@ +# Testing Script Template + +## Template + +### [#.#.# - WCAG Title](https://www.w3.org/WAI/WCAG21/quickref/#) + +What accessibility experience does this reference? This doesn't have to be WCAG. Update link to include reference. + +#### Proposed JupyterLab success criteria + +What needs to happen for it to be accessible? A 1–2 sentence statement describing the successful behavior. + +Where should this be tested? The second paragraph describes on what level of the test is to be applied. For example, is this a behavior we expect to happen on the whole application, in some part of the application, in multiple individual parts of the application, or the like. + +#### Proposed testing script + +| Step | Expected Behavior | +|-----|-----| +| 1. What needs to happen to get from the beginning to the end? Steps are numbered | What happens if things go correctly? Expected behavior describes successful checkpoints for this step in the script.| +| 2. | | +| 3. | | +| 4. | | +| 5. | | +| 6. | | +| 7. | | +| 8. | | +| 9. | | +| 10. | | + +Scripts can have as many or as few steps as needed to complete the task. Some steps may not need expected behavior, but try to add expected behavior as consistently as possible. \ No newline at end of file From 628f045f88c4c36aefb50259491b56eddafefb41 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Thu, 26 May 2022 11:26:57 -0700 Subject: [PATCH 13/29] Fix typo --- testing/scripts/testing-script-template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/scripts/testing-script-template.md b/testing/scripts/testing-script-template.md index 782bfa2e..4239ab5e 100644 --- a/testing/scripts/testing-script-template.md +++ b/testing/scripts/testing-script-template.md @@ -6,7 +6,7 @@ What accessibility experience does this reference? This doesn't have to be WCAG. Update link to include reference. -#### Proposed JupyterLab success criteria +#### Proposed success criteria What needs to happen for it to be accessible? A 1–2 sentence statement describing the successful behavior. From 08aaeab3a71f2fc38d46ba240683361ae400ed5a Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 27 May 2022 13:31:50 +0100 Subject: [PATCH 14/29] :heavy_plus_sign: Update dependencies install --- .gitpod.yml | 3 ++- testing/tools/Dockerfile | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index e65a94c1..393d2e0f 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -6,7 +6,8 @@ tasks: cd testing/jupyterlab echo " 📦 Installing node dependencies " yarn install - cd workspace/a11y + npx playwright install + cd workspace/accessibility echo "🚀 All ready" # -------------------------------------------------------- diff --git a/testing/tools/Dockerfile b/testing/tools/Dockerfile index 167830cc..04e7e76e 100644 --- a/testing/tools/Dockerfile +++ b/testing/tools/Dockerfile @@ -30,7 +30,6 @@ ARG JUPYTER_APP=jupyterlab # base HOME for all things in gitpod ENV DEBIAN_FRONTEND=noninteractive ENV GITPOD_HOME=/home/gitpod \ - WORKSPACE=/workspace/a11y \ USER=gitpod \ GITPOD_GIUD=33333 From 3ccdd9fa8ec623bb74c20c604835350ad3ed92fd Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 27 May 2022 13:34:11 +0100 Subject: [PATCH 15/29] :pencil2: Fix md warning --- testing/jupyterlab/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/jupyterlab/README.md b/testing/jupyterlab/README.md index 36149d55..eb57532d 100644 --- a/testing/jupyterlab/README.md +++ b/testing/jupyterlab/README.md @@ -55,7 +55,7 @@ by modifying the [`playwright.config.ts`](testing/jupyterlab/playwright.config.t ``` Your console should output a local URL that you can open in your browser to see -the test results: typically http://127.0.0.1:9323 +the test results: typically ### :cloud: Running in Gitpod From daf142708a2c5f1966b1a2d3a5c824881ede7246 Mon Sep 17 00:00:00 2001 From: Tania Allard Date: Fri, 27 May 2022 12:43:28 +0000 Subject: [PATCH 16/29] Add vscode extensions --- .gitpod.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index 393d2e0f..534fe02f 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -7,8 +7,8 @@ tasks: echo " 📦 Installing node dependencies " yarn install npx playwright install - cd workspace/accessibility - echo "🚀 All ready" + echo "🚀 Dependencies installed " + cd /workspace/accessibility/ # -------------------------------------------------------- # exposing ports @@ -16,6 +16,14 @@ ports: - port: 9323 - port: 8888 +# some useful extensions to have +vscode: + extensions: + - eamodio.gitlens + - ms-python.python + - yzhang.markdown-all-in-one + - bungcip.better-toml + # -------------------------------------------------------- # using prebuilds for the container # With this configuration the prebuild will happen on push to master @@ -36,6 +44,6 @@ github: # need to change addComment: false # add a "Review in Gitpod" button to the pull request's description (defaults to false) - addBadge: false + addBadge: true # add a label once the prebuild is ready to pull requests (defaults to false) addLabel: false From a26df3c5d2dcf10ec85137bc0ad4211c1e0bb342 Mon Sep 17 00:00:00 2001 From: gabalafou Date: Fri, 27 May 2022 10:25:57 -0500 Subject: [PATCH 17/29] Test script: cycle tab (#2) Co-authored-by: Tania Allard --- .../jupyterlab/tests/tab-loop-no-trap.test.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 testing/jupyterlab/tests/tab-loop-no-trap.test.ts diff --git a/testing/jupyterlab/tests/tab-loop-no-trap.test.ts b/testing/jupyterlab/tests/tab-loop-no-trap.test.ts new file mode 100644 index 00000000..e770d97c --- /dev/null +++ b/testing/jupyterlab/tests/tab-loop-no-trap.test.ts @@ -0,0 +1,55 @@ +/** + * This test checks whether a user, starting from the top and only pressing the + * tab key, can tab through the entire app and return to where they started. + * + * This means that a first-level tab-through of the app encounters no keyboard + * traps. + */ + +import { expect } from "@playwright/test"; +import { test } from "@jupyterlab/galata"; + +test.describe("when pressing tab key repeatedly", () => { + test("should cycle through elements back to the start", async ({ page }) => { + await page.keyboard.press("Tab"); + // The first element we tab to will be used as reference point of + // comparison. + const firstElementTabbedTo = await page.evaluateHandle( + "document.activeElement" + ); + let encounteredFirstElementAgain = false; + let encounteredOtherElement = false; + // i < 100 is arbitrary; however, this test should certainly fail if the + // user has to tab more 100 times to return to the top. + for (let i = 0; i < 100; i++) { + await page.keyboard.press("Tab"); + const sameActiveElement = (el) => el === document.activeElement; + // Is the element that we are currently tabbed on the same as the first + // element that we tabbed to earlier? + const currentIsFirst = await page.evaluate( + sameActiveElement, + firstElementTabbedTo + ); + if (currentIsFirst) { + encounteredFirstElementAgain = true; + } else { + // If we do not check whether the user encounters another element while + // tabbing, then the test would pass even if the first element they + // tabbed to was a tab trap. + encounteredOtherElement = true; + } + if (encounteredFirstElementAgain) { + firstElementTabbedTo.dispose(); + break; + } + } + expect( + encounteredFirstElementAgain, + "should have cycled back to first element" + ).toBe(true); + expect( + encounteredOtherElement, + "should have tabbed through at least one other element" + ).toBe(true); + }); +}); From 88aac588d54b4854507b5ab8016ee5cb07213006 Mon Sep 17 00:00:00 2001 From: Isabela Presedo-Floyd <50221806+isabela-pf@users.noreply.github.com> Date: Fri, 27 May 2022 13:22:42 -0700 Subject: [PATCH 18/29] Apply suggestions from @trallard Co-authored-by: Tania Allard --- statement.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/statement.md b/statement.md index bc1cb472..60c729ff 100644 --- a/statement.md +++ b/statement.md @@ -3,7 +3,7 @@ ## Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) -## ⚠️ Draft Accessibility Statement for JupyterLab +## :construction: Draft Accessibility Statement for JupyterLab This is an accessibility statement from Jupyter accessibility contributors. @@ -52,11 +52,11 @@ These technologies are relied upon for conformance with the accessibility standa Despite our best efforts to ensure accessibility of JupyterLab, there may be some limitations. Below is a description of known limitations, and potential solutions. Please contact us if you observe an issue not listed below. -Known limitations for JupyterLab: +**Known limitations for JupyterLab:** -1. **Documents**: Documents writen by the community may not include accessible content because we do not and cannot review every document that can be opened in JupyterLab. To support accessible documents, we are drafting guidelines for accessible document content with an emphasis on Jupyter notebooks. Please report the issue to the author and [open an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) describing the problem and the behavior you expect so we may integrate it into our content guidelines. +1. **Documents**: Documents written by the community may not include accessible content because we do not and cannot review every document that can be opened and edited in JupyterLab. To support accessible documents, we are drafting guidelines for accessible document content with an emphasis on Jupyter notebooks. Please report the issue to the author and [open an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) describing the problem and the behavior you expect so we may integrate it into our content guidelines. -2. **JupyterLab extensions**: JupyterLab extensions writen by the community may not be accessible because JupyterLab extensions can be written by anyone in the community and have no required review process. We do not and can not review every JupyterLab extension. To support accessible extensions, we encourage extension authors to use existing, accessible JupyterLab components for their extension. We also provide periodic opportunities for community education on accessibility. Please report the issue to the author and let them know the [jupyter/accessibility](https://github.com/jupyter/accessibility/) community may be able to provide guidance. +2. **JupyterLab extensions**: JupyterLab extensions written by the community may not be accessible because JupyterLab extensions can be written by anyone in the community and have no standard review process. We do not and can not review every JupyterLab extension. To support accessible extensions, we encourage extension authors to use existing, accessible JupyterLab components for their extensions. We also provide periodic opportunities for community education on accessibility. Please report the issue to the author and let them know the [jupyter/accessibility](https://github.com/jupyter/accessibility/) community may be able to provide guidance. ### Assessment approach @@ -64,13 +64,12 @@ Jupyter accessibility contributors assessed the accessibility of JupyterLab by t * Self-evaluation * Regular automated testing to monitor for regressions (can be found at [jupyter/accessibility](https://github.com/jupyter/accessibility) -* User feedback +* User feedback ### Evaluation report An evaluation for JupyterLab is available at: [jupyterlab/jupyterlab/issues/9399](https://github.com/jupyterlab/jupyterlab/issues/9399). -### Evaluation report User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupyterlab label `tag:accessibility`](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility). From 28a1a9133882a3f68c5f144a1e0944a34e4050b3 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Fri, 27 May 2022 14:05:17 -0700 Subject: [PATCH 19/29] Apply suggestions from @trallard and @gabalafou --- statement.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/statement.md b/statement.md index 60c729ff..74facf10 100644 --- a/statement.md +++ b/statement.md @@ -5,7 +5,7 @@ ## :construction: Draft Accessibility Statement for JupyterLab -This is an accessibility statement from Jupyter accessibility contributors. +This is an accessibility statement from Jupyter accessibility contributors. ### Measures to support accessibility @@ -15,18 +15,25 @@ Jupyter accessibility contributors take the following measures to ensure accessi * Provide continual accessibility training for our community. * Assign clear accessibility goals and responsibilities. * Employ formal accessibility quality assurance methods. +* Document changes, approaches, and improvements to the above methods and to JupyterLab itself. ### Conformance status -The Web Content Accessibility Guidelines (WCAG) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not conform the accessibility standard. +The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not meet the accessibility standard. -### Feedback +[Picture accessibility compliance levels as mountains. The first peak to reach is AA. This includes both A and AA criteria. Behind it, in the mist, there is a larger peak, AAA. That one is not always completely reachable--Marie Guillaumet, Access42](https://stephaniewalter.design/wp-content/uploads/2022/05/stephaniewalter-sommets-de-l-accessibilite.jpg) -We welcome your feedback on the accessibility of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: +*By [Stéphanie Walter](https://stephaniewalter.design) ([Source](https://stephaniewalter.design/blog/5-illustrations-to-understand-and-promote-accessibility/))* + +### Feedback and Formal complaints + +We welcome your feedback and formal complaints on the accessibility status of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: * [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) * [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) +At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. + ### Compatibility with browsers and assistive technology JupyterLab is designed to be compatible with the following technologies: @@ -73,11 +80,6 @@ An evaluation for JupyterLab is available at: [jupyterlab/jupyterlab/issues/9399 User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupyterlab label `tag:accessibility`](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility). -### Formal complaints - -* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) -* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) and request it be labeled tag:accessibility. - ### Date This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/). \ No newline at end of file From 8be4051b32b0c7f314d34c1938f5e7fb03e88640 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Fri, 27 May 2022 14:26:26 -0700 Subject: [PATCH 20/29] Apply suggestions from @trallard and @gabalafou --- statement.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/statement.md b/statement.md index 74facf10..5a782813 100644 --- a/statement.md +++ b/statement.md @@ -17,11 +17,13 @@ Jupyter accessibility contributors take the following measures to ensure accessi * Employ formal accessibility quality assurance methods. * Document changes, approaches, and improvements to the above methods and to JupyterLab itself. +For more information on current efforts to improve JupyterLab's accessibility, visit the [JupyterLab accessibility grant roadmap](https://jupyter-a11y.netlify.app/roadmap/intro.html). + ### Conformance status The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not meet the accessibility standard. -[Picture accessibility compliance levels as mountains. The first peak to reach is AA. This includes both A and AA criteria. Behind it, in the mist, there is a larger peak, AAA. That one is not always completely reachable--Marie Guillaumet, Access42](https://stephaniewalter.design/wp-content/uploads/2022/05/stephaniewalter-sommets-de-l-accessibilite.jpg) +![Picture accessibility compliance levels as mountains. The first peak to reach is AA. This includes both A and AA criteria. Behind it, in the mist, there is a larger peak, AAA. That one is not always completely reachable--Marie Guillaumet, Access42](https://stephaniewalter.design/wp-content/uploads/2022/05/stephaniewalter-sommets-de-l-accessibilite.jpg) *By [Stéphanie Walter](https://stephaniewalter.design) ([Source](https://stephaniewalter.design/blog/5-illustrations-to-understand-and-promote-accessibility/))* @@ -34,6 +36,8 @@ We welcome your feedback and formal complaints on the accessibility status of Ju At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. +Please note that JupyterLab is an open-source project and that Jupyter accessibility contributors are a group defined on a voluntary basis. Like many other open-source projects, we cannot guarantee how long it may take to respond to and resolve an issue, though we do make an effort to do it as quickly as is possible with our resources. + ### Compatibility with browsers and assistive technology JupyterLab is designed to be compatible with the following technologies: @@ -82,4 +86,4 @@ User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupy ### Date -This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/). \ No newline at end of file +This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. \ No newline at end of file From 75f2ff393365054d2340770ab044dd2c93442e76 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Fri, 27 May 2022 14:27:45 -0700 Subject: [PATCH 21/29] Move statement to docs/resources --- docs/{ => resources}/statement.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{ => resources}/statement.md (100%) diff --git a/docs/statement.md b/docs/resources/statement.md similarity index 100% rename from docs/statement.md rename to docs/resources/statement.md From e6dfb68729cc3d7e699d48855bac488634850c66 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Fri, 27 May 2022 17:59:30 -0700 Subject: [PATCH 22/29] Fix broken links and clean up punctuation --- testing/scripts/jupyterlab-testing-scripts.md | 50 +++++++++---------- testing/scripts/testing-script-template.md | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/testing/scripts/jupyterlab-testing-scripts.md b/testing/scripts/jupyterlab-testing-scripts.md index c40bf461..48b74901 100644 --- a/testing/scripts/jupyterlab-testing-scripts.md +++ b/testing/scripts/jupyterlab-testing-scripts.md @@ -1,6 +1,6 @@ # JupyterLab Testing Scripts -This is a series of [testing scripts](). designed to mimic common manual accessibility tests in an automated testing setting for JupyterLab. They currently reference [WCAG 2.1](), but ideally will be updated for future versions of WCAG or to align with [ACT-rules](). +This is a series of [testing scripts](https://en.wikipedia.org/wiki/Test_script). designed to mimic common manual accessibility tests in an automated testing setting for JupyterLab. They currently reference [WCAG 2.1](https://www.w3.org/TR/WCAG21/), but ideally will be updated for future versions of WCAG or to align with [ACT-rules](https://act-rules.github.io/rules/). Those unfamiliar with manual testing techniques may also find these scripts helpful in understanding what to do and observe in a manual testing setting as well. @@ -20,15 +20,15 @@ This can be tested on the whole JupyterLab application. | Step | Expected Behavior | |-----|-----| -| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | -| 2. Set viewport orientation to portrait (And/or mobile viewport?) | JupyterLab accepts the orientation change and doesn't error out. | -| 3. Check menu bar is in expected location | Menu bar is at the top of the page and have all menu items visible (currently it has a scroll bar).| -| 4. Check left side bar is in expected location | Left side bar is the leftmost part of the viewport . It stretches from the menu bar to status bar. All icons are visible. | -| 5. Check document area is in expected location | Document area is the center and majority of the viewport. | -| 6. Check document area toolbar is in expected location | The document area toolbar is at the top of the document area. All items are visible (currently it has a scroll bar).| -| 7. Check right side bar is in expected location | Right side bar is the rightmost part of the viewport. It stretches from the menu bar to status bar. All icons are visible. (Right now, I believe this side bar is not able to be accessed in this mode.) | -| 8. Check status bar is in expected location | The status bar is at the bottom of the page. All information is visible.| -| 9. Success if all main regions are in expected location | | +| 1. Open default JupyterLab. | JupyterLab opens with unmodified workspace. | +| 2. Set viewport orientation to portrait (And/or mobile viewport?). | JupyterLab accepts the orientation change and doesn't error out. | +| 3. Check menu bar is in expected locatio.n | Menu bar is at the top of the page and have all menu items visible (currently it has a scroll bar).| +| 4. Check left side bar is in expected location. | Left side bar is the leftmost part of the viewport . It stretches from the menu bar to status bar. All icons are visible. | +| 5. Check document area is in expected location. | Document area is the center and majority of the viewport. | +| 6. Check document area toolbar is in expected location. | The document area toolbar is at the top of the document area. All items are visible (currently it has a scroll bar).| +| 7. Check right side bar is in expected location. | Right side bar is the rightmost part of the viewport. It stretches from the menu bar to status bar. All icons are visible. (Right now, I believe this side bar is not able to be accessed in this mode.) | +| 8. Check status bar is in expected location. | The status bar is at the bottom of the page. All information is visible.| +| 9. Success if all main regions are in expected location. | | ### [2.1.2 No keyboard trap](https://www.w3.org/WAI/WCAG21/quickref/#no-keyboard-trap) @@ -42,13 +42,13 @@ This can be tested on multiple regions of JupyterLab. For example, this script w | Step | Expected Behavior | |-----|-----| -| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | -| 2. Start focus at top of tree | Focus goes to JupyterLab tab, may hit skip link. | -| 3. Tab into menu bar | Focus goes to menu bar (whole). | -| 4. Open file menu | Focus goes to File menu (within menu bar). Menu bar opens full list of menu items. | -| 5. Close file menu | Focus stays on File menu, but menu bar is closed. | -| 6. Tab out of menu bar | Focus moves from File menu, to other menu items until it leaves the region. Focus will move the left side bar/file browser. | -| 7. Success if focus switches to side bar/file browser | | +| 1. Open default JupyterLab. | JupyterLab opens with unmodified workspace. | +| 2. Start focus at top of tree. | Focus goes to JupyterLab tab, may hit skip link. | +| 3. Tab into menu bar. | Focus goes to menu bar (whole). | +| 4. Open file menu. | Focus goes to File menu (within menu bar). Menu bar opens full list of menu items. | +| 5. Close file menu. | Focus stays on File menu, but menu bar is closed. | +| 6. Tab out of menu bar. | Focus moves from File menu, to other menu items until it leaves the region. Focus will move the left side bar/file browser. | +| 7. Success if focus switches to side bar/file browser. | | ### [2.4.3 Focus Order](https://www.w3.org/WAI/WCAG21/quickref/#focus-order) @@ -73,11 +73,11 @@ This can be tested on the whole JupyterLab application. | Step | Expected Behavior | |-----|-----| -| 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | -| 2. Tab to focus menu bar | Tab until focus is on the menu bar. (Will this run into the skip link?) | -| 3. Tab through major regions as needed (see above section) | Tab to move focus through left side bar, inside left side bar, top of document area, document area, right side bar, and inside right side bar. | +| 1. Open default JupyterLab. | JupyterLab opens with unmodified workspace. | +| 2. Tab to focus menu bar. | Tab until focus is on the menu bar. (Will this run into the skip link?) | +| 3. Tab through major regions as needed (see above section). | Tab to move focus through left side bar, inside left side bar, top of document area, document area, right side bar, and inside right side bar. | | 4. Tab to focus status bar | Focus moves to status bar. | -| 5. Success if tab brings focus to status bar | | +| 5. Success if tab brings focus to status bar. | | ### [2.5.6 Concurrent input mechanisms](https://www.w3.org/WAI/WCAG21/quickref/#concurrent-input-mechanisms) @@ -92,7 +92,7 @@ This can be tested on multiple regions of JupyterLab. For example, this script w | Step | Expected Behavior | |-----|-----| | 1. Open default JupyterLab | JupyterLab opens with unmodified workspace. | -| 2. Open the file menu with a mouse click | File menu opens and full list of menu items appears. | -| 3. Navigate to menu item New Launcher with arrow keys | Focus moves through the File menu list items until it reaches the New Launcher item. | -| 4. Use touch screen input to create new Notebook from Launcher | The New Notebook from Launcher is selected and the command is initiated. | -| 5. Success if new notebook opens | | \ No newline at end of file +| 2. Open the file menu with a mouse click. | File menu opens and full list of menu items appears. | +| 3. Navigate to menu item New Launcher with arrow keys. | Focus moves through the File menu list items until it reaches the New Launcher item. | +| 4. Use touch screen input to create new Notebook from Launcher. | The New Notebook from Launcher is selected and the command is initiated. | +| 5. Success if new notebook opens. | | \ No newline at end of file diff --git a/testing/scripts/testing-script-template.md b/testing/scripts/testing-script-template.md index 4239ab5e..129d95ee 100644 --- a/testing/scripts/testing-script-template.md +++ b/testing/scripts/testing-script-template.md @@ -27,4 +27,4 @@ Where should this be tested? The second paragraph describes on what level of the | 9. | | | 10. | | -Scripts can have as many or as few steps as needed to complete the task. Some steps may not need expected behavior, but try to add expected behavior as consistently as possible. \ No newline at end of file +Scripts can have as many or as few steps as needed to complete the task. Some steps may not need expected behavior, but try to add expected behavior as it can help implementation. \ No newline at end of file From 7af9f714ddd671ca6b6e5f08630efe803be31b65 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Fri, 27 May 2022 18:04:01 -0700 Subject: [PATCH 23/29] Fix more typos --- testing/scripts/jupyterlab-testing-scripts.md | 4 ++-- testing/scripts/testing-script-template.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/scripts/jupyterlab-testing-scripts.md b/testing/scripts/jupyterlab-testing-scripts.md index 48b74901..e43411a2 100644 --- a/testing/scripts/jupyterlab-testing-scripts.md +++ b/testing/scripts/jupyterlab-testing-scripts.md @@ -22,7 +22,7 @@ This can be tested on the whole JupyterLab application. |-----|-----| | 1. Open default JupyterLab. | JupyterLab opens with unmodified workspace. | | 2. Set viewport orientation to portrait (And/or mobile viewport?). | JupyterLab accepts the orientation change and doesn't error out. | -| 3. Check menu bar is in expected locatio.n | Menu bar is at the top of the page and have all menu items visible (currently it has a scroll bar).| +| 3. Check menu bar is in expected location. | Menu bar is at the top of the page and have all menu items visible (currently it has a scroll bar).| | 4. Check left side bar is in expected location. | Left side bar is the leftmost part of the viewport . It stretches from the menu bar to status bar. All icons are visible. | | 5. Check document area is in expected location. | Document area is the center and majority of the viewport. | | 6. Check document area toolbar is in expected location. | The document area toolbar is at the top of the document area. All items are visible (currently it has a scroll bar).| @@ -83,7 +83,7 @@ This can be tested on the whole JupyterLab application. #### Proposed JupyterLab success criteria -In JupyterLab, a single task can be completed using mouse, keyboard, and touch screen inputs. This works even when completing a single continuous task. +In JupyterLab, a single task can be completed using mouse, keyboard, and touch screen inputs. This works even when completing a single, continuous task. This can be tested on multiple regions of JupyterLab. For example, this script will test that JupyterLab can open a new notebook from the launcher with mouse, keyboard, and touch screen inputs. diff --git a/testing/scripts/testing-script-template.md b/testing/scripts/testing-script-template.md index 129d95ee..e5b36dbd 100644 --- a/testing/scripts/testing-script-template.md +++ b/testing/scripts/testing-script-template.md @@ -16,7 +16,7 @@ Where should this be tested? The second paragraph describes on what level of the | Step | Expected Behavior | |-----|-----| -| 1. What needs to happen to get from the beginning to the end? Steps are numbered | What happens if things go correctly? Expected behavior describes successful checkpoints for this step in the script.| +| 1. What needs to happen to get from the beginning to the end? Steps are numbered. | What happens if things go correctly? Expected behavior describes successful checkpoints for this step in the script.| | 2. | | | 3. | | | 4. | | From ff90b156815dbc0c89b73b307322c8f5f515a6cf Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Mon, 30 May 2022 06:33:44 -0700 Subject: [PATCH 24/29] Cross link testing script resources --- testing/scripts/jupyterlab-testing-scripts.md | 2 ++ testing/scripts/testing-script-template.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/testing/scripts/jupyterlab-testing-scripts.md b/testing/scripts/jupyterlab-testing-scripts.md index e43411a2..db289638 100644 --- a/testing/scripts/jupyterlab-testing-scripts.md +++ b/testing/scripts/jupyterlab-testing-scripts.md @@ -6,6 +6,8 @@ Those unfamiliar with manual testing techniques may also find these scripts help Different scripts apply to different levels of JupyterLab (ie. the whole application versus a single extension). The ideal implementation of these tests is noted in their `Proposed JupyterLab success criteria` section. +If you are writing a testing script, please review the [Testing Script Template](testing-script-template.md) for more information. + ## Test proposals ### [1.3.4 - Orientation](https://www.w3.org/WAI/WCAG21/quickref/#orientation) diff --git a/testing/scripts/testing-script-template.md b/testing/scripts/testing-script-template.md index e5b36dbd..ebb9c698 100644 --- a/testing/scripts/testing-script-template.md +++ b/testing/scripts/testing-script-template.md @@ -2,6 +2,8 @@ ## Template +For examples of this template in use, please review the [JupyterLab Testing Scripts](jupyterlab-testing-scripts.md). + ### [#.#.# - WCAG Title](https://www.w3.org/WAI/WCAG21/quickref/#) What accessibility experience does this reference? This doesn't have to be WCAG. Update link to include reference. From 4935fbce2280e95202c42a53610f182c3dc83518 Mon Sep 17 00:00:00 2001 From: Isabela Presedo-Floyd <50221806+isabela-pf@users.noreply.github.com> Date: Mon, 30 May 2022 10:21:08 -0700 Subject: [PATCH 25/29] Apply suggestions from @trallard Co-authored-by: Tania Allard --- statement.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/statement.md b/statement.md index 5a782813..c28411b6 100644 --- a/statement.md +++ b/statement.md @@ -3,7 +3,7 @@ ## Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) -## :construction: Draft Accessibility Statement for JupyterLab +## 🚧 Draft Accessibility Statement for JupyterLab This is an accessibility statement from Jupyter accessibility contributors. @@ -86,4 +86,4 @@ User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupy ### Date -This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. \ No newline at end of file +This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. From 906e6a6ea8fcacd0af5a38ead65a3e35760a01ad Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Mon, 30 May 2022 10:42:05 -0700 Subject: [PATCH 26/29] Add research and intertwined ecossytem notes --- statement.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/statement.md b/statement.md index c28411b6..80adee3b 100644 --- a/statement.md +++ b/statement.md @@ -27,12 +27,15 @@ The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standar *By [Stéphanie Walter](https://stephaniewalter.design) ([Source](https://stephaniewalter.design/blog/5-illustrations-to-understand-and-promote-accessibility/))* +JupyterLab's accessibility does not exist in isolation. JupyterLab inherits much from the many projects it is built upon and its accessibility conformance may impact projects built off of JupyterLab or its components. The accessibility of this ecosystem is interlinked, so conformance may need to be resolved at different levels in order to impact JupyterLab positively. + ### Feedback and Formal complaints We welcome your feedback and formal complaints on the accessibility status of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: * [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) * [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) +* If you are interested in being part of any potential research or organized feedback initiatives, please ___. Gauging community interest in user research participation helps us gain the support to make it happen. At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. From a0d03550d12f459e674dab08b419d79e6dfa0459 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Thu, 2 Jun 2022 11:07:17 -0700 Subject: [PATCH 27/29] Add feedback contact and reorder based on @gabalafou's feedback --- statement.md | 58 ++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/statement.md b/statement.md index 80adee3b..bc6171c6 100644 --- a/statement.md +++ b/statement.md @@ -1,23 +1,10 @@ -# JupyterLab Accessibility Statement +# 🚧 Draft Accessibility Statement for JupyterLab -## Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) - - -## 🚧 Draft Accessibility Statement for JupyterLab +Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) This is an accessibility statement from Jupyter accessibility contributors. -### Measures to support accessibility - -Jupyter accessibility contributors take the following measures to ensure accessibility of JupyterLab: - -* Include accessibility as part of our mission statement. -* Provide continual accessibility training for our community. -* Assign clear accessibility goals and responsibilities. -* Employ formal accessibility quality assurance methods. -* Document changes, approaches, and improvements to the above methods and to JupyterLab itself. - -For more information on current efforts to improve JupyterLab's accessibility, visit the [JupyterLab accessibility grant roadmap](https://jupyter-a11y.netlify.app/roadmap/intro.html). +## The current state of JupyterLab ### Conformance status @@ -29,18 +16,6 @@ The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standar JupyterLab's accessibility does not exist in isolation. JupyterLab inherits much from the many projects it is built upon and its accessibility conformance may impact projects built off of JupyterLab or its components. The accessibility of this ecosystem is interlinked, so conformance may need to be resolved at different levels in order to impact JupyterLab positively. -### Feedback and Formal complaints - -We welcome your feedback and formal complaints on the accessibility status of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: - -* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) -* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) -* If you are interested in being part of any potential research or organized feedback initiatives, please ___. Gauging community interest in user research participation helps us gain the support to make it happen. - -At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. - -Please note that JupyterLab is an open-source project and that Jupyter accessibility contributors are a group defined on a voluntary basis. Like many other open-source projects, we cannot guarantee how long it may take to respond to and resolve an issue, though we do make an effort to do it as quickly as is possible with our resources. - ### Compatibility with browsers and assistive technology JupyterLab is designed to be compatible with the following technologies: @@ -84,9 +59,34 @@ Jupyter accessibility contributors assessed the accessibility of JupyterLab by t An evaluation for JupyterLab is available at: [jupyterlab/jupyterlab/issues/9399](https://github.com/jupyterlab/jupyterlab/issues/9399). - User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupyterlab label `tag:accessibility`](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility). +## What the community is doing + +### Measures to support accessibility + +Jupyter accessibility contributors take the following measures to ensure accessibility of JupyterLab: + +* Include accessibility as part of our mission statement. +* Provide continual accessibility training for our community. +* Assign clear accessibility goals and responsibilities. +* Employ formal accessibility quality assurance methods. +* Document changes, approaches, and improvements to the above methods and to JupyterLab itself. + +For more information on current efforts to improve JupyterLab's accessibility, visit the [JupyterLab accessibility grant roadmap](https://jupyter-a11y.netlify.app/roadmap/intro.html). + +## Feedback and Formal complaints + +We welcome your feedback and formal complaints on the accessibility status of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: + +* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) +* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) +* If you are interested in being part of any potential research or organized feedback initiatives, please [send an email with the subject line `Jupyter Accessibility Feedback` here](ipresedo@quansight.com). Gauging community interest in user research participation helps us gain the support to make it happen. + +At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. + +Please note that JupyterLab is an open-source project and that Jupyter accessibility contributors are a group defined on a voluntary basis. Like many other open-source projects, we cannot guarantee how long it may take to respond to and resolve an issue, though we do make an effort to do it as quickly as is possible with our resources. + ### Date This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. From 77319f7ba73dfe53c8d670b74e7c838bbc7908a2 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Thu, 9 Jun 2022 11:45:38 -0700 Subject: [PATCH 28/29] Move statement to existing file location --- docs/resources/statement.md | 101 ++++++++++++++++++++++++++++++++++-- statement.md | 92 -------------------------------- 2 files changed, 98 insertions(+), 95 deletions(-) delete mode 100644 statement.md diff --git a/docs/resources/statement.md b/docs/resources/statement.md index eab7ee18..5b12a7b8 100644 --- a/docs/resources/statement.md +++ b/docs/resources/statement.md @@ -1,11 +1,106 @@ # `jupyter` accessibility statement -As of Jan 31, 2022, `jupyterlab` nor `retrolab` meet WCAG 2.1 Level A compliance. - ## `jupyter` audits This section includes audits from different stakeholders on `jupyter` products. * [JupyterLab v2.2.6 WCAG 2.1](https://github.com/jupyterlab/jupyterlab/issues/9399) -* [Jupyter Notebook WCAG 2.0](https://github.com/jupyter/accessibility/issues/7) \ No newline at end of file +* [Jupyter Notebook WCAG 2.0](https://github.com/jupyter/accessibility/issues/7) + +## Accessibility Statement for JupyterLab + +Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) + +This is an accessibility statement from Jupyter accessibility contributors. + +### The current state of JupyterLab + +#### Conformance status + +The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not meet the accessibility standard. + +![Picture accessibility compliance levels as mountains. The first peak to reach is AA. This includes both A and AA criteria. Behind it, in the mist, there is a larger peak, AAA. That one is not always completely reachable--Marie Guillaumet, Access42](https://stephaniewalter.design/wp-content/uploads/2022/05/stephaniewalter-sommets-de-l-accessibilite.jpg) + +*By [Stéphanie Walter](https://stephaniewalter.design) ([Source](https://stephaniewalter.design/blog/5-illustrations-to-understand-and-promote-accessibility/))* + +JupyterLab's accessibility does not exist in isolation. JupyterLab inherits much from the many projects it is built upon and its accessibility conformance may impact projects built off of JupyterLab or its components. The accessibility of this ecosystem is interlinked, so conformance may need to be resolved at different levels in order to impact JupyterLab positively. + +#### Compatibility with browsers and assistive technology + +JupyterLab is designed to be compatible with the following technologies: + +* Windows, macOS, iOS, Android; Firefox, Chrome, Safari, Chromium browsers (mobile and desktop). + +JupyterLab is not compatible with: + +* Internet Explorer, Edge; JAWS, NVDA, VoiceOver, Narrator, Orca screen readers; voice control technology. + +#### Technical specifications + +Accessibility of JupyterLab relies on the following technologies to work with the particular combination of web browser and any assistive technologies or plugins installed on your computer: + +* HTML +* WAI-ARIA +* CSS +* JavaScript + +These technologies are relied upon for conformance with the accessibility standards used. + +#### Limitations and alternatives + +Despite our best efforts to ensure accessibility of JupyterLab, there may be some limitations. Below is a description of known limitations, and potential solutions. Please contact us if you observe an issue not listed below. + +**Known limitations for JupyterLab:** + +1. **Documents**: Documents written by the community may not include accessible content because we do not and cannot review every document that can be opened and edited in JupyterLab. To support accessible documents, we are drafting guidelines for accessible document content with an emphasis on Jupyter notebooks. Please report the issue to the author and [open an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) describing the problem and the behavior you expect so we may integrate it into our content guidelines. + +2. **JupyterLab extensions**: JupyterLab extensions written by the community may not be accessible because JupyterLab extensions can be written by anyone in the community and have no standard review process. We do not and can not review every JupyterLab extension. To support accessible extensions, we encourage extension authors to use existing, accessible JupyterLab components for their extensions. We also provide periodic opportunities for community education on accessibility. Please report the issue to the author and let them know the [jupyter/accessibility](https://github.com/jupyter/accessibility/) community may be able to provide guidance. + +#### Assessment approach + +Jupyter accessibility contributors assessed the accessibility of JupyterLab by the following approaches: + +* Self-evaluation +* Regular automated testing to monitor for regressions (can be found at [jupyter/accessibility](https://github.com/jupyter/accessibility) +* User feedback + +#### Evaluation report + +An evaluation for JupyterLab is available at: [jupyterlab/jupyterlab/issues/9399](https://github.com/jupyterlab/jupyterlab/issues/9399). + +User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupyterlab label `tag:accessibility`](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility). + +### What the community is doing + +#### Measures to support accessibility + +Jupyter accessibility contributors take the following measures to ensure accessibility of JupyterLab: + +* Include accessibility as part of our mission statement. +* Provide continual accessibility training for our community. +* Assign clear accessibility goals and responsibilities. +* Employ formal accessibility quality assurance methods. +* Document changes, approaches, and improvements to the above methods and to JupyterLab itself. + +For more information on current efforts to improve JupyterLab's accessibility, visit the [JupyterLab accessibility grant roadmap](https://jupyter-a11y.netlify.app/roadmap/intro.html). + +### Feedback and Formal complaints + +We welcome your feedback and formal complaints on the accessibility status of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: + +* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) +* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) +* If you are interested in being part of any potential research or organized feedback initiatives, please [send an email with the subject line `Jupyter Accessibility Feedback` here](ipresedo@quansight.com). Gauging community interest in user research participation helps us gain the support to make it happen. + +At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. + +Please note that JupyterLab is an open-source project and that Jupyter accessibility contributors are a group defined on a voluntary basis. Like many other open-source projects, we cannot guarantee how long it may take to respond to and resolve an issue, though we do make an effort to do it as quickly as is possible with our resources. + +### Date + +This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. + +## Accessibility Statement for Jupyter Notebook + +Pending \ No newline at end of file diff --git a/statement.md b/statement.md deleted file mode 100644 index bc6171c6..00000000 --- a/statement.md +++ /dev/null @@ -1,92 +0,0 @@ -# 🚧 Draft Accessibility Statement for JupyterLab - -Edited from the [W3C accessibility statement generator](https://www.w3.org/WAI/planning/statements/generator/#create) - -This is an accessibility statement from Jupyter accessibility contributors. - -## The current state of JupyterLab - -### Conformance status - -The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not meet the accessibility standard. - -![Picture accessibility compliance levels as mountains. The first peak to reach is AA. This includes both A and AA criteria. Behind it, in the mist, there is a larger peak, AAA. That one is not always completely reachable--Marie Guillaumet, Access42](https://stephaniewalter.design/wp-content/uploads/2022/05/stephaniewalter-sommets-de-l-accessibilite.jpg) - -*By [Stéphanie Walter](https://stephaniewalter.design) ([Source](https://stephaniewalter.design/blog/5-illustrations-to-understand-and-promote-accessibility/))* - -JupyterLab's accessibility does not exist in isolation. JupyterLab inherits much from the many projects it is built upon and its accessibility conformance may impact projects built off of JupyterLab or its components. The accessibility of this ecosystem is interlinked, so conformance may need to be resolved at different levels in order to impact JupyterLab positively. - -### Compatibility with browsers and assistive technology - -JupyterLab is designed to be compatible with the following technologies: - -* Windows, macOS, iOS, Android; Firefox, Chrome, Safari, Chromium browsers (mobile and desktop). - -JupyterLab is not compatible with: - -* Internet Explorer, Edge; JAWS, NVDA, VoiceOver, Narrator, Orca screen readers; voice control technology. - -### Technical specifications - -Accessibility of JupyterLab relies on the following technologies to work with the particular combination of web browser and any assistive technologies or plugins installed on your computer: - -* HTML -* WAI-ARIA -* CSS -* JavaScript - -These technologies are relied upon for conformance with the accessibility standards used. - -### Limitations and alternatives - -Despite our best efforts to ensure accessibility of JupyterLab, there may be some limitations. Below is a description of known limitations, and potential solutions. Please contact us if you observe an issue not listed below. - -**Known limitations for JupyterLab:** - -1. **Documents**: Documents written by the community may not include accessible content because we do not and cannot review every document that can be opened and edited in JupyterLab. To support accessible documents, we are drafting guidelines for accessible document content with an emphasis on Jupyter notebooks. Please report the issue to the author and [open an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) describing the problem and the behavior you expect so we may integrate it into our content guidelines. - -2. **JupyterLab extensions**: JupyterLab extensions written by the community may not be accessible because JupyterLab extensions can be written by anyone in the community and have no standard review process. We do not and can not review every JupyterLab extension. To support accessible extensions, we encourage extension authors to use existing, accessible JupyterLab components for their extensions. We also provide periodic opportunities for community education on accessibility. Please report the issue to the author and let them know the [jupyter/accessibility](https://github.com/jupyter/accessibility/) community may be able to provide guidance. - -### Assessment approach - -Jupyter accessibility contributors assessed the accessibility of JupyterLab by the following approaches: - -* Self-evaluation -* Regular automated testing to monitor for regressions (can be found at [jupyter/accessibility](https://github.com/jupyter/accessibility) -* User feedback - -### Evaluation report - -An evaluation for JupyterLab is available at: [jupyterlab/jupyterlab/issues/9399](https://github.com/jupyterlab/jupyterlab/issues/9399). - -User reports on JupyterLab's accessibility are available at:[the jupyterlab/jupyterlab label `tag:accessibility`](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility). - -## What the community is doing - -### Measures to support accessibility - -Jupyter accessibility contributors take the following measures to ensure accessibility of JupyterLab: - -* Include accessibility as part of our mission statement. -* Provide continual accessibility training for our community. -* Assign clear accessibility goals and responsibilities. -* Employ formal accessibility quality assurance methods. -* Document changes, approaches, and improvements to the above methods and to JupyterLab itself. - -For more information on current efforts to improve JupyterLab's accessibility, visit the [JupyterLab accessibility grant roadmap](https://jupyter-a11y.netlify.app/roadmap/intro.html). - -## Feedback and Formal complaints - -We welcome your feedback and formal complaints on the accessibility status of JupyterLab. Please let us know if you encounter accessibility barriers on JupyterLab: - -* [Write an issue on jupyter/accessibility](https://github.com/jupyter/accessibility/issues/new) -* [Write an issue on jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab/issues/new) and request it be labeled [tag:accessibility](https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility) -* If you are interested in being part of any potential research or organized feedback initiatives, please [send an email with the subject line `Jupyter Accessibility Feedback` here](ipresedo@quansight.com). Gauging community interest in user research participation helps us gain the support to make it happen. - -At the time of writing, there is no non-public way to contact us for JupyterLab accessibility issues. - -Please note that JupyterLab is an open-source project and that Jupyter accessibility contributors are a group defined on a voluntary basis. Like many other open-source projects, we cannot guarantee how long it may take to respond to and resolve an issue, though we do make an effort to do it as quickly as is possible with our resources. - -### Date - -This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. From 33cde064dd84814c0e6a3e4941e9dcf251922fe7 Mon Sep 17 00:00:00 2001 From: isabela-pf Date: Thu, 16 Jun 2022 12:22:48 -0700 Subject: [PATCH 29/29] Update document based on meeting feedback --- docs/resources/statement.md | 43 ++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/docs/resources/statement.md b/docs/resources/statement.md index 5b12a7b8..0f502938 100644 --- a/docs/resources/statement.md +++ b/docs/resources/statement.md @@ -1,4 +1,4 @@ -# `jupyter` accessibility statement +# `jupyter` accessibility statements ## `jupyter` audits @@ -16,6 +16,10 @@ This is an accessibility statement from Jupyter accessibility contributors. ### The current state of JupyterLab +Jupyter accessibility statements are living documents. This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. + +This statement was last updated 16 June 2022. + #### Conformance status The [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag) defines requirements for designers and developers to improve accessibility for people with disabilities. It defines three levels of conformance: Level A, Level AA, and Level AAA. JupyterLab is non conformant with WCAG 2.1 level AA. Non conformant means that the content does not meet the accessibility standard. @@ -28,13 +32,40 @@ JupyterLab's accessibility does not exist in isolation. JupyterLab inherits much #### Compatibility with browsers and assistive technology -JupyterLab is designed to be compatible with the following technologies: +JupyterLab is designed to be compatible with the following + +Operating systems: -* Windows, macOS, iOS, Android; Firefox, Chrome, Safari, Chromium browsers (mobile and desktop). +* Windows +* macOS +* Linux +* iOS +* Android + +Browsers (mobile and desktop): + + * Firefox + * Chrome + * Safari + * Chromium browsers JupyterLab is not compatible with: -* Internet Explorer, Edge; JAWS, NVDA, VoiceOver, Narrator, Orca screen readers; voice control technology. +Operating systems: + +Browsers (mobile and desktop): + +* Internet Explorer +* Edge + +Assistive technology: + +* JAWS +* NVDA +* VoiceOver +* Narrator +* Orca screen readers +* voice control technology #### Technical specifications @@ -97,10 +128,6 @@ At the time of writing, there is no non-public way to contact us for JupyterLab Please note that JupyterLab is an open-source project and that Jupyter accessibility contributors are a group defined on a voluntary basis. Like many other open-source projects, we cannot guarantee how long it may take to respond to and resolve an issue, though we do make an effort to do it as quickly as is possible with our resources. -### Date - -This statement was created on 16 May 2022 using the [W3C Accessibility Statement Generator Tool](https://www.w3.org/WAI/planning/statements/) with additions and edits from the Jupyter accessibility contributors community. - ## Accessibility Statement for Jupyter Notebook Pending \ No newline at end of file