From d90e028c1bdc52a2c1e0ecc1cf03e0f0d8be7c6e Mon Sep 17 00:00:00 2001 From: Shaun Verch Date: Thu, 16 Dec 2021 10:16:28 -0500 Subject: [PATCH 1/3] Update documentation to make it easier for users to find the right content for them (#1016) * First pass of updating documentation for new users Trying to look at this from the perspective of someone new to the project, and create some pathways to make it easier for people to get to the content they are looking for. * Make it clear that docker is doing the setup * Link installation again from the main README * Add some docs about the github actions * Add markdown link check * Move git installation first * Add config for markdown link checker * Fix some links * Correct handling of repo root relative links * Fix broken links in data roadmap * Fix more broken links * Fix more links * Ignore link that's returning a 403 to the checker It actually works if you go in a browser. * Fix another broken link * Ignore more urls that don't work * Update the readme under docs * Add some more dataset links * More strongly call out the quickstart * Try to call out even more the quickstart link * Fix dead links * Add note about initialization time * Remove broken link from spanish install guide These will be updated later with a full translation --- .github/workflows/README.md | 9 +++ .github/workflows/markdown-link-check.yml | 10 +++ CODE_OF_CONDUCT-es.md | 2 +- CONTRIBUTING.md | 2 +- DATASETS.md | 12 ++++ INSTALLATION-es.md | 2 - INSTALLATION.md | 64 ++++++------------- MAINTAINERS-es.md | 2 +- MAINTAINERS.md | 2 +- QUICKSTART.md | 23 +++++++ README-es.md | 4 +- README.md | 23 +++++-- client/README.md | 21 ++++-- data/data-pipeline/README.md | 16 ++--- docs/README.md | 43 ++----------- .../0002-mapping-visualization-library.md | 2 +- mlc_config.json | 25 ++++++++ 17 files changed, 154 insertions(+), 108 deletions(-) create mode 100644 .github/workflows/README.md create mode 100644 .github/workflows/markdown-link-check.yml create mode 100644 DATASETS.md create mode 100644 QUICKSTART.md create mode 100644 mlc_config.json diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 00000000..190c87f6 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,9 @@ +# Justice40 Github Actions Workflows + +This directory has the github actions workflows for the Justice40 Project. + +This project is deployed on an AWS account managed by [GeoPlatform.gov](https://www.geoplatform.gov/), and github actions is used to automate the data pipeline and all deployment steps. + +The names of the Github Actions stages in the yaml files should describe what each step does, so it is best to refer there to understand the latest of what everything is doing. + +To mitigate the risk of having this README quickly become outdated as the project evolves, avoid documenting anything application or data pipeline specific here. Instead, go back up to the [top level project README](/README.md) and refer to the documentation on those components directly. diff --git a/.github/workflows/markdown-link-check.yml b/.github/workflows/markdown-link-check.yml new file mode 100644 index 00000000..3a2f64d0 --- /dev/null +++ b/.github/workflows/markdown-link-check.yml @@ -0,0 +1,10 @@ +name: Check Markdown links +on: + push: + pull_request: +jobs: + markdown-link-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: gaurav-nelson/github-action-markdown-link-check@v1 diff --git a/CODE_OF_CONDUCT-es.md b/CODE_OF_CONDUCT-es.md index b942069b..e2f8da54 100644 --- a/CODE_OF_CONDUCT-es.md +++ b/CODE_OF_CONDUCT-es.md @@ -12,5 +12,5 @@ Los mantenedores del proyecto tienen el derecho y la obligación de eliminar, ed Los casos de abuso, acoso o de otro comportamiento inaceptable se pueden denunciar abriendo un problema o contactando con uno o más de los mantenedores del proyecto en justice40open@usds.gov. -Este Código de conducta es una adaptación de la versión 1.0.0 del Convenio del colaborador ([Contributor Covenant](contributor-covenant.org), *en inglés*) disponible en el sitio http://contributor-covenant.org/version/1/0/0/ *(en inglés)*. +Este Código de conducta es una adaptación de la versión 1.0.0 del Convenio del colaborador ([Contributor Covenant](http://contributor-covenant.org), *en inglés*) disponible en el sitio http://contributor-covenant.org/version/1/0/0/ *(en inglés)*. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91360e08..c0000fc2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ The following is a set of guidelines for contributing to the Justice40 Tool that lives in this repository. -Before contributing, we encourage you to also read our [LICENSE](https://github.com/usds/justice40-tool/blob/main/LICENSE) and [README](https://github.com/usds/justice40-tool/blob/main/README) files, also found in this repository. If you have any questions not answered by the content of this repository, please don't hesitate to [contact us](mailto:justice40open@usds.gov). +Before contributing, we encourage you to also read our [LICENSE](LICENSE.md) and [README](README.md) files, also found in this repository. If you have any questions not answered by the content of this repository, please don't hesitate to [contact us](mailto:justice40open@usds.gov). ## Public Domain diff --git a/DATASETS.md b/DATASETS.md new file mode 100644 index 00000000..03728ef7 --- /dev/null +++ b/DATASETS.md @@ -0,0 +1,12 @@ +# Justice40 Datasets + +This page contains web links to the datasets that are uploaded as part of our data pipeline, if you want to access them directly. Note that this is just a quick reference and the [Data Pipeline README](/data/data-pipeline/README.md) has the comprehensive documentation on all these datasets. + +> Note: These currently aren't updated on any specific cadence, so be aware of this if you know that the dataset you are using might change frequently. + +- Census data, generated by the [Generate Census Github Action](https://github.com/usds/justice40-tool/blob/main/.github/workflows/generate-census.yml): +- Score data, generated by the [Generate Score Github Action](https://github.com/usds/justice40-tool/blob/main/.github/workflows/generate-score.yml): +- EJScreen: +- Census ACS 2019: +- Housing and Transportation Index: +- HUD Housing: diff --git a/INSTALLATION-es.md b/INSTALLATION-es.md index 46e0aa64..b4365aa3 100644 --- a/INSTALLATION-es.md +++ b/INSTALLATION-es.md @@ -56,5 +56,3 @@ Si bien se puede usar cualquier IDE, describimos cómo configurar VS Code Para el desarrollo de front-end, lea el [Client README](client/README.md). Para el desorrollo de back-end, lea el [Data Pipeline README](data/data-pipeline/README.md). - -Para la implementación de software, lea el [Infrastructure README](infrastructure/README.md). \ No newline at end of file diff --git a/INSTALLATION.md b/INSTALLATION.md index 9b19fea5..73c018b0 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -1,26 +1,31 @@ -# Installing the Justice40 Tool +# Justice40 Tool Installation *[¡Lea esto en español!](INSTALLATION-es.md)* -## Required Software -You'll need the following set up in your environment before continuing to run the Justice40 Tool code. +This page documents the installation steps for some of the software needed to work with this project. -- git, node, and an IDE +> **NOTE: If you all you want to do is quickly run everything locally to try out the application, go straight to [`QUICKSTART.md`](QUICKSTART.md).** -### Install Git +After the generic installation steps on this page, continue on to one of the following, depending on what you are trying to do: -#### MacOS +- If you are working with the frontend, see [`client/README.md`](client/README.md). +- If you are working with the data pipeline, see [`data/data-pipeline/README.md`](data/data-pipeline/README.md). +- If you want to understand the current deployment process, see [`.github/workflows/README.md`](.github/workflows/README.md). + +## Install Git + +### MacOS 1. Open the terminal and type `git` and hit RETURN. -2. If dev tools are not installed a window will prompt you to install dev tools. +2. If dev tools are not installed a window will prompt you to install dev tools. 3. Open the terminal and type `git --version` and hit RETURN. 4. Validate that a version number is returned. If so, git is properly installed. -#### Win10 +### Win10 Download from [website](https://git-scm.com/download/win) +## Install Homebrew (MacOS only) -### Install Homebrew (MacOS only) -Homebrew is an easy way to manage software downloads on MacOS. You don't *have* to use it, but we recommend it. +Homebrew is an easy way to manage software downloads on MacOS. You don't *have* to use it, but we recommend it. 1. First, open your terminal and run `brew -v` to determine whether you have Homebrew installed. If you get a resopnse that looks something like `Homebrew 3.1.9`, you've already got it! If you get nothing back, or an error, continue. 2. Open the terminal and copy / paste this command and hit RETURN. Go through the prompts (you will need to grant `sudo` access). @@ -29,15 +34,9 @@ Homebrew is an easy way to manage software downloads on MacOS. You don't *have* 2. Validate installation by typing `brew -v` in the terminal and ensure a version number is shown. -### Install Node using NVM +You should regularly run `brew update` and `brew doctor` to make sure your packages are up to date and in good condition. -This will work for both MacOS and Win10. Follow instructions on this [link](https://medium.com/@nodesource/installing-node-js-tutorial-using-nvm-5c6ff5925dd8). Be sure to read through the whole doc to find the sections within each step relevant to you (e.g. if you're using Homebrew, when you get to Step 2 look for the section, "Install NVM with Homebrew"). - -If you install NVM using Homebrew, make sure to read the output in terminal after you run `brew install nvm`. You will need to add a few lines to your ~/.bash_profile and perhaps complete a couple other tasks. - -Once you install NVM, don't forget to install Node! This is included in the linked tutorial above. - -### IDE set up +## IDE set up (Optional) While any IDE can be used, we're outlining how to set up VS Code 1. Open the terminal and type `brew install --cask visual-studio-code` and hit RETURN. @@ -49,7 +48,7 @@ While any IDE can be used, we're outlining how to set up VS Code 6. Type `gatsby develop` to spin up the app 7. Navigate to `localhost:8000` to view the app -#### Recommended VS Code Extensions +### Recommended VS Code Extensions 1. [Browser Preview](https://github.com/auchenberg/vscode-browser-preview) 2. [Live Server](https://github.com/ritwickdey/vscode-live-server) @@ -57,28 +56,7 @@ While any IDE can be used, we're outlining how to set up VS Code 4. [Live Share Audio](https://github.com/MicrosoftDocs/live-share) 5. [Live Share Extention Pack](https://github.com/MicrosoftDocs/live-share) +## Install Docker -## Running the code - -Once you have the required software installed and ready on your computer, you're ready to begin installing and running the Justice40 Tool code. - -1. Fork this repository and create a clone locally. In your terminal/CLI, in the directory you wish to put this project, run `git clone` plus the URL of your fork. -1. If you're using a Mac and Homebrew, go ahead and run `brew update` and `brew doctor`. It's always good to run these regularly to make sure your packages are up to date and in good condition. - -Now, check out the next section on the organization of this repository to determine where to go next. - -### Repo organization -Our repo is organized into multiple directories (folders) to make it easier to work on and run different parts of the system independently. - -The top level of the repo contains these directories, as well as project-wide documentation such as this INSTALLATION file, the README, LICENSE, CODE OF CONDUCT, etc. - -There is also a docker-compose file that will eventually include everything you need to run every part of the application in one docker command; however, at the moment, this file only spins up the score creation part of our data pipeline. - -**Running the client** -If you wish to check out our client-side code (i.e. the GatsbyJS statically generated website with the map), check out the `client` directory and its [README](client/README.md). - -**Running the backend** -If you want to run the data pipeline with ETL and score generation, check out the `data/data-pipeline` directory and its [README](data/data-pipeline/README.md). - -**Deployment** -For core team contributors working on deployment, check out the `infrastructure` directory and its [README](infrastructure/README.md) for information on deploying the backend to AWS. +Follow the [Docker installation +instructions](https://docs.docker.com/get-docker/) for your platform. diff --git a/MAINTAINERS-es.md b/MAINTAINERS-es.md index 8750c085..fcb93b31 100644 --- a/MAINTAINERS-es.md +++ b/MAINTAINERS-es.md @@ -6,7 +6,7 @@ - Lucas Brown - lucasmbrown-usds ## Ingeniería -Consultar la lista definitiva en [archivo CODEOWNERS](./github/CODEOWNERS). +Consultar la lista definitiva en [archivo CODEOWNERS](/.github/CODEOWNERS). - Shelby Switzer - switzersc-usds - dirección de ingeniería - Jorge Escobar - esfoobar-usds diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 2bcffbbb..5a9f6099 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -6,7 +6,7 @@ - Lucas Brown - lucasmbrown-usds ## Engineering -See [CODEOWNERS file](./github/CODEOWNERS) for definitive list. +See [CODEOWNERS file](/.github/CODEOWNERS) for definitive list. - Shelby Switzer - switzersc-usds - engineering lead - Jorge Escobar - esfoobar-usds diff --git a/QUICKSTART.md b/QUICKSTART.md new file mode 100644 index 00000000..e84c0b49 --- /dev/null +++ b/QUICKSTART.md @@ -0,0 +1,23 @@ +# Local Quickstart + +Install [`git`](https://git-scm.com/). See [Install Git](INSTALLATION.md#install-git). + +Open a terminal, clone this repository, and change directory to the repository root: + +```sh +$ git clone https://github.com/usds/justice40-tool +Cloning into 'justice40-tool'... +$ cd justice40-tool +``` + +Install [`docker`](https://www.docker.com/). See [Install Docker](INSTALLATION.md#install-docker). + +> *Important*: To be able to run the entire application, you may need to increase the memory allocated for docker to at least 8096 MB. See [this post](https://stackoverflow.com/a/44533437) for more details. + +Use `docker-compose` to run the application: + +```sh +$ docker-compose up +``` + +After it initializes (which may take a while, possibly even an hour or two, since it has to download and process all the data), you should be able to open the application in your browser at [http://localhost:8000](http://localhost:8000). diff --git a/README-es.md b/README-es.md index d6e5843e..b35f25ff 100644 --- a/README-es.md +++ b/README-es.md @@ -1,5 +1,5 @@ # Herramienta Justice40 -[![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE) +[![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE.md) *[Read this in English!](README.md)* @@ -18,7 +18,7 @@ En la realización de esta herramienta, el método de código abierto que usa el Sabemos que podemos aprender de comunidades muy distintas (incluidas las que usarán la herramienta o se verán afectadas por esta) que tienen gran experiencia en la ciencia o la tecnología de datos, o en el trabajo en favor del clima y de la justicia económica o ambiental. Nos dedicamos a crear foros para facilitar la conversación y los comentarios continuos con objeto de conformar el diseño y el desarrollo de la herramienta. -Asimismo, reconocemos que la generación de capacidad es indispensable para incluir a una comunidad diversa de código abierto. Estamos procurando usar lenguaje accesible, proporcionar documentación técnica y sobre procesos en varios idiomas, y ofrecer asistencia, sea directamente o en forma de chats de grupo y de capacitación, a los miembros de nuestra comunidad que poseen gran variedad de conocimientos y habilidades. Si tiene ideas acerca de cómo podemos mejorar o ampliar nuestro trabajo para generar capacidad y de métodos para atraer a los usuarios a nuestra comunidad, comuníquese con nosotros en el [Grupo de Google]((https://groups.google.com/u/4/g/justice40-open-source)) *(en inglés)* o por correo electrónico en justice40open@usds.gov. +Asimismo, reconocemos que la generación de capacidad es indispensable para incluir a una comunidad diversa de código abierto. Estamos procurando usar lenguaje accesible, proporcionar documentación técnica y sobre procesos en varios idiomas, y ofrecer asistencia, sea directamente o en forma de chats de grupo y de capacitación, a los miembros de nuestra comunidad que poseen gran variedad de conocimientos y habilidades. Si tiene ideas acerca de cómo podemos mejorar o ampliar nuestro trabajo para generar capacidad y de métodos para atraer a los usuarios a nuestra comunidad, comuníquese con nosotros en el [Grupo de Google](https://groups.google.com/u/4/g/justice40-open-source) *(en inglés)* o por correo electrónico en justice40open@usds.gov. ### Chats de la comunidad Cada dos semanas, llevamos a cabo sesiones de chat para la comunidad de código abierto los lunes de 5 a 6 p. m. hora del Este. Nuestro [Grupo de Google](https://groups.google.com/u/4/g/justice40-open-source) *(en inglés)*, proporciona información acerca de los temas que se tratarán en esas sesiones y de cómo puede participar en estas. diff --git a/README.md b/README.md index f60ad927..f51e447d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Justice40 Tool -[![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE) +[![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE.md) *[¡Lea esto en español!](README-es.md)* @@ -8,8 +8,7 @@ Welcome to the Justice40 Open Source Community! This repo contains the code, pro ## Background The Justice40 initiative and screening tool were announced in an [Executive Order](https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/) in January 2021, with the goal to launch an MVP of the tool by July 27, 2021. This tool will include interactive maps and an initial draft scorecard which federal agencies can use to prioritize historically overburdened and underserved communities for benefits in their programs. -Please see our [Open Source Community Orientation](docs/Justice40_Open_Source_Community_Orientation.pptx) deck for more information on the Justice40 initiative, our team, -this project, and ways to participate. +Please see our [Open Source Community Orientation](docs/Justice40_Open_Source_Community_Orientation.pptx) deck for more information on the Justice40 initiative, our team, this project, and ways to participate. ## Core team The core Justice40 team building this tool is a small group of designers, developers, and product managers from the US Digital Service in partnership with the Council on Environmental Quality (CEQ). @@ -44,9 +43,23 @@ Contributions are always welcome! We encourage contributions in the form of disc See [CONTRIBUTING.md](CONTRIBUTING.md) for ways to get started. -## Installation +## For Developers and Data Scientists -The installation is a typical gatsby install and the details can be found in [INSTALLATION.md](https://github.com/usds/justice40-tool/blob/main/INSTALLATION.md) +### Datasets + +The intermediate steps of the data pipeline and the final output that is consumed by the frontend are all public and can be accessed directly. See [DATASETS.md](DATASETS.md) for these direct download links. + +### Local Quickstart + +If you want to run the entire application locally, see [QUICKSTART.md](QUICKSTART.md). + +### Advanced Guides + +If you have software experience or more specific use cases, start at [INSTALLATION.md](INSTALLATION.md) for more in depth documentation of how to work with this project. + +### Project Documentation + +For more general documentation on the project that is not related to getting set up, including architecture diagrams and engineering decision logs, see [docs/](docs/). ## Glossary diff --git a/client/README.md b/client/README.md index 638f8fc5..84eee920 100644 --- a/client/README.md +++ b/client/README.md @@ -16,8 +16,21 @@ This README contains the following content: ## Installing and running the client site ### Via npm -1. Confirm you have the base required software installed. See [INSTALLATION](INSTALLATION.md) for more details. -1. Install yarn if you do not have it yet. Open your terminal and run `sudo npm install -global yarn`. This works on MacOS and Win10. To confirm it is installed, run `yarn -v`. A version number should be returned. + +#### Install Node using NVM + +This will work for both MacOS and Win10. Follow instructions on this [link](https://medium.com/@nodesource/installing-node-js-tutorial-using-nvm-5c6ff5925dd8). Be sure to read through the whole doc to find the sections within each step relevant to you (e.g. if you're using Homebrew, when you get to Step 2 look for the section, "Install NVM with Homebrew"). + +If you install NVM using Homebrew, make sure to read the output in terminal after you run `brew install nvm`. You will need to add a few lines to your ~/.bash_profile and perhaps complete a couple other tasks. + +Once you install NVM, don't forget to install Node! This is included in the linked tutorial above. This will also install `npm` which you need for the steps below. + +#### Install Yarn + +Install yarn if you do not have it yet. Open your terminal and run `sudo npm install -global yarn`. This works on MacOS and Win10. To confirm it is installed, run `yarn -v`. A version number should be returned. + +#### Run The Application + 1. Navigate to the base directory of this repository, and go to the `client` directory (`cd client`). 1. Run the command `npm install` to install the dependencies. 1. Run `npm start` to start up the client app. @@ -62,7 +75,7 @@ DATA_SOURCE env variable in the docker-compose.yml. See [environment variables]( ### Viewing data on the map -See [VIEW_MAP_DATA](./VIEW_MAP_DATA) for more details on this. +See [VIEW_MAP_DATA.md](./VIEW_MAP_DATA.md) for more details on this. ## Linting and Formatting @@ -159,7 +172,7 @@ When developing, to use a flag: 1. Pass the Gatsby-provided `location` variable to your component. You have several options here: 1. If your page uses the `Layout` [component](src/components/layout.tsx), you automatically get `URLFlagProvider` (see [FlagContext](src/contexts/FlagContext.tsx) for more info). 2. If your page does not use `Layout`, you need to surround your component with a `URLFlagProvider` component and pass `location`. You can get `location` from the default props of the page (more [here](https://www.gatsbyjs.com/docs/location-data-from-props/)). See [Index.tsx](src/pages/index.tsx) for an example. -2. Use the `useFlags()` hook to get access to an array of flags, and check this array for the presence of the correct feature identifier. See [J40Header](src/components/J40Header.tsx) for an example. +2. Use the `useFlags()` hook to get access to an array of flags, and check this array for the presence of the correct feature identifier. See [J40Header](src/components/J40Header/J40Header.tsx) for an example. #### When to use flags: diff --git a/data/data-pipeline/README.md b/data/data-pipeline/README.md index 46b7f14d..adf90745 100644 --- a/data/data-pipeline/README.md +++ b/data/data-pipeline/README.md @@ -120,7 +120,7 @@ _For example: `poetry run python3 data_pipeline/application.py etl-run -d ejscre 1. These data sets are merged into a single dataframe using their Census Block Group GEOID as a common key, and the data in each of the columns is standardized in two ways: - Their [percentile rank](https://en.wikipedia.org/wiki/Percentile_rank) is calculated, which tells us what percentage of other Census Block Groups have a lower value for that particular column. - They are normalized using [min-max normalization](https://en.wikipedia.org/wiki/Feature_scaling), which adjusts the scale of the data so that the Census Block Group with the highest value for that column is set to 1, the Census Block Group with the lowest value is set to 0, and all of the other values are adjusted to fit within that range based on how close they were to the highest or lowest value. -1. The standardized columns are then used to calculate each of the Justice40 score experiments described in greater detail below, and the results are exported to a `.csv` file in [`data/score/csv`](data/score/csv) +1. The standardized columns are then used to calculate each of the Justice40 score experiments described in greater detail below, and the results are exported to a `.csv` file in [`data_pipeline/data/score/csv`](data_pipeline/data/score/csv) #### Step 4: Compare the Justice40 score experiments to other indices @@ -143,13 +143,13 @@ _NOTE:_ This may take several minutes or over an hour to fully execute and gener ### Data Sources -- **[EJSCREEN](etl/sources/ejscreen):** TODO Add description of data source -- **[Census](etl/sources/census):** TODO Add description of data source -- **[American Communities Survey](etl/sources/census_acs):** TODO Add description of data source -- **[Housing and Transportation](etl/sources/housing_and_transportation):** TODO Add description of data source -- **[HUD Housing](etl/sources/hud_housing):** TODO Add description of data source -- **[HUD Recap](etl/sources/hud_recap):** TODO Add description of data source -- **[CalEnviroScreen](etl/scores/calenviroscreen):** TODO Add description of data source +- **[EJSCREEN](data_pipeline/etl/sources/ejscreen):** TODO Add description of data source +- **[Census](data_pipeline/etl/sources/census):** TODO Add description of data source +- **[American Communities Survey](data_pipeline/etl/sources/census_acs):** TODO Add description of data source +- **[Housing and Transportation](data_pipeline/etl/sources/housing_and_transportation):** TODO Add description of data source +- **[HUD Housing](data_pipeline/etl/sources/hud_housing):** TODO Add description of data source +- **[HUD Recap](data_pipeline/etl/sources/hud_recap):** TODO Add description of data source +- **[CalEnviroScreen](data_pipeline/etl/sources/calenviroscreen):** TODO Add description of data source ## Running using Docker diff --git a/docs/README.md b/docs/README.md index fe8982fe..459635d5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,42 +1,7 @@ -# Installation Prerequisites +# Justice40 Project Documentation -1. [Install the latest docker](https://docs.docker.com/get-docker/) and you may want to install [docker desktop - latest](https://docs.docker.com/desktop/) -2. [Install python 3.9.5 (latest) and](https://www.python.org/downloads/) [configure your environment](https://docs.python.org/3/tutorial/venv.html) to get data-platform source environment ready. -3. Install Visual Studio Code (python packages & typescript) -4. [Installing nvm](https://github.com/nvm-sh/nvm#installing-and-updating) and then do: -```sh -nvm install 14.17.0 +If you are new to this project, check out the [top level README](/README.md) first. -nvm use 14.17.0 -``` -and now when you do: -```sh -node -v -``` -you should see: -```sh -v14.17.0 -``` -6. Install [node.js](https://nodejs.org/en/download/) and install all dependencies by `cd`ing into the `/client` directory and running: +The content under this directory should be more about conceptually understanding the project, such as [architecture diagrams](architecture), [decision logs](decisions), and the [Open Source Community Orientation](/docs/Justice40_Open_Source_Community_Orientation.pptx), rather than about specific installation steps. -```sh -npm install -``` -* Note: `npm install` will check the `package-lock.json` fill and restore all transitive dependencies that are in the lock. - -# Build - - - -# PR Process & Git Flow - -[See Contributing.md](../CONTRIBUTING.md) - -# Documentation - -Here you'll find all Justice40 project documentation. - -In particular: - -- [Decisions](decisions) - Documentation of significant project decisions -- [Data Roadmap](data-roadmap.md) - a description of our process for adding new datasets to our backlog +For documentation related to installation and getting set up as a developer or data scientist, see [For Developers and Data Scientists](/README.md#for-developers-and-data-scientists). diff --git a/docs/decisions/0002-mapping-visualization-library.md b/docs/decisions/0002-mapping-visualization-library.md index cb7be329..136c94ae 100644 --- a/docs/decisions/0002-mapping-visualization-library.md +++ b/docs/decisions/0002-mapping-visualization-library.md @@ -159,7 +159,7 @@ Leaflet is a popular open-source mapping visualization library that has been aro - Anecdotally, screen readers still struggle to read content without annotations - the onus is still on the map creator to ensure proper compliance. - **Internationalization/Localization** : the API has its own `intl` module, described [here](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html) - Note: The default ES6 `Intl` module appears to do all of the things described above without need for further modificaiton -- **Name recognition** : Esri in general holds "approximately 43% of the global market share and estimated annual revenues of approximately $1.1 Billion, from roughly 300,000 customers" ([source](https://digital.hbs.edu/platform-digit/submission/esri-and-arcgis/])). Relatedly, Esri tools interoperate well with other Esri tools, and their ecosystem is large. +- **Name recognition** : Esri in general holds "approximately 43% of the global market share and estimated annual revenues of approximately $1.1 Billion, from roughly 300,000 customers" ([source](https://digital.hbs.edu/platform-digit/submission/esri-and-arcgis/)). Relatedly, Esri tools interoperate well with other Esri tools, and their ecosystem is large. - Note: according to [one analysis](https://www.datanyze.com/market-share/mapping-and-gis--121) specifically the ArcGIS Web API holds only 0.48% of the marketshare overall. - **Modularity** : As seen in ArcGIS [documentation](https://developers.arcgis.com/documentation/), Esri interoperates with Leaflet (through a custom fork), Mapbox GL JS, and OpenLayers. diff --git a/mlc_config.json b/mlc_config.json new file mode 100644 index 00000000..ebc7c01e --- /dev/null +++ b/mlc_config.json @@ -0,0 +1,25 @@ +{ + "ignorePatterns": [ + { + "pattern": "^http://localhost" + }, + { + "pattern": "yyyymmdd-xxx.md" + }, + { + "pattern": "https://support.gatsbyjs.com/hc/en-us/articles/360053096273-Why-did-I-hit-Out-of-Memory-errors-" + }, + { + "pattern": "^http://www.datasciencetoolkit.org" + }, + { + "pattern": "^https://github.com/usds/environmental-justice/" + } + ], + "replacementPatterns": [ + { + "pattern": "^/", + "replacement": "{{BASEURL}}/" + } + ] +} From 0d57dd572be027a2fc8b1625958ed68c4b900653 Mon Sep 17 00:00:00 2001 From: Lucas Merrill Brown Date: Thu, 16 Dec 2021 10:54:41 -0500 Subject: [PATCH 2/3] Stop swallowing Census API errors (#1051) --- .../etl/sources/census_acs/etl_utils.py | 42 ++++++++++--------- .../etl/sources/census_acs_2010/etl.py | 2 - 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py index 2997e84c..08b8129f 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py @@ -8,6 +8,8 @@ from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) +CENSUS_ACS_FIPS_CODES_TO_SKIP = ["60", "66", "69", "78"] + def _fips_from_censusdata_censusgeo(censusgeo: censusdata.censusgeo) -> str: """Create a FIPS code from the proprietary censusgeo index.""" @@ -22,32 +24,34 @@ def retrieve_census_acs_data( tract_output_field_name: str, data_path_for_fips_codes: Path, acs_type="acs5", - raise_errors: bool = False, ) -> pd.DataFrame: """Retrieves and combines census ACS data for a given year.""" dfs = [] for fips in get_state_fips_codes(data_path_for_fips_codes): - logger.info( - f"Downloading data for state/territory with FIPS code {fips}" - ) - - try: - response = censusdata.download( - src=acs_type, - year=acs_year, - geo=censusdata.censusgeo( - [("state", fips), ("county", "*"), ("tract", "*")] - ), - var=variables, + if fips in CENSUS_ACS_FIPS_CODES_TO_SKIP: + logger.info( + f"Skipping download for state/territory with FIPS code {fips}" ) - dfs.append(response) - - except ValueError as e: - logger.error( - f"Could not download data for state/territory with FIPS code {fips}" + else: + logger.info( + f"Downloading data for state/territory with FIPS code {fips}" ) - if raise_errors: + try: + response = censusdata.download( + src=acs_type, + year=acs_year, + geo=censusdata.censusgeo( + [("state", fips), ("county", "*"), ("tract", "*")] + ), + var=variables, + ) + dfs.append(response) + + except ValueError as e: + logger.error( + f"Could not download data for state/territory with FIPS code {fips}" + ) raise e df = pd.concat(dfs) diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py index 4095f60a..05d823a6 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py @@ -50,7 +50,6 @@ class CensusACS2010ETL(ExtractTransformLoad): ] self.EMPLOYMENT_LESS_THAN_HS_IN_LABOR_FORCE = ( - # TODO: FIX!!!!!! "B23006_005E" # Estimate!!Total!!Less than high school graduate!!In labor force!!Civilian ) @@ -115,7 +114,6 @@ class CensusACS2010ETL(ExtractTransformLoad): tract_output_field_name=self.GEOID_TRACT_FIELD_NAME, data_path_for_fips_codes=self.DATA_PATH, acs_type=self.ACS_TYPE, - raise_errors=False, ) def transform(self) -> None: From 409c7238aec0bcf9a7cae081b0b4541d2704d1ac Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Fri, 17 Dec 2021 16:17:57 -0500 Subject: [PATCH 3/3] Make latest copy changes from Living Copy (#1055) * Make latest copy changes - update snapshots * Update cypress test on feedback link - update snapshot * Update side panel and copy - update snapshots * Make 2nd EO link open in new tab * Add latest changes from Living copy * Add back HS indicator to map * Add "X of Y thresholds exceed" to side panel - update snapshots * Update with latest copy * Update to latest copy - make BETA pill in logo bold - correct exceed to exceeded - update snapshots - update page title to Meth & data * Update total indicators to 21 * Update snapshot --- client/cypress/integration/AboutLinks.feature | 2 +- .../AreaDetail/areaDetail.module.scss | 29 ++-- .../AreaDetail/areaDetail.module.scss.d.ts | 4 +- client/src/components/AreaDetail/index.tsx | 34 ++-- .../__snapshots__/areaDetail.test.tsx.snap | 65 +++++-- .../__snapshots__/BetaBanner.test.tsx.snap | 6 +- .../__snapshots__/Categories.test.tsx.snap | 32 ++-- .../components/Category/Category.module.scss | 4 + .../Category/Category.module.scss.d.ts | 1 + client/src/components/Category/Category.tsx | 2 +- .../__snapshots__/datasetCard.test.tsx.snap | 2 +- .../datasetContainer.test.tsx.snap | 100 ++++++----- .../__snapshots__/howYouCanHelp.test.tsx.snap | 6 +- client/src/components/J40Footer.tsx | 8 +- .../J40Header/J40Header.module.scss | 1 + .../__snapshots__/J40Header.test.tsx.snap | 6 +- .../__snapshots__/mapLegend.test.tsx.snap | 6 +- .../__snapshots__/SurveyButton.test.tsx.snap | 2 +- .../__snapshots__/J40Footer.spec.tsx.snap | 4 +- .../__snapshots__/mapInfoPanel.test.tsx.snap | 4 +- client/src/data/blankCEJST/index.html | 7 + client/src/data/constants.tsx | 9 +- client/src/data/copy/about.tsx | 66 +++----- client/src/data/copy/common.tsx | 6 +- client/src/data/copy/contact.tsx | 6 +- client/src/data/copy/explore.tsx | 74 ++++---- client/src/data/copy/methodology.tsx | 147 +++++++++------- .../pages/__snapshots__/contact.test.tsx.snap | 15 +- .../pages/__snapshots__/index.test.tsx.snap | 69 +++++--- .../__snapshots__/methodology.test.tsx.snap | 159 ++++++++++-------- 30 files changed, 518 insertions(+), 358 deletions(-) diff --git a/client/cypress/integration/AboutLinks.feature b/client/cypress/integration/AboutLinks.feature index 5673a7c7..b89db2a1 100644 --- a/client/cypress/integration/AboutLinks.feature +++ b/client/cypress/integration/AboutLinks.feature @@ -22,7 +22,7 @@ Feature: All links on About page are functional Scenario: People can find how to Send feedback Given I am on the "About" page When I look for the "Send feedback" CTA - Then the link should allow client to send an email to "screeningtool.feedback@usds.gov" + Then the link should allow client to send an email to "Screeningtool-Support@omb.eop.gov" Scenario: Open source community can find and click on their CTA Given I am on the "About" page diff --git a/client/src/components/AreaDetail/areaDetail.module.scss b/client/src/components/AreaDetail/areaDetail.module.scss index 9e040590..9e319643 100644 --- a/client/src/components/AreaDetail/areaDetail.module.scss +++ b/client/src/components/AreaDetail/areaDetail.module.scss @@ -9,10 +9,14 @@ $sidePanelLabelFontColor: #171716; font-weight: 600; } +@mixin thresholdExceeded { + font-size: medium; + @include u-margin-top('05'); +} + .versionInfo { padding: .5rem 1rem .5rem 1.2rem; font-size: medium; - font-weight: bold; border-bottom: 1px solid $sidePanelBorderColor; } @@ -26,7 +30,7 @@ $sidePanelLabelFontColor: #171716; display: flex; flex-direction: column; align-items: center; - padding-bottom: 2rem; + @include u-padding-bottom(3); .isInFocus { padding: .5rem 1rem .25rem 1.2rem; @@ -44,6 +48,17 @@ $sidePanelLabelFontColor: #171716; } } + .showThresholdExceed { + @include thresholdExceeded; + display: block; + + } + + .hideThresholdExceed { + @include thresholdExceeded; + visibility: hidden; + } + .feedbackLink { font-size: small; @include u-margin-top(1); @@ -67,13 +82,3 @@ $sidePanelLabelFontColor: #171716; font-size: medium; } } - -//Divider styles -.divider { - @include sidePanelLabelStyle; - display: flex; - justify-content: space-between; - padding: 0.5rem 0.5rem 0.5rem 1.2rem; - border-top: 1px solid $sidePanelBorderColor; - border-bottom: 1px solid $sidePanelBorderColor; -} diff --git a/client/src/components/AreaDetail/areaDetail.module.scss.d.ts b/client/src/components/AreaDetail/areaDetail.module.scss.d.ts index db8bddfb..ad2fc967 100644 --- a/client/src/components/AreaDetail/areaDetail.module.scss.d.ts +++ b/client/src/components/AreaDetail/areaDetail.module.scss.d.ts @@ -3,14 +3,14 @@ declare namespace MapModuleScssNamespace { areaDetailContainer: string; categorization:string; communityOfFocus:string; - communityOfFocusCircle:string; censusRow:string; censusLabel:string; censusText: string; - divider:string; feedbackLink:string; isInFocus:string; versionInfo: string; + showThresholdExceed:string; + hideThresholdExceed:string; } } diff --git a/client/src/components/AreaDetail/index.tsx b/client/src/components/AreaDetail/index.tsx index 25ed4b15..550224ec 100644 --- a/client/src/components/AreaDetail/index.tsx +++ b/client/src/components/AreaDetail/index.tsx @@ -1,7 +1,7 @@ /* eslint-disable quotes */ // External Libs: import React from 'react'; -import {useIntl} from 'gatsby-plugin-intl'; +import {useIntl, FormattedMessage} from 'gatsby-plugin-intl'; import {Accordion} from '@trussworks/react-uswds'; // Components: @@ -234,14 +234,14 @@ const AreaDetail = ({properties}:IAreaDetailProps) => { isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ? properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null, }; - // const highSchool:indicatorInfo = { - // label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HIGH_SCL), - // description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HIGH_SKL), - // value: properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] ? - // properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] : null, - // isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ? - // properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null, - // }; + const highSchool:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HIGH_SCL), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HIGH_SKL), + value: properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] ? + properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU] ? + properties[constants.IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU] : null, + }; // Aggregate indicators based on categories const categories = [ @@ -297,7 +297,7 @@ const AreaDetail = ({properties}:IAreaDetailProps) => { { id: 'work-dev', titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.WORK_DEV), - indicators: [lowMedInc, lingIso, unemploy, poverty], + indicators: [lowMedInc, lingIso, unemploy, poverty, highSchool], isDisadvagtaged: properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] ? properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] : null, }, @@ -369,8 +369,22 @@ const AreaDetail = ({properties}:IAreaDetailProps) => {

{EXPLORE_COPY.COMMUNITY.NOT_OF_FOCUS}

} +
0 ? + styles.showThresholdExceed : styles.hideThresholdExceed + }> + +
{/* eslint-disable-next-line max-len */} {/* {EXPLORE_COPY.COMMUNITY.SEND_FEEDBACK} */} + {/* All category accordions in this component */} diff --git a/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap b/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap index 59a3c82e..40d5ac81 100644 --- a/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap +++ b/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap @@ -52,6 +52,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
+
+ of 21 thresholds exceeded +
Expected population loss rate
- Economic loss rate to the population in fatalities and injuries resulting from natural hazards + + Rate relative to the population in fatalities and injuries resulting from natural hazards each year +
@@ -171,7 +176,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 >
- Clean, efficient energy + Clean energy and energy efficiency
Energy cost burden
- Energy costs divided by household income + Average annual energy costs divided by household income
@@ -208,7 +213,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 >
- PM2.5 + PM2.5 in the air
Fine inhalable particles, 2.5 micrometers and smaller
@@ -273,7 +278,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 >
- Diesel particulate matter + Diesel particulate matter exposure
Diesel exhaust in the air
@@ -291,7 +296,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 >
- Traffic + Traffic proximity and volume
Count of vehicles at major roads within 500 meters
@@ -378,7 +383,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
Lead paint
- Pre-1960 housing + Percent of pre-1960 housing with a median home value is at or below 90th
@@ -477,7 +482,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 >
- Proximity to RMP sites + Proximity to RMP facilities
Risk Management Plan facilities within 5 km
@@ -523,7 +528,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 >
- Clean water and waste + Clean water and waste infrastructure
Asthma
- Number of people who have been told they have asthma + Weighted percent of people who have been told they have asthma
@@ -627,7 +632,10 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
Diabetes
- People ages 18 years and older who have diabetes other than diabetes during pregnancy + + Weighted percent of people ages 18 years and older who have diabetes other than + diabetes during pregnancy +
@@ -645,7 +653,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
Heart disease
- People ages 18 years and older who have been told they have heart disease + + Weighted percent of people ages 18 years and older who have been told they have heart disease +
@@ -746,8 +756,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
Linguistic isolation
- Households in which no one age 14 and over speaks English only or also speaks - a language other than English + + Percent of limited speaking households, which are households where no one over age 14 speaks English well +
@@ -787,8 +798,10 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
Poverty
- Percent of individuals in households where the household income is at or - below 100% of the federal poverty level + + Percent of a tract's population in households where the household income is at or below + 100% of the federal poverty level +
@@ -801,6 +814,26 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
+
  • +
    +
    + High school degree achievement rate +
    + + Percent of people ages 25 years or older whose education level is less than a high school diploma + +
    +
    +
    + N/A + + + +
    +
    +
  • diff --git a/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap b/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap index ad259d12..a688be38 100644 --- a/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap +++ b/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap @@ -7,11 +7,11 @@ exports[`rendering of the BetaBanner checks if component renders 1`] = `
    - This is a Beta site. + This is a beta site. - It is an early, in-progress version of the tool with limited data - sets that will be continuously updated. + It is an early, in-progress version of the tool with limited datasets + that will be continuously updated.
    diff --git a/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap b/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap index dd5a77ef..50a9511f 100644 --- a/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap +++ b/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap @@ -85,13 +85,13 @@ exports[`rendering of the Categories checks if component renders 1`] = ` - energy cost burden score + energy cost burden - OR + score OR - PM2.5 + PM2.5 in the air @@ -126,7 +126,7 @@ exports[`rendering of the Categories checks if component renders 1`] = ` - diesel particulate matter + diesel particulate matter exposure or - the median home value + low median home value - is less than - 90th percentile OR at or above the 90th percentile for the + is at or less than + 90th percentile OR at or above the 10th percentile for the @@ -221,13 +221,13 @@ exports[`rendering of the Categories checks if component renders 1`] = ` - proximity to NLP sites + proximity to NPL sites OR - proximity to RMP sites + proximity to RMP facilities @@ -346,14 +346,14 @@ exports[`rendering of the Categories checks if component renders 1`] = ` IF - at or above 90th percentile for + at or above the 90th percentile for - low median income relative to area median income + low median income - OR - at or above the 90th percentile for + as a percent of area median income OR + @@ -367,13 +367,13 @@ exports[`rendering of the Categories checks if component renders 1`] = ` unemployment OR - for percentage individuals in households at or below 100% federal + percent individuals in households at or below 100% federal poverty - level at or above 90% + level

    @@ -388,7 +388,7 @@ exports[`rendering of the Categories checks if component renders 1`] = ` > the high school degree achievement rates - for adults 25 years and older is less than 90% + for adults 25 years and older is at or less than 90%

    diff --git a/client/src/components/Category/Category.module.scss b/client/src/components/Category/Category.module.scss index c8e5ec8b..d06ffca3 100644 --- a/client/src/components/Category/Category.module.scss +++ b/client/src/components/Category/Category.module.scss @@ -3,4 +3,8 @@ .categoryContainer { display: flex; justify-content: space-between; + + .category { + flex-basis: 80%; + } } \ No newline at end of file diff --git a/client/src/components/Category/Category.module.scss.d.ts b/client/src/components/Category/Category.module.scss.d.ts index ab7b1b4e..9eafab43 100644 --- a/client/src/components/Category/Category.module.scss.d.ts +++ b/client/src/components/Category/Category.module.scss.d.ts @@ -1,6 +1,7 @@ declare namespace CategoryNamespace { export interface ICategoryScss { categoryContainer: string; + category:string; disadvantageDot: string; } } diff --git a/client/src/components/Category/Category.tsx b/client/src/components/Category/Category.tsx index d1bfc4d7..fd07427c 100644 --- a/client/src/components/Category/Category.tsx +++ b/client/src/components/Category/Category.tsx @@ -11,7 +11,7 @@ interface ICategory { const Category = ({name, isDisadvantaged}:ICategory) => { return (

    -
    +
    {name}
    diff --git a/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap b/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap index 91bd5c18..2006c358 100644 --- a/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap +++ b/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap @@ -6,7 +6,7 @@ exports[`rendering of indicator dataset card checks if component renders 1`] = ` id="low-income" >

    - Low Income + Low income

    diff --git a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap index e9ced9f2..0ce9f9f5 100644 --- a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap +++ b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap @@ -36,7 +36,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="low-income" >

    - Low Income + Low income

    @@ -75,11 +75,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="exp-agr-loss-rate" >

    - Expected Agriculture Loss Rate + Expected agriculture loss rate

    - Economic loss rate to agriculture resulting from natural hazards each year. + Percent of agriculture value at risk from losses due to natural hazards. Calculated by dividing + the agriculture value at risk in a census tract by the total agriculture value in that census + tract. Fourteen natural hazards that have some link to climate change include: avalanche, + coastal flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, + riverine flooding, strong wind, tornado, wildfire, and winter weather.
      @@ -113,11 +117,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="exp-bld-loss-rate" >

      - Expected Building Loss Rate + Expected building loss rate

      - Economic loss rate to buildings resulting from natural hazards each year. + Percent of building value at risk from losses due to natural hazards. Calculated by dividing the + building value at risk in a census tract by the total building value in that census tract. + Fourteen natural hazards that have some link to climate change include: avalanche, coastal flooding, + cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine flooding, strong + wind, tornado, wildfire, and winter weather.
        @@ -151,18 +159,22 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="exp-pop-loss-rate" >

        - Expected Population Loss Rate + Expected population loss rate

        - Rate relative to the population in fatalities and injuries resulting from natural hazards each - year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers - for Environmental Information’s reported number of fatalities and injuries caused by the - hazard occurrence. To combine fatalities and injuries for the computation of population loss value, - an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database - classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries - and fatalities are counted as population loss. This total number of injuries and fatalities is - then divided by the population in the census tract to get a per-capita rate of population risk. + Rate relative to the population in fatalities and injuries due to natural hazards each year. + Fourteen natural hazards that have some link to climate change include: avalanche, coastal + flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine + flooding, strong wind, tornado, wildfire, and winter weather. + Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s (NCEI) reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities + is then divided by the population in the census tract to get a per-capita rate of population risk. +
          @@ -196,7 +208,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="energy-burden" >

          - Energy burden + Energy cost burden

          Average annual energy cost ($) divided by household income. @@ -232,7 +244,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="pm-25" >

          - PM2.5 + PM2.5 in the air

          Fine inhalable particles, with diameters that are generally @@ -270,7 +282,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="diesel-pm" >

          - Diesel particulate matter + Diesel particulate matter exposure

          Mixture of particles that is part of diesel exhaust in the air. @@ -347,8 +359,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Housing cost burden
          - Households that are low income and spend more than 30% of their - income to housing costs. + + The percent of households in a census tract that are both earning less than 80% of HUD Area Median + Family Income by county and are paying greater than 30% of their income to housing costs. +
          • @@ -385,8 +399,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Lead paint
            - Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes. + + Percent of housing units built pre-1960, used as an indicator of potential lead paint exposure in + tracts with median home values less than 90th percentile
            • @@ -419,10 +434,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="median-home" >

              - Median home value + Low median home value

              - Median home value of owner-occupied housing units in the area. + Median home value of owner-occupied housing units in the census tract.
              • @@ -459,9 +474,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
                - Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large - Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. - + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. +
                • @@ -469,13 +484,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Responsible Party: - Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database - as compiled by EPA’s EJSCREEN + Environmental Protection Agency (EPA) Treatment Storage, and Disposal Facilities + (TSDF) data calculated from EPA RCRA info database as compiled by EPA’s EJSCREEN +
                • @@ -496,7 +512,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="prox-npl" >

                  - Proximity to National Priorities List (NPL) Sites + Proximity to National Priorities List (NPL) sites

                  @@ -534,7 +550,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="prox-rmp" >

                  - Proximity to Risk Management Plan (RMP) Sites + Proximity to Risk Management Plan (RMP) facilities

                  @@ -613,7 +629,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Asthma
                  - Weighted number of respondents people who answer “yes” both + Weighted percent of people who answer “yes” both to both of the following questions: “Have you ever been told by a doctor, nurse, or other health professional that you have asthma?” and the question “Do you still have asthma?” @@ -652,7 +668,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Diabetes
                  - People ages 18 years and older who report having ever been + Weighted percent of people ages 18 years and older who report having ever been told by a doctor, nurse, or other health professionals that they have diabetes other than diabetes during pregnancy.
                  @@ -690,7 +706,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Heart disease
                  - People ages 18 years and older who report ever having been told + Weighted percent of people ages 18 years and older who report ever having been told by a doctor, nurse, or other health professionals that they had angina or coronary heart disease.
                  @@ -728,7 +744,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Low life expectancy
                  - Average number of years of life a person who has attained a given age can expect to live. + + Average number of years of life a person who has attained a given age can expect to live. + Note: Unlike most of the other datasets, high values of this indicator indicate low burdens. + For percentile calculations, the percentile is calculated in reverse order, so that the tract with + the highest median income relative to area median income (lowest burden on this measure) is at the + 0th percentile, and the tract with the lowest median income relative to area median income + (highest burden on this measure) is at the 100th percentile. +
                  • @@ -758,7 +781,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis

                  Low median Income @@ -800,8 +823,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Linguistic Isolation

                  - Households in which no one age 14 and over speaks English only or also speaks - a language other than English + + The percent of limited speaking households, which are households where no one over age 14 speaks English well. +
                  • diff --git a/client/src/components/HowYouCanHelp/tests/__snapshots__/howYouCanHelp.test.tsx.snap b/client/src/components/HowYouCanHelp/tests/__snapshots__/howYouCanHelp.test.tsx.snap index f96262eb..4d0342ed 100644 --- a/client/src/components/HowYouCanHelp/tests/__snapshots__/howYouCanHelp.test.tsx.snap +++ b/client/src/components/HowYouCanHelp/tests/__snapshots__/howYouCanHelp.test.tsx.snap @@ -12,14 +12,15 @@ exports[`rendering of the HowYouCanHelp checks if various text fields are visibl - Methodology and data + Methodology & data page and send us feedback.
                  • Find communities of interest and share your feedback @@ -29,6 +30,7 @@ exports[`rendering of the HowYouCanHelp checks if various text fields are visibl Respond to our request for information on federalregister.gov diff --git a/client/src/components/J40Footer.tsx b/client/src/components/J40Footer.tsx index b428080d..911a35bc 100644 --- a/client/src/components/J40Footer.tsx +++ b/client/src/components/J40Footer.tsx @@ -21,8 +21,8 @@ const J40Footer = () => { [ intl.formatMessage(COMMON_COPY.FOOTER.CONTACT),
                    { , {intl.formatMessage(COMMON_COPY.FOOTER.FOIA)} , {intl.formatMessage(COMMON_COPY.FOOTER.PRIVACY)} , @@ -66,6 +66,8 @@ const J40Footer = () => { className={'footer-link-first-child'} key={'contactlink'} href={intl.formatMessage(COMMON_COPY.FOOTER.FIND_CONTACT_LINK)} + target={'_blank'} + rel="noreferrer" data-cy={hyphenizeString(COMMON_COPY.FOOTER.FIND_CONTACT.defaultMessage)}> {intl.formatMessage(COMMON_COPY.FOOTER.FIND_CONTACT)} , diff --git a/client/src/components/J40Header/J40Header.module.scss b/client/src/components/J40Header/J40Header.module.scss index 8ffc39ac..092171a7 100644 --- a/client/src/components/J40Header/J40Header.module.scss +++ b/client/src/components/J40Header/J40Header.module.scss @@ -33,6 +33,7 @@ @include u-padding-top('05'); @include u-margin-left(1); @include u-font("body", "2xs"); + @include u-text('bold') } .navLinks { diff --git a/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap b/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap index cf3aa206..3c9912ca 100644 --- a/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap +++ b/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap @@ -147,11 +147,11 @@ exports[`rendering of the J40Header checks if component renders 1`] = `
                    - This is a Beta site. + This is a beta site. - It is an early, in-progress version of the tool with limited data - sets that will be continuously updated. + It is an early, in-progress version of the tool with limited datasets + that will be continuously updated.
                    diff --git a/client/src/components/MapLegend/tests/__snapshots__/mapLegend.test.tsx.snap b/client/src/components/MapLegend/tests/__snapshots__/mapLegend.test.tsx.snap index 2351cb1f..32a5f4d4 100644 --- a/client/src/components/MapLegend/tests/__snapshots__/mapLegend.test.tsx.snap +++ b/client/src/components/MapLegend/tests/__snapshots__/mapLegend.test.tsx.snap @@ -14,9 +14,9 @@ exports[`rendering of the MapLegend checks if snapshots have changed 1`] = ` class="secondary" > - Communities identified for the purposes of Justice40 as disadvantaged have been - historically marginalized, underserved, and overburdened by pollution. These communities - meet or exceed the criteria in one or more areas of focus. + Communities identified as disadvantaged for the purposes of Justice40 have been + historically marginalized, underserved, and overburdened by pollution. These communities meet + or exceed the criteria in one or more areas of focus.

                    diff --git a/client/src/components/SurveyButton/__snapshots__/SurveyButton.test.tsx.snap b/client/src/components/SurveyButton/__snapshots__/SurveyButton.test.tsx.snap index 4b985711..762c06c1 100644 --- a/client/src/components/SurveyButton/__snapshots__/SurveyButton.test.tsx.snap +++ b/client/src/components/SurveyButton/__snapshots__/SurveyButton.test.tsx.snap @@ -11,7 +11,7 @@ exports[`rendering of the SurveyButton checks if component renders 1`] = ` data-testid="button" type="button" > - Tell us how we're doing + Help improve the site & data
                  diff --git a/client/src/components/__snapshots__/J40Footer.spec.tsx.snap b/client/src/components/__snapshots__/J40Footer.spec.tsx.snap index eda1acfe..8ae053fc 100644 --- a/client/src/components/__snapshots__/J40Footer.spec.tsx.snap +++ b/client/src/components/__snapshots__/J40Footer.spec.tsx.snap @@ -134,6 +134,8 @@ exports[`J40Footer renders correctly 1`] = ` class="footer-link-first-child" data-cy="find-a-contact-at-usa-gov" href="https://www.usa.gov/" + rel="noreferrer" + target="_blank" > Find a contact at USA.gov @@ -185,7 +187,7 @@ exports[`J40Footer renders correctly 1`] = ` data-testid="button" type="button" > - Tell us how we're doing + Help improve the site & data
                  diff --git a/client/src/components/__snapshots__/mapInfoPanel.test.tsx.snap b/client/src/components/__snapshots__/mapInfoPanel.test.tsx.snap index 35cc9e93..ee7baebc 100644 --- a/client/src/components/__snapshots__/mapInfoPanel.test.tsx.snap +++ b/client/src/components/__snapshots__/mapInfoPanel.test.tsx.snap @@ -22,10 +22,10 @@ exports[`simulate app starting up, no click on map should match the snapshot of
                  - A census tract is generally between 1,200 and 8,000 people, with an optimum size of 4,000 people. + A census tract is generally between 1,200 and 8,000 people, with an average size of 4,000 people. Census tracts are small, relatively permanent subdivisions of a county defined by the U.S. Census Bureau and usually cover a contiguous area. The census tract level represents the - smallest geographical unity that can be presented in a statistically sound manner, given the + smallest geographical unit that can be presented in a statistically sound manner, given the datasets that are being used. diff --git a/client/src/data/blankCEJST/index.html b/client/src/data/blankCEJST/index.html index ac2294fd..7f5efce2 100644 --- a/client/src/data/blankCEJST/index.html +++ b/client/src/data/blankCEJST/index.html @@ -4,6 +4,13 @@ + + + diff --git a/client/src/data/constants.tsx b/client/src/data/constants.tsx index d80c96bf..11672588 100644 --- a/client/src/data/constants.tsx +++ b/client/src/data/constants.tsx @@ -74,13 +74,17 @@ export const PROXIMITY_TSDF_SITES_PERCENTILE = 'TSDF_PFS'; // Category booleans (disadvantaged or not): export const IS_CLIMATE_FACTOR_DISADVANTAGED_L = 'L_CLT'; -export const IS_WORKFORCE_FACTOR_DISADVANTAGED_L = 'L_WKFC'; -export const IS_WATER_FACTOR_DISADVANTAGED_L = 'L_WTR'; export const IS_ENERGY_FACTOR_DISADVANTAGED_L = 'L_ENY'; export const IS_TRANSPORT_FACTOR_DISADVANTAGED_L = 'L_TRN'; export const IS_HOUSING_FACTOR_DISADVANTAGED_L = 'L_HSG'; export const IS_POLLUTION_FACTOR_DISADVANTAGED_L = 'L_PLN'; +export const IS_WATER_FACTOR_DISADVANTAGED_L = 'L_WTR'; export const IS_HEALTH_FACTOR_DISADVANTAGED_L = 'L_HLTH'; +export const IS_WORKFORCE_FACTOR_DISADVANTAGED_L = 'L_WKFC'; + +// Total indicators values: +export const TOTAL_NUMBER_OF_DISADVANTAGE_INDICATORS = 'TC'; +export const TOTAL_NUMBER_OF_INDICATORS = 21; // Indicator booleans (disadvangted or not): (GTE = greater than or equal) export const IS_GTE_90_EXP_POP_LOSS_AND_IS_LOW_INCOME = 'EPLRLI'; @@ -109,7 +113,6 @@ export const TOTAL_THRESHOLD_CRITERIA = 'TC'; export const IS_GTE_90_ISLAND_AREA_UNEMPLOYMENT_AND_IS_LOW_HS_EDU_2009 = 'IAULHSE'; export const IS_GTE_90_ISLAND_AREA_BELOW_100_POVERTY_AND_IS_LOW_HS_EDU_2009 = 'ISPLHSE'; export const IS_GTE_90_ISLAND_AREA_LOW_MEDIAN_INCOME_AND_IS_LOW_HS_EDU_2009 = 'IALMILHSE'; - export type J40Properties = { [key: string]: any }; // The name of the layer within the tiles that contains the score diff --git a/client/src/data/copy/about.tsx b/client/src/data/copy/about.tsx index 2ee17daf..38341089 100644 --- a/client/src/data/copy/about.tsx +++ b/client/src/data/copy/about.tsx @@ -2,7 +2,7 @@ import React from 'react'; import {defineMessages} from 'react-intl'; import {FormattedMessage} from 'gatsby-plugin-intl'; -export const EXEC_ORDER_LINK = 'https://www.federalregister.gov/documents/2021/02/01/2021-02177/tackling-the-climate-crisis-at-home-and-abroad#:~:text=Sec.%20223.%20Justice40,40-percent%20goal.'; +export const EXEC_ORDER_LINK = 'https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/'; export const PAGE = defineMessages({ TILE: { @@ -12,7 +12,7 @@ export const PAGE = defineMessages({ }, HEADING: { id: 'index.heading.about.us', - defaultMessage: 'About us', + defaultMessage: 'About', description: 'main heading for about page', }, HEADING_1: { @@ -20,19 +20,6 @@ export const PAGE = defineMessages({ defaultMessage: 'Screening tool', description: 'heading for about screening tool', }, - HEADING1_DESCRIPTION1: { - id: 'about.page.sub.header.1.text.1', - defaultMessage: 'In Executive Order 14008 on Tackling the Climate Crisis at Home and Abroad'+ - ' Environmental Quality (CEQ) to create a climate and economic'+ - ' justice screening tool. The purpose of the tool is to help'+ - ' Federal agencies identify disadvantaged communities and provide'+ - ' socioeconomic, environmental, and climate information and data'+ - ' to inform decisions that may affect these communities. The tool'+ - ' identifies disadvantaged communities as communities of focus'+ - ' through publicly available, nationally consistent, high-quality'+ - ' data.', - description: 'about page sub header text', - }, HEADING1_DESCRIPTION2: { id: 'about.page.sub.header.1.text.2', defaultMessage: 'The current version of the tool is in a public beta form and'+ @@ -41,20 +28,21 @@ export const PAGE = defineMessages({ }, HEADING_2: { id: 'index.heading.justice40', - defaultMessage: 'Justice40 Initiative', + defaultMessage: 'Justice40', description: 'heading for about justice 40', }, HEADING2_DESCRIPTION1: { id: 'about.page.sub.header.2.text.1', - defaultMessage: 'The tool will provide important information for the Justice40'+ - ' Initiative. The goal of the Justice40 Initiative is to provide'+ - ' 40-percent of the overall benefits of certain federal'+ - ' programs in seven key areas to disadvantaged communities.'+ - ' These seven key areas are: climate change, clean energy and'+ - ' energy efficiency, clean transit, affordable and sustainable'+ - ' housing, training and workforce development, the remediation'+ - ' and reduction of legacy pollution, and the development of'+ - ' critical clean water infrastructure.', + defaultMessage: ` + The tool will provide important information for the Justice40 Initiative. The goal of the + Justice40 Initiative is to provide 40 percent of the overall benefits of certain federal + programs in seven key areas to disadvantaged communities. These seven key areas are: climate + change, clean energy and energy efficiency, clean transit, affordable and sustainable + housing, training and workforce development (related to climate, natural disasters, environment, + clean energy, clean transportation, affordable and sustainable housing, water and + wastewater infrastructure, and legacy pollution reduction, including in energy communities), + the remediation and reduction of legacy pollution, and the development of critical clean water infrastructure. + `, description: 'about page sub header text', }, }); @@ -65,24 +53,19 @@ export const HEADING_1 = { id={'about.page.sub.header.1.text.1'} description={'about page sub header text'} defaultMessage={` - In {eoLink} on Tackling the Climate Crisis at Home and Abroad, - President Biden directed the Council on - Environmental Quality (CEQ) to create a Climate and Economic - Justice Screening Tool. The purpose of the tool is to help - Federal agencies identify disadvantaged communities - that have been historically marginalized, underserved, and - overburdened by pollution. The tool provides - socioeconomic, environmental, and climate information - to inform decisions that may affect these communities. The tool - identifies disadvantaged communities - through publicly available, nationally consistent, high-quality - data. + In {eoLink} on {tacklingItalics}, President Biden directed the Council on Environmental Quality (CEQ) + to create a Climate and Economic Justice Screening Tool. The purpose of the tool is to help + Federal agencies identify disadvantaged communities that have been historically + marginalized, underserved, and overburdened by pollution. The tool provides socioeconomic, + environmental, and climate information to inform decisions that may affect these communities. The + tool identifies disadvantaged communities through publicly-available, nationally-consistent, and high-quality data. `} values={{ eoLink: - + Executive Order 14008 , + tacklingItalics: Tackling the Climate Crisis at Home and Abroad, }} />, }; @@ -94,13 +77,14 @@ export const HEADING_2 = { description={'about page sub header text'} defaultMessage={` Read more about the Justice40 Initiative in President Biden’s - {eoLink} on Tackling the Climate Crisis at Home and Abroad. + {eoLink} on {tacklingItalics}. `} values={{ eoLink: - + Executive Order 14008 , + tacklingItalics: Tackling the Climate Crisis at Home and Abroad, }} />, }; @@ -176,7 +160,7 @@ export const GET_INVOLVED = defineMessages({ JOIN_OSC_INFO: { id: 'join.open.source.info', defaultMessage: 'The screening tool’s code is open source, which means it is '+ - ' available for the public to view and contribute to. Anyone can view and contribute on GitHub.', + ' available for the public to view and contribute to.', description: 'info on joining open source community', }, JOIN_OSC_LINK_TEXT: { diff --git a/client/src/data/copy/common.tsx b/client/src/data/copy/common.tsx index 9b42cfca..689c8584 100644 --- a/client/src/data/copy/common.tsx +++ b/client/src/data/copy/common.tsx @@ -4,13 +4,13 @@ import {defineMessages} from 'react-intl'; export const BETA_BANNER = defineMessages({ TITLE: { id: 'banner.beta.title', - defaultMessage: 'This is a Beta site.', + defaultMessage: 'This is a beta site.', description: 'the main title of the beta banner', }, INFO: { id: 'banner.beta.info', - defaultMessage: `It is an early, in-progress version of the tool with limited data - sets that will be continuously updated.`, + defaultMessage: `It is an early, in-progress version of the tool with limited datasets + that will be continuously updated.`, description: 'the main info of the beta banner', }, }); diff --git a/client/src/data/copy/contact.tsx b/client/src/data/copy/contact.tsx index 23cf7328..47815ba7 100644 --- a/client/src/data/copy/contact.tsx +++ b/client/src/data/copy/contact.tsx @@ -23,7 +23,7 @@ export const PAGE_INTRO = defineMessages({ }, SURVEY_TEXT: { id: 'fab.survey.text', - defaultMessage: `Tell us how we're doing`, + defaultMessage: `Help improve the site & data`, description: 'text for floating action button', }, }); @@ -31,7 +31,7 @@ export const PAGE_INTRO = defineMessages({ export const CONTACT_VIA_EMAIL = { ID: 'contact.general', DESCRIPTION: 'Contact page body text', - DEFAULT_MESSAGE: `For general feedback, email {general_email_address}`, + DEFAULT_MESSAGE: `For general feedback, email {general_email_address}.`, }; -export const FEEDBACK_EMAIL = 'screeningtool.feedback@usds.gov'; +export const FEEDBACK_EMAIL = 'Screeningtool-Support@omb.eop.gov'; diff --git a/client/src/data/copy/explore.tsx b/client/src/data/copy/explore.tsx index 840f7695..7d87c426 100644 --- a/client/src/data/copy/explore.tsx +++ b/client/src/data/copy/explore.tsx @@ -30,8 +30,8 @@ export const PAGE_DESCRIPTION = methodology & data, - methodologyLinkEs: metodología y datos, + methodologyLink: Methodology & data, + methodologyLinkEs: Metodología y datos, }} />; @@ -44,9 +44,9 @@ export const LEGEND = defineMessages({ PRIORITY_DESCRIPT: { id: 'legend.info.threshold.label', defaultMessage: ` - Communities identified for the purposes of Justice40 as disadvantaged have been - historically marginalized, underserved, and overburdened by pollution. These communities - meet or exceed the criteria in one or more areas of focus. + Communities identified as disadvantaged for the purposes of Justice40 have been + historically marginalized, underserved, and overburdened by pollution. These communities meet + or exceed the criteria in one or more areas of focus. `, description: 'the label of the threshold community legend', @@ -169,10 +169,10 @@ export const SIDE_PANEL_INITIAL_STATE = defineMessages({ CBG_DEFINITION: { id: 'mapIntro.censusBlockGroupDefinition', defaultMessage: ` - A census tract is generally between 1,200 and 8,000 people, with an optimum size of 4,000 people. + A census tract is generally between 1,200 and 8,000 people, with an average size of 4,000 people. Census tracts are small, relatively permanent subdivisions of a county defined by the U.S. Census Bureau and usually cover a contiguous area. The census tract level represents the - smallest geographical unity that can be presented in a statistically sound manner, given the + smallest geographical unit that can be presented in a statistically sound manner, given the datasets that are being used. `, description: 'cites the definition and helpful information about census groups', @@ -244,7 +244,7 @@ export const SIDE_PANEL_CATEGORY = defineMessages({ }, CLEAN_ENERGY: { id: 'areaDetail.indicator.title.clean.energy', - defaultMessage: 'Clean, efficient energy ', + defaultMessage: 'Clean energy and energy efficiency', description: 'Clean, efficient energy title', }, CLEAN_TRANSPORT: { @@ -264,7 +264,7 @@ export const SIDE_PANEL_CATEGORY = defineMessages({ }, CLEAN_WATER: { id: 'areaDetail.indicator.title.clean.water', - defaultMessage: 'Clean water and waste', + defaultMessage: 'Clean water and waste infrastructure', description: 'Clean water and waste title', }, HEALTH_BURDEN: { @@ -307,17 +307,17 @@ export const SIDE_PANEL_INDICATORS = defineMessages({ }, PM_2_5: { id: 'areaDetail.indicator.pm25', - defaultMessage: 'PM2.5', + defaultMessage: 'PM2.5 in the air', description: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller', }, DIESEL_PARTICULATE_MATTER: { id: 'areaDetail.indicator.dieselPartMatter', - defaultMessage: 'Diesel particulate matter', + defaultMessage: 'Diesel particulate matter exposure', description: 'Diesel particulate matter level in air', }, TRAFFIC_VOLUME: { id: 'areaDetail.indicator.trafficVolume', - defaultMessage: 'Traffic', + defaultMessage: 'Traffic proximity and volume', description: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' + ' divided by distance in meters', }, @@ -350,7 +350,7 @@ export const SIDE_PANEL_INDICATORS = defineMessages({ }, PROX_RMP: { id: 'areaDetail.indicator.prox.rmp', - defaultMessage: 'Proximity to RMP sites', + defaultMessage: 'Proximity to RMP facilities', description: 'Count of proposed or listed RMP', }, WASTE_WATER: { @@ -422,7 +422,9 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ }, EXP_POP_LOSS: { id: 'areaDetail.indicator.description.exp.pop.loss', - defaultMessage: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards', + defaultMessage: ` + Rate relative to the population in fatalities and injuries resulting from natural hazards each year + `, description: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards', }, LOW_INCOME: { @@ -433,7 +435,7 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ ENERGY_BURDEN: { id: 'areaDetail.indicator.description.energyBurden', - defaultMessage: 'Energy costs divided by household income', + defaultMessage: 'Average annual energy costs divided by household income', description: 'Energy costs divided by household income', }, PM_2_5: { @@ -455,12 +457,12 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ LEAD_PAINT: { id: 'areaDetail.indicator.description.leadPaint', - defaultMessage: 'Pre-1960 housing', + defaultMessage: 'Percent of pre-1960 housing with a median home value is at or below 90th', description: 'Pre-1960 housing', }, MED_HOME_VAL: { id: 'areaDetail.indicator.description.med.home.val', - defaultMessage: 'Meidan home value in area', + defaultMessage: 'Median home value in area', description: 'Meidan home value in area', }, @@ -494,17 +496,22 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ ASTHMA: { id: 'areaDetail.indicator.description.asthma', - defaultMessage: 'Number of people who have been told they have asthma', + defaultMessage: 'Weighted percent of people who have been told they have asthma', description: 'Number of people who have been told they have asthma', }, DIABETES: { id: 'areaDetail.indicator.description.diabetes', - defaultMessage: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy', + defaultMessage: ` + Weighted percent of people ages 18 years and older who have diabetes other than + diabetes during pregnancy + `, description: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy', }, HEART_DISEASE: { id: 'areaDetail.indicator.description.heartDisease', - defaultMessage: 'People ages 18 years and older who have been told they have heart disease', + defaultMessage: ` + Weighted percent of people ages 18 years and older who have been told they have heart disease + `, description: 'People ages 18 years and older who have been told they have heart disease', }, LOW_LIFE_EXPECT: { @@ -520,8 +527,9 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ }, LING_ISO: { id: 'areaDetail.indicator.description.ling.iso', - defaultMessage: `Households in which no one age 14 and over speaks English only or also speaks - a language other than English`, + defaultMessage: ` + Percent of limited speaking households, which are households where no one over age 14 speaks English well + `, description: `Households in which no one age 14 and over speaks English only or also speaks a language other than English`, }, @@ -532,14 +540,18 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ }, POVERTY: { id: 'areaDetail.indicator.description.poverty', - defaultMessage: `Percent of individuals in households where the household income is at or - below 100% of the federal poverty level`, + defaultMessage: ` + Percent of a tract's population in households where the household income is at or below + 100% of the federal poverty level + `, description: `Percent of individuals in households where the household income is at or below 100% of the federal poverty level`, }, HIGH_SKL: { id: 'areaDetail.indicator.description.high.school', - defaultMessage: 'Percent of people ages 25 years or older whose education level is less than a high school diploma', + defaultMessage: ` + Percent of people ages 25 years or older whose education level is less than a high school diploma + `, description: 'Percent of people ages 25 years or older whose education level is less than a high school diploma', }, }); @@ -585,11 +597,11 @@ export const NOTE_ON_TERRITORIES = { PARA_1: - {'Methodology and data'} + {'Methodology & data'} , dataMethEs: @@ -638,7 +650,7 @@ export const HOW_YOU_CAN_HELP_LIST_ITEMS = { defaultMessage={`Find communities of interest and {shareFeedback}.`} values={{ shareFeedback: - + {'share your feedback'} , }} @@ -649,7 +661,7 @@ export const HOW_YOU_CAN_HELP_LIST_ITEMS = { defaultMessage={`Respond to our request for information on {federalRegisterLink}.`} values={{ federalRegisterLink: - + {'federalregister.gov'} , }} diff --git a/client/src/data/copy/methodology.tsx b/client/src/data/copy/methodology.tsx index ee11849b..278bbae8 100644 --- a/client/src/data/copy/methodology.tsx +++ b/client/src/data/copy/methodology.tsx @@ -5,7 +5,7 @@ import {FormattedMessage} from 'gatsby-plugin-intl'; export const PAGE = defineMessages({ TILE: { id: 'methodology.page.title.text', - defaultMessage: 'Data and Methodology', + defaultMessage: 'Methodology & data', description: 'methodology page title text', }, HEADING: { @@ -16,11 +16,10 @@ export const PAGE = defineMessages({ DESCRIPTION: { id: 'methodology.page.paragraph', defaultMessage: ` - This tool identifies commmunities that are economically disadvantaged, overburdened by - certain environmental risks, and marginalized by legacies of historic underinvestment. - A community qualifies as 'disadvantaged' when a census tract is at or above a certain - threshold for a climate or environmental burden indicator and also above a certain - threshold for a socioeconomic indicator. Census tract geographical boundaries are + This tool identifies communities that are overburdened by pollution and other environmental exposures + and disadvantaged by underinvestment. A community qualifies as disadvantaged when a census tract + is at or above a certain threshold for a climate or environmental burden indicator and also above + a certain threshold for a socioeconomic indicator. Census tract geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool untilizes the census tract boundaries from 2010. `, @@ -36,8 +35,8 @@ export const PAGE = defineMessages({ CATEGORY_TEXT: { id: 'methodology.page.categories.title', defaultMessage: ` - Communities will be defined as disadvantaged if they meet the qualifications under one - or more of the 8 categories of criteria below. + Communities will be defined as disadvantaged for the purposes of Justice40 if they meet + the qualifications under one or more of the eight categories of criteria below. `, description: 'methodology page explanation of the categories', }, @@ -73,7 +72,7 @@ export const FORMULA = { }; // Download Package -export const DOWNLOAD_FILE_SIZE = '111MB'; +export const DOWNLOAD_FILE_SIZE = '73MB'; export const DOWNLOAD_LAST_UPDATED = '12/13/21'; export const DOWNLOAD_LAST_UPDATED_ES = '13/12/21'; export const VERSION_NUMBER = '0.1'; @@ -97,7 +96,7 @@ export const DOWNLOAD_PACKAGE = { DESCRIPTION: IF, - energyCostBur: energy cost burden score, - pm25: PM2.5, + energyCostBur: energy cost burden, + pm25: PM2.5 in the air, }} />, AND: IF, - dieselPM: diesel particulate matter, + dieselPM: diesel particulate matter exposure, traffic: traffic proximity and volume, }} />, @@ -270,14 +269,14 @@ export const CATEGORIES = { IF: IF, lead: lead paint, - medianHomeVal: the median home value, + medianHomeVal: low median home value, houseBur: housing cost burden, }} />, @@ -315,8 +314,8 @@ export const CATEGORIES = { values= {{ if: IF, proxHaz: proximity to hazardous waste facilities, - proxNPL: proximity to NLP sites, - proxRMP: proximity to RMP sites, + proxNPL: proximity to NPL sites, + proxRMP: proximity to RMP facilities, }} />, AND: IF, - lowMedInc: low median income relative to area median income, + lowMedInc: low median income, linIso: linguistic isolation, unemploy: unemployment, poverty: poverty, @@ -439,7 +438,7 @@ export const CATEGORIES = { AND:
                  - This is a Beta site. + This is a beta site. - It is an early, in-progress version of the tool with limited data - sets that will be continuously updated. + It is an early, in-progress version of the tool with limited datasets + that will be continuously updated.
          @@ -293,12 +293,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis

          For general feedback, email - screeningtool.feedback@usds.gov + Screeningtool-Support@omb.eop.gov + .

          @@ -436,6 +437,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis class="footer-link-first-child" data-cy="find-a-contact-at-usa-gov" href="https://www.usa.gov/" + rel="noreferrer" + target="_blank" > Find a contact at USA.gov @@ -487,7 +490,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis data-testid="button" type="button" > - Tell us how we're doing + Help improve the site & data
    diff --git a/client/src/pages/__snapshots__/index.test.tsx.snap b/client/src/pages/__snapshots__/index.test.tsx.snap index c93feba8..b1fc8bf6 100644 --- a/client/src/pages/__snapshots__/index.test.tsx.snap +++ b/client/src/pages/__snapshots__/index.test.tsx.snap @@ -147,11 +147,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
    - This is a Beta site. + This is a beta site. - It is an early, in-progress version of the tool with limited data - sets that will be continuously updated. + It is an early, in-progress version of the tool with limited datasets + that will be continuously updated.
    @@ -279,7 +279,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis

    - About us + About

    Executive Order 14008 - on Tackling the Climate Crisis at Home and Abroad, - President Biden directed the Council on - Environmental Quality (CEQ) to create a Climate and Economic - Justice Screening Tool. The purpose of the tool is to help - Federal agencies identify disadvantaged communities - that have been historically marginalized, underserved, and - overburdened by pollution. The tool provides - socioeconomic, environmental, and climate information - to inform decisions that may affect these communities. The tool - identifies disadvantaged communities - through publicly available, nationally consistent, high-quality - data. + on + + Tackling the Climate Crisis at Home and Abroad + + , President Biden directed the Council on Environmental Quality (CEQ) + to create a Climate and Economic Justice Screening Tool. The purpose of the tool is to help + Federal agencies identify disadvantaged communities that have been historically + marginalized, underserved, and overburdened by pollution. The tool provides socioeconomic, + environmental, and climate information to inform decisions that may affect these communities. The + tool identifies disadvantaged communities through publicly-available, nationally-consistent, and high-quality data.

    @@ -362,14 +361,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis data-testid="grid" > Justice40 Initiative

    - Justice40 Initiative + Justice40

    - The tool will provide important information for the Justice40 Initiative. The goal of the Justice40 Initiative is to provide 40-percent of the overall benefits of certain federal programs in seven key areas to disadvantaged communities. These seven key areas are: climate change, clean energy and energy efficiency, clean transit, affordable and sustainable housing, training and workforce development, the remediation and reduction of legacy pollution, and the development of critical clean water infrastructure. + + The tool will provide important information for the Justice40 Initiative. The goal of the + Justice40 Initiative is to provide 40 percent of the overall benefits of certain federal + programs in seven key areas to disadvantaged communities. These seven key areas are: climate + change, clean energy and energy efficiency, clean transit, affordable and sustainable + housing, training and workforce development (related to climate, natural disasters, environment, + clean energy, clean transportation, affordable and sustainable housing, water and + wastewater infrastructure, and legacy pollution reduction, including in energy communities), + the remediation and reduction of legacy pollution, and the development of critical clean water infrastructure. +

    Read more about the Justice40 Initiative in President Biden’s Executive Order 14008 - on Tackling the Climate Crisis at Home and Abroad. + on + + Tackling the Climate Crisis at Home and Abroad + + .

    @@ -575,11 +588,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis > - Email: screeningtool.feedback@usds.gov + Email: Screeningtool-Support@omb.eop.gov
    @@ -623,7 +636,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Join the open source community

    - The screening tool’s code is open source, which means it is available for the public to view and contribute to. Anyone can view and contribute on GitHub. + The screening tool’s code is open source, which means it is available for the public to view and contribute to.

    diff --git a/client/src/pages/__snapshots__/methodology.test.tsx.snap b/client/src/pages/__snapshots__/methodology.test.tsx.snap index 7eb5cde0..44fb8798 100644 --- a/client/src/pages/__snapshots__/methodology.test.tsx.snap +++ b/client/src/pages/__snapshots__/methodology.test.tsx.snap @@ -147,11 +147,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
    - This is a Beta site. + This is a beta site. - It is an early, in-progress version of the tool with limited data - sets that will be continuously updated. + It is an early, in-progress version of the tool with limited datasets + that will be continuously updated.
    @@ -290,11 +290,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis

    - This tool identifies commmunities that are economically disadvantaged, overburdened by - certain environmental risks, and marginalized by legacies of historic underinvestment. - A community qualifies as 'disadvantaged' when a census tract is at or above a certain - threshold for a climate or environmental burden indicator and also above a certain - threshold for a socioeconomic indicator. Census tract geographical boundaries are + This tool identifies communities that are overburdened by pollution and other environmental exposures + and disadvantaged by underinvestment. A community qualifies as disadvantaged when a census tract + is at or above a certain threshold for a climate or environmental burden indicator and also above + a certain threshold for a socioeconomic indicator. Census tract geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool untilizes the census tract boundaries from 2010. @@ -330,8 +329,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis >

    - Communities will be defined as disadvantaged if they meet the qualifications under one - or more of the 8 categories of criteria below. + Communities will be defined as disadvantaged for the purposes of Justice40 if they meet + the qualifications under one or more of the eight categories of criteria below.

    @@ -348,11 +347,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
    - Draft communities list v0.1 (111MB) + Draft communities list v0.1 (73MB)
    - The package includes draft v0.1 of the list of disadvantaged communities + The download package includes draft v0.1 of the list of disadvantaged communities (.csv and .xlsx) and information (.pdf) about how to use the list. @@ -485,13 +484,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis - energy cost burden score + energy cost burden - OR + score OR - PM2.5 + PM2.5 in the air @@ -526,7 +525,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis - diesel particulate matter + diesel particulate matter exposure or - the median home value + low median home value - is less than - 90th percentile OR at or above the 90th percentile for the + is at or less than + 90th percentile OR at or above the 10th percentile for the @@ -621,13 +620,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis - proximity to NLP sites + proximity to NPL sites OR - proximity to RMP sites + proximity to RMP facilities @@ -746,14 +745,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis IF - at or above 90th percentile for + at or above the 90th percentile for - low median income relative to area median income + low median income - OR - at or above the 90th percentile for + as a percent of area median income OR + @@ -767,13 +766,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis unemployment OR - for percentage individuals in households at or below 100% federal + percent individuals in households at or below 100% federal poverty - level at or above 90% + level

    @@ -788,7 +787,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis > the high school degree achievement rates - for adults 25 years and older is less than 90% + for adults 25 years and older is at or less than 90%

    @@ -833,7 +832,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="low-income" >

    - Low Income + Low income

    @@ -872,11 +871,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="exp-agr-loss-rate" >

    - Expected Agriculture Loss Rate + Expected agriculture loss rate

    - Economic loss rate to agriculture resulting from natural hazards each year. + Percent of agriculture value at risk from losses due to natural hazards. Calculated by dividing + the agriculture value at risk in a census tract by the total agriculture value in that census + tract. Fourteen natural hazards that have some link to climate change include: avalanche, + coastal flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, + riverine flooding, strong wind, tornado, wildfire, and winter weather.
      @@ -910,11 +913,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="exp-bld-loss-rate" >

      - Expected Building Loss Rate + Expected building loss rate

      - Economic loss rate to buildings resulting from natural hazards each year. + Percent of building value at risk from losses due to natural hazards. Calculated by dividing the + building value at risk in a census tract by the total building value in that census tract. + Fourteen natural hazards that have some link to climate change include: avalanche, coastal flooding, + cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine flooding, strong + wind, tornado, wildfire, and winter weather.
        @@ -948,18 +955,22 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="exp-pop-loss-rate" >

        - Expected Population Loss Rate + Expected population loss rate

        - Rate relative to the population in fatalities and injuries resulting from natural hazards each - year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers - for Environmental Information’s reported number of fatalities and injuries caused by the - hazard occurrence. To combine fatalities and injuries for the computation of population loss value, - an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database - classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries - and fatalities are counted as population loss. This total number of injuries and fatalities is - then divided by the population in the census tract to get a per-capita rate of population risk. + Rate relative to the population in fatalities and injuries due to natural hazards each year. + Fourteen natural hazards that have some link to climate change include: avalanche, coastal + flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine + flooding, strong wind, tornado, wildfire, and winter weather. + Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s (NCEI) reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities + is then divided by the population in the census tract to get a per-capita rate of population risk. +
          @@ -993,7 +1004,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="energy-burden" >

          - Energy burden + Energy cost burden

          Average annual energy cost ($) divided by household income. @@ -1029,7 +1040,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="pm-25" >

          - PM2.5 + PM2.5 in the air

          Fine inhalable particles, with diameters that are generally @@ -1067,7 +1078,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="diesel-pm" >

          - Diesel particulate matter + Diesel particulate matter exposure

          Mixture of particles that is part of diesel exhaust in the air. @@ -1144,8 +1155,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Housing cost burden
          - Households that are low income and spend more than 30% of their - income to housing costs. + + The percent of households in a census tract that are both earning less than 80% of HUD Area Median + Family Income by county and are paying greater than 30% of their income to housing costs. +
          • @@ -1182,8 +1195,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Lead paint
            - Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes. + + Percent of housing units built pre-1960, used as an indicator of potential lead paint exposure in + tracts with median home values less than 90th percentile
            • @@ -1216,10 +1230,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="median-home" >

              - Median home value + Low median home value

              - Median home value of owner-occupied housing units in the area. + Median home value of owner-occupied housing units in the census tract.
              • @@ -1256,9 +1270,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
                - Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large - Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. - + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. +
                • @@ -1266,13 +1280,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Responsible Party: - Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database - as compiled by EPA’s EJSCREEN + Environmental Protection Agency (EPA) Treatment Storage, and Disposal Facilities + (TSDF) data calculated from EPA RCRA info database as compiled by EPA’s EJSCREEN +
                • @@ -1293,7 +1308,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="prox-npl" >

                  - Proximity to National Priorities List (NPL) Sites + Proximity to National Priorities List (NPL) sites

                  @@ -1331,7 +1346,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis id="prox-rmp" >

                  - Proximity to Risk Management Plan (RMP) Sites + Proximity to Risk Management Plan (RMP) facilities

                  @@ -1410,7 +1425,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Asthma
                  - Weighted number of respondents people who answer “yes” both + Weighted percent of people who answer “yes” both to both of the following questions: “Have you ever been told by a doctor, nurse, or other health professional that you have asthma?” and the question “Do you still have asthma?” @@ -1449,7 +1464,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Diabetes
                  - People ages 18 years and older who report having ever been + Weighted percent of people ages 18 years and older who report having ever been told by a doctor, nurse, or other health professionals that they have diabetes other than diabetes during pregnancy.
                  @@ -1487,7 +1502,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Heart disease
                  - People ages 18 years and older who report ever having been told + Weighted percent of people ages 18 years and older who report ever having been told by a doctor, nurse, or other health professionals that they had angina or coronary heart disease.
                  @@ -1525,7 +1540,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Low life expectancy
                  - Average number of years of life a person who has attained a given age can expect to live. + + Average number of years of life a person who has attained a given age can expect to live. + Note: Unlike most of the other datasets, high values of this indicator indicate low burdens. + For percentile calculations, the percentile is calculated in reverse order, so that the tract with + the highest median income relative to area median income (lowest burden on this measure) is at the + 0th percentile, and the tract with the lowest median income relative to area median income + (highest burden on this measure) is at the 100th percentile. +
                  • @@ -1555,7 +1577,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis

                  Low median Income @@ -1597,8 +1619,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis Linguistic Isolation

                  - Households in which no one age 14 and over speaks English only or also speaks - a language other than English + + The percent of limited speaking households, which are households where no one over age 14 speaks English well. +
                  • @@ -1881,6 +1904,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis class="footer-link-first-child" data-cy="find-a-contact-at-usa-gov" href="https://www.usa.gov/" + rel="noreferrer" + target="_blank" > Find a contact at USA.gov @@ -1932,7 +1957,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis data-testid="button" type="button" > - Tell us how we're doing + Help improve the site & data