From b1adc1f69f72899645cc8f16af3b95db7c898a3b Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Thu, 21 Oct 2021 14:56:32 -0700 Subject: [PATCH] Add beta site banner (#802) * Add new BetaBanner and remove legacy Alerts - add BetaBanner component and test - update AboutCard test - remove AlertWrapper component, copy and tests - remove AlertWrapper from all pages - add BetaBanner copy and intl - update logo and color - add styles using USWDS tokens to globals.scss * Add Beta pill to header - refactor Header to use Grid and USWDS - refactor global.scss to use Grid and USWDS - updates snapshots * Move styles from global to modules - move BetaBanner styles from global to modules - move J40Header to a folder component and module styles - add J40Header unit test - add a design-system.scss file that allows USWDS styles in modules - updates snapshots * Update en.json file * Trigger Build * Add initial Spanish content - add README for translation team - add createSpanishJson script - add initial version of es.json - add a spanish string variable to test translation * Add retry and timeout config to stalled test * Remove redundant test cases for AboutCard - update snapshot * Update BetaBanner description --- client/compiled-lang/en.json | 690 +++++++++++++++--- .../LegacyTests/mapZoomLatLong.spec.js | 41 +- .../components/AboutCard/AboutCard.test.tsx | 40 +- .../__snapshots__/AboutCard.test.tsx.snap | 47 +- .../AlertWrapper/alertWrapper.module.scss | 11 - .../alertWrapper.module.scss.d.ts | 14 - client/src/components/AlertWrapper/index.tsx | 41 -- .../AlertWrapper/tests/alertWrapper.test.tsx | 52 -- .../BetaBanner/BetaBanner.module.scss | 38 + .../BetaBanner/BetaBanner.module.scss.d.ts | 15 + .../components/BetaBanner/BetaBanner.test.tsx | 16 + .../src/components/BetaBanner/BetaBanner.tsx | 27 + .../__snapshots__/BetaBanner.test.tsx.snap | 20 + client/src/components/BetaBanner/index.tsx | 3 + .../src/components/DatasetContainer/index.tsx | 2 - .../datasetContainer.test.tsx.snap | 26 - .../J40Header/J40Header.module.scss | 67 ++ .../J40Header/J40Header.module.scss.d.ts | 17 + .../components/J40Header/J40Header.test.tsx | 16 + .../components/{ => J40Header}/J40Header.tsx | 78 +- .../__snapshots__/J40Header.test.tsx.snap | 264 +++++++ client/src/components/J40Header/index.tsx | 3 + client/src/components/MapWrapper/index.tsx | 7 - client/src/data/copy/common.tsx | 35 +- client/src/data/copy/explore.tsx | 1 + client/src/images/downloadDraftLink.png | Bin 0 -> 8999 bytes client/src/images/icon.png | Bin 2343 -> 0 bytes client/src/images/j40-logo-colors.png | Bin 0 -> 17448 bytes client/src/images/j40-logo-v2.png | Bin 0 -> 3684 bytes client/src/intl/README.md | 47 ++ client/src/intl/createSpanishJson.js | 75 ++ client/src/intl/en.json | 28 +- client/src/intl/es.json | 448 +++++++++++- .../pages/__snapshots__/contact.test.tsx.snap | 233 +++--- .../pages/__snapshots__/index.test.tsx.snap | 233 +++--- .../__snapshots__/methodology.test.tsx.snap | 259 +++---- client/src/pages/cejst.tsx | 4 - client/src/pages/contact.tsx | 5 - client/src/pages/index.tsx | 4 - client/src/pages/methodology.tsx | 5 - client/src/styles/design-system.scss | 9 + client/src/styles/global.scss | 126 ---- 42 files changed, 2122 insertions(+), 925 deletions(-) delete mode 100644 client/src/components/AlertWrapper/alertWrapper.module.scss delete mode 100644 client/src/components/AlertWrapper/alertWrapper.module.scss.d.ts delete mode 100644 client/src/components/AlertWrapper/index.tsx delete mode 100644 client/src/components/AlertWrapper/tests/alertWrapper.test.tsx create mode 100644 client/src/components/BetaBanner/BetaBanner.module.scss create mode 100644 client/src/components/BetaBanner/BetaBanner.module.scss.d.ts create mode 100644 client/src/components/BetaBanner/BetaBanner.test.tsx create mode 100644 client/src/components/BetaBanner/BetaBanner.tsx create mode 100644 client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap create mode 100644 client/src/components/BetaBanner/index.tsx create mode 100644 client/src/components/J40Header/J40Header.module.scss create mode 100644 client/src/components/J40Header/J40Header.module.scss.d.ts create mode 100644 client/src/components/J40Header/J40Header.test.tsx rename client/src/components/{ => J40Header}/J40Header.tsx (60%) create mode 100644 client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap create mode 100644 client/src/components/J40Header/index.tsx create mode 100644 client/src/images/downloadDraftLink.png delete mode 100644 client/src/images/icon.png create mode 100644 client/src/images/j40-logo-colors.png create mode 100644 client/src/images/j40-logo-v2.png create mode 100644 client/src/intl/README.md create mode 100644 client/src/intl/createSpanishJson.js create mode 100644 client/src/styles/design-system.scss diff --git a/client/compiled-lang/en.json b/client/compiled-lang/en.json index e82fbf04..eab5425f 100644 --- a/client/compiled-lang/en.json +++ b/client/compiled-lang/en.json @@ -1,26 +1,44 @@ { - "alert.alertBetaBody": [ + "about.page.sub.header.1.text.1": [ { "type": 0, - "value": "This website may be continuously updated" + "value": "On January 27, 2021, 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 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." } ], - "alert.alertBetaTitle": [ + "about.page.sub.header.1.text.2": [ { "type": 0, - "value": "Public beta" + "value": "The current version of the tool is in a public beta form and will be updated based on feedback from the public." } ], - "alert.alertDataLimitedBody": [ + "about.page.sub.header.2.text.1": [ { "type": 0, - "value": "Datasets may be added, updated, or removed." + "value": "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." } ], - "alert.alertDataLimitedTitle": [ + "about.page.sub.header.2.text.2": [ { "type": 0, - "value": "Limited data sources" + "value": "Read more about the Justice40 Initiative in President Biden’s" + } + ], + "about.page.title.text": [ + { + "type": 0, + "value": "About" + } + ], + "areaDetail.categorization.community.of.focus": [ + { + "type": 0, + "value": "Community of focus" + } + ], + "areaDetail.categorization.not.community.of.focus": [ + { + "type": 0, + "value": "Not a community of focus" } ], "areaDetail.geographicInfo.censusBlockGroup": [ @@ -47,22 +65,166 @@ "value": "State:" } ], + "areaDetail.indicator.areaMedianIncome": [ + { + "type": 0, + "value": "Area Median Income" + } + ], + "areaDetail.indicator.asthma": [ + { + "type": 0, + "value": "Asthma" + } + ], + "areaDetail.indicator.description.area_median_income": [ + { + "type": 0, + "value": "Median income of the census block group calculated as a percent of the metropolitan area’s or state's median income" + } + ], + "areaDetail.indicator.description.asthma": [ + { + "type": 0, + "value": "People who answer “yes” to both of the questions: “Have you ever been told by a doctor nurse, or other health professional that you have asthma?” and “Do you still have asthma?\"" + } + ], + "areaDetail.indicator.description.diabetes": [ + { + "type": 0, + "value": "People ages 18 and up who report having been told by a doctor, nurse, or other health professionals that they have diabetes other than diabetes during pregnancy" + } + ], + "areaDetail.indicator.description.dieselPartMatter": [ + { + "type": 0, + "value": "Mixture of particles that is part of diesel exhaust in the air" + } + ], + "areaDetail.indicator.description.education": [ + { + "type": 0, + "value": "Percent of people age 25 or older that didn’t get a high school diploma" + } + ], + "areaDetail.indicator.description.energyBurden": [ + { + "type": 0, + "value": "Average annual energy cost ($) divided by household income" + } + ], + "areaDetail.indicator.description.femaRisk": [ + { + "type": 0, + "value": "Expected Annual Loss Score, which is the average economic loss in dollars resulting from natural hazards each year." + } + ], + "areaDetail.indicator.description.heartDisease": [ + { + "type": 0, + "value": "People ages 18 and up who report ever having been told by a doctor, nurse, or other health professionals that they had angina or coronary heart disease" + } + ], + "areaDetail.indicator.description.houseBurden": [ + { + "type": 0, + "value": "Households that are low income and spend more than 30% of their income on housing costs" + } + ], + "areaDetail.indicator.description.leadPaint": [ + { + "type": 0, + "value": "Housing units built pre-1960, used as an indicator of potential lead paint exposure in homes" + } + ], + "areaDetail.indicator.description.lifeExpect": [ + { + "type": 0, + "value": "Estimated years of life expectancy" + } + ], + "areaDetail.indicator.description.pm25": [ + { + "type": 0, + "value": "Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller" + } + ], + "areaDetail.indicator.description.poverty": [ + { + "type": 0, + "value": "Percent of a block group's population in households where the household income is at or below 100% of the federal poverty level" + } + ], + "areaDetail.indicator.description.trafficVolume": [ + { + "type": 0, + "value": "Count of vehicles (average annual daily traffic) at major roads within 500 meters, divided by distance in meters" + } + ], + "areaDetail.indicator.description.wasteWater": [ + { + "type": 0, + "value": "Toxic concentrations at stream segments within 500 meters divided by distance in kilometers" + } + ], + "areaDetail.indicator.diabetes": [ + { + "type": 0, + "value": "Diabetes" + } + ], + "areaDetail.indicator.dieselPartMatter": [ + { + "type": 0, + "value": "Diesel particulate matter" + } + ], "areaDetail.indicator.education": [ { "type": 0, - "value": "Education" + "value": "Education, less than high school" + } + ], + "areaDetail.indicator.energyBurden": [ + { + "type": 0, + "value": "Energy burden" + } + ], + "areaDetail.indicator.femaRisk": [ + { + "type": 0, + "value": "FEMA Risk Index" + } + ], + "areaDetail.indicator.heartDisease": [ + { + "type": 0, + "value": "Heart disease" } ], "areaDetail.indicator.houseBurden": [ { "type": 0, - "value": "Housing Burden" + "value": "Housing cost burden" } ], - "areaDetail.indicator.linguisticIsolation": [ + "areaDetail.indicator.leadPaint": [ { "type": 0, - "value": "Linguistic isolation" + "value": "Lead paint" + } + ], + "areaDetail.indicator.lifeExpect": [ + { + "type": 0, + "value": "Life expectancy" + } + ], + "areaDetail.indicator.pm25": [ + { + "type": 0, + "value": "PM2.5" } ], "areaDetail.indicator.poverty": [ @@ -71,64 +233,78 @@ "value": "Poverty" } ], - "areaDetail.indicator.unemployment": [ + "areaDetail.indicator.trafficVolume": [ { "type": 0, - "value": "Unemployment rate" + "value": "Traffic proximity and volume" + } + ], + "areaDetail.indicator.wasteWater": [ + { + "type": 0, + "value": "Wastewater discharge" } ], "areaDetail.indicators.indicatorColumnHeader": [ { "type": 0, - "value": "INDICATORS" + "value": "Indicator" } ], "areaDetail.indicators.percentileColumnHeader": [ { "type": 0, - "value": "PERCENTILE (0-100)" + "value": "Percentile (0-100)" } ], - "areaDetail.priorityInfo.categorization": [ + "banner.beta.info": [ { "type": 0, - "value": "Categorization" + "value": "It is an early, in-progress version of the tool with limited data sets that will be continuously updated." } ], - "areaDetail.priorityInfo.cumulativeIndexScore": [ + "banner.beta.title": [ { "type": 0, - "value": "Cumulative Index Score" + "value": "This is a Beta site." } ], - "areaDetail.priorityInfo.percentile": [ + "community.members.heading": [ { "type": 0, - "value": "percentile" + "value": "Community members" } ], - "contact.general": [ + "community.members.info": [ { "type": 0, - "value": "For general feedback, email " - }, - { - "type": 1, - "value": "general_email_address" + "value": "Explore data about communities of focus in your area, and help provide feedback on the tool." } ], - "contact.pageheader": [ + "community.members.link": [ + { + "type": 0, + "value": "Explore the tool" + } + ], + "contact.page.header.text": [ { "type": 0, "value": "Contact" } ], - "contact.sectionheader": [ + "contact.page.sub.header.text": [ { "type": 0, "value": "Email us" } ], + "contact.page.title.text": [ + { + "type": 0, + "value": "Contact" + } + ], "datasetCard.dataDateRange": [ { "type": 0, @@ -147,22 +323,156 @@ "value": "Data source:" } ], - "datasetCard.whatIsIt": [ + "datasetContainer.additional.heading": [ { "type": 0, - "value": "What is it?" + "value": "Additional Indicators" } ], - "datasetContainer.header.cumulativeScore": [ + "datasetContainer.additional.info": [ { "type": 0, - "value": "Datasets used in cumulative score" + "value": "These datasets provide additional information about each community." } ], - "datasetContainer.subTitle": [ + "datasetContainer.heading": [ { "type": 0, - "value": "The datasets come from a variety of sources and were selected after considering relevance, availability, recency and quality." + "value": "Datasets used in methodology" + } + ], + "datasetContainer.info": [ + { + "type": 0, + "value": "The datasets come from a variety of sources and were selected based on relevance, availability, recency, and quality. The datasets seek to identify a range of human health, environmental, climate-related, and other cumulative impacts on communities." + } + ], + "download.draft.ptag.1": [ + { + "type": 1, + "value": "downloadDraft" + }, + { + "type": 0, + "value": " of communities of focus and datasets used. Last updated: " + }, + { + "type": 1, + "value": "dateUpdated" + }, + { + "type": 0, + "value": "." + } + ], + "download.draft.ptag.2": [ + { + "type": 0, + "value": "ZIP file will contain one .xlsx, one .csv, and one .pdf (" + }, + { + "type": 1, + "value": "downloadFileSize" + }, + { + "type": 0, + "value": ")." + } + ], + "downloadPacket.button.text": [ + { + "type": 0, + "value": "Download package" + } + ], + "downloadPacket.header.text": [ + { + "type": 0, + "value": "Draft communities list v" + }, + { + "type": 1, + "value": "versionNumber" + }, + { + "type": 0, + "value": " (" + }, + { + "type": 1, + "value": "downloadFileSize" + }, + { + "type": 0, + "value": ")" + } + ], + "downloadPacket.info.last.updated": [ + { + "type": 0, + "value": "Last updated: " + }, + { + "type": 1, + "value": "downloadLastUpdated" + } + ], + "downloadPacket.info.text": [ + { + "type": 0, + "value": "The package includes draft v" + }, + { + "type": 1, + "value": "versionNumber" + }, + { + "type": 0, + "value": " of the list of communities of focus (.csv and .xlsx) and information about how to use the list (.pdf)." + } + ], + "exploreTool.heading.text": [ + { + "type": 0, + "value": "Explore the tool" + } + ], + "exploreTool.page.description": [ + { + "type": 0, + "value": "Zoom into the map to see communities of focus that can help Federal agencies identify disadvantaged communities and to provide socioeconomic, environmental, and climate information and data. Learn more about the methodology and datasets that were used to determine these communities of focus on the " + }, + { + "type": 1, + "value": "methodologyLink" + }, + { + "type": 0, + "value": " page." + } + ], + "exploreTool.title.text": [ + { + "type": 0, + "value": "Explore the tool" + } + ], + "federal.pm.heading": [ + { + "type": 0, + "value": "Federal program managers" + } + ], + "federal.pm.info": [ + { + "type": 0, + "value": "Download the screening tool’s draft list of communities of focus. Explore data that may be useful to your program, and provide feedback on the tool." + } + ], + "federal.pm.link": [ + { + "type": 0, + "value": "Go to data & methodology" } ], "footer.arialabel": [ @@ -171,6 +481,12 @@ "value": "Footer navigation" } ], + "footer.contactheader": [ + { + "type": 0, + "value": "Contact" + } + ], "footer.findcontactlink": [ { "type": 0, @@ -207,12 +523,24 @@ "value": "Have a question about government services?" } ], + "footer.whitehouselink": [ + { + "type": 0, + "value": "Whitehouse.gov" + } + ], "footer.whitehouselogoalt": [ { "type": 0, "value": "Whitehouse logo" } ], + "getInvolved.title": [ + { + "type": 0, + "value": "Get involved" + } + ], "header.about": [ { "type": 0, @@ -249,92 +577,64 @@ "value": "Screening Tool" } ], - "howYouCanHelp.header.text": [ + "howToGetStarted.title": [ { "type": 0, - "value": "How You Can Help Improve the Tool" + "value": "How to get started" } ], - "index.aboutContent.p1": [ + "index.heading.about.us": [ { "type": 0, - "value": "On January 27, 2021, 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 provide socioeconomic, environmental, and climate information and data to help inform decisions that may affect disadvantaged communities. The tool is designed to assist Federal agencies in identifying disadvantaged communities for the purposes of the Justice40 Initiative." - } - ], - "index.aboutContent.p2": [ - { - "type": 0, - "value": "The goal of the Justice40 Initiative is for 40 percent of benefits of Federal programs in seven key areas to flow 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, remediation of legacy pollution, and clean water infrastructure." - } - ], - "index.aboutContent.p3": [ - { - "type": 0, - "value": "Read more about the Justice40 Initiative in President Biden’s " - }, - { - "type": 1, - "value": "presidentLink" + "value": "About us" } ], "index.heading.justice40": [ { "type": 0, - "value": "About the Justice40 Initiative" + "value": "The Justice40 Initiative" } ], "index.heading.screentool": [ { "type": 0, - "value": "About the screening tool" + "value": "The screening tool" } ], "index.presidentalLinkLabel": [ { "type": 0, - "value": "Executive Order on Tackling the Climate Crisis at Home and Abroad." + "value": "Executive Order 14008 on Tackling the Climate Crisis at Home and Abroad." } ], - "index.presidentalLinkUri": [ + "join.open.source.info": [ { "type": 0, - "value": "https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/" + "value": "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." } ], - "index.section3.inclusiveLabel": [ + "join.open.source.link": [ { "type": 0, - "value": "Inclusive:" + "value": "Check it out on GitHub" } ], - "index.section3.iterativeLabel": [ + "join.opensource.heading": [ { "type": 0, - "value": "Iterative:" - } - ], - "index.section3.transparentLabel": [ - { - "type": 0, - "value": "Transparent:" - } - ], - "legend.colorkey.label": [ - { - "type": 0, - "value": "COLOR KEY" + "value": "Join the open source community" } ], "legend.info.priority.label": [ { "type": 0, - "value": "Prioritized community" + "value": "Draft community of focus" } ], "legend.info.threshold.label": [ { "type": 0, - "value": "Threshold community" + "value": "A community identified as experiencing disadvantages that merits the focus of certain Federal investments, including through the Justice40 Initiative" } ], "map.territoryFocus.alaska.long": [ @@ -395,6 +695,12 @@ "value": "PR" } ], + "map.zoom.warning": [ + { + "type": 0, + "value": "Zoom in to the state or regional level to see prioritized communities on the map." + } + ], "mapIntro.censusBlockGroupDefinition": [ { "type": 0, @@ -413,58 +719,248 @@ "value": "Zoom and select a census block group to view data" } ], - "mapwrapper.download.contents": [ + "methodology.page.header.text": [ { "type": 0, - "value": "ZIP file will contain one .xlsx, one .csv and one .pdf (30 MB)." + "value": "Methodology" } ], - "mapwrapper.download.link": [ + "methodology.page.paragraph.first": [ { "type": 0, - "value": "Download the draft list of prioritized communities (pre-decisional) and datasets used" + "value": "The methodology for identifying communities of focus is currently in a draft, pre-decisional form that may change over time as more datasets become available." } ], - "youCanHelpDataMethLinkText.link.text": [ + "methodology.page.title.text": [ { "type": 0, - "value": "Data & methodology" + "value": "Data and Methodology" } ], - "youCanHelpDataMethPrefixText.link.prefix.text": [ + "methodology.step.1.a.heading": [ { "type": 0, - "value": "View our" + "value": "Percent of Area Median Income" } ], - "youCanHelpDataMethSuffixText.link.suffix.text": [ + "methodology.step.1.a.info.1": [ { "type": 0, - "value": "and send us feedback" + "value": "If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income." } ], - "youCanHelpInfoLink.link.text": [ + "methodology.step.1.a.info.2": [ { "type": 0, - "value": "get an email from you" + "value": "If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income." } ], - "youCanHelpInfoText.list.element.prefix": [ + "methodology.step.1.b.heading": [ { "type": 0, - "value": "If you have helpful information, we’d love to" + "value": "Percent of households below or at 100% of the federal poverty line" } ], - "youCanHelpSharingLinkText.link.text": [ + "methodology.step.1.c.heading": [ { "type": 0, - "value": "share your feedback" + "value": "The high school degree achievement rate for adults 25 years and older" } ], - "youCanHelpSharingPrefixText.link.prefix.text": [ + "methodology.step.1.c.info": [ { "type": 0, - "value": "Find your community and" + "value": "The percent of individuals who are 25 or older who have received a high school degree." + } + ], + "methodology.step.1.heading": [ + { + "type": 0, + "value": "Gather datasets" + } + ], + "methodology.step.1.info": [ + { + "type": 0, + "value": "The methodology includes the following inputs that are equally weighted." + } + ], + "methodology.step.2.heading": [ + { + "type": 0, + "value": "Determine communites of focus" + } + ], + "methodology.step.2.info": [ + { + "type": 0, + "value": "Under the existing formula, a census block group will be considered a community of focus if:" + } + ], + "methodology.steps.2.b.info": [ + { + "type": 0, + "value": "This is the percent of households in a state with a household income below or at 100% of the " + }, + { + "type": 1, + "value": "federalPovertyLine" + }, + { + "type": 0, + "value": ". This federal poverty line is calculated based on the composition of each household (e.g., based on household size), but it does not vary geographically." + } + ], + "methodology.steps.2.formula": [ + { + "type": 1, + "value": "medianIncome" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "or" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "livingAtPovery" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "and" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "education" + } + ], + "methodology.steps.description.1": [ + { + "type": 0, + "value": "The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010." + } + ], + "methodology.steps.description.2": [ + { + "type": 0, + "value": "The following describes the process for identifying communities of focus." + } + ], + "methodology.steps.heading": [ + { + "type": 0, + "value": "Methodology" + } + ], + "pageNotFound.Guidance.text": [ + { + "type": 0, + "value": "Try creating a page in" + } + ], + "pageNotFound.apology.description.text": [ + { + "type": 0, + "value": "we couldn’t find what you were looking for." + } + ], + "pageNotFound.apology.text": [ + { + "type": 0, + "value": "Sorry" + } + ], + "pageNotFound.heading.text": [ + { + "type": 0, + "value": "Page not found" + } + ], + "pageNotFound.link.to.go.home.text": [ + { + "type": 0, + "value": "Go home" + } + ], + "pageNotFound.title.text": [ + { + "type": 0, + "value": "Page not found" + } + ], + "send.feedback.heading": [ + { + "type": 0, + "value": "Send feedback" + } + ], + "send.feedback.info": [ + { + "type": 0, + "value": "Have ideas about how this tool can be improved to better reflect the on-the-ground experiences of your community?" + } + ], + "youCanHelpInfoText.heading": [ + { + "type": 0, + "value": "How you can help improve the tool" + } + ], + "youCanHelpInfoText.list.item.1": [ + { + "type": 0, + "value": "If you have helpful information, we would love to " + }, + { + "type": 1, + "value": "rxEmailFromYou" + }, + { + "type": 0, + "value": "." + } + ], + "youCanHelpInfoText.list.item.2": [ + { + "type": 0, + "value": "View our " + }, + { + "type": 1, + "value": "dataMeth" + }, + { + "type": 0, + "value": " page and send us feedback." + } + ], + "youCanHelpInfoText.list.item.3": [ + { + "type": 0, + "value": "Find your community of interest and " + }, + { + "type": 1, + "value": "shareFeedback" + }, + { + "type": 0, + "value": "." } ] } \ No newline at end of file diff --git a/client/cypress/integration/LegacyTests/mapZoomLatLong.spec.js b/client/cypress/integration/LegacyTests/mapZoomLatLong.spec.js index f7ec4d95..a0d0abb8 100644 --- a/client/cypress/integration/LegacyTests/mapZoomLatLong.spec.js +++ b/client/cypress/integration/LegacyTests/mapZoomLatLong.spec.js @@ -15,19 +15,32 @@ describe('Does the map zoom and adjust to lat/long correctly?', () => { cy.url().should('include', '#4/35.04/-77.9'); }); }); - it('allows user to specify alternative starting URL', () => { - const [expectedZoom, expectedLat, expectedLng] = [12.05, 41.40965, -75.65978]; - const expectedURL = `http://localhost:8000/en/cejst/#${expectedZoom}/${expectedLat}/${expectedLng}`; - cy.visit(expectedURL); - cy.getMap().then((map) => { - cy.waitForMapIdle(map); - cy.url().should('equal', expectedURL); - const actualZoom = map.getZoom(); - const actualCenter = map.getCenter(); - expect(actualCenter.lat).to.eq(expectedLat); - expect(actualCenter.lng).to.eq(expectedLng); - expect(actualZoom).to.eq(expectedZoom); - }); - }); + it('allows user to specify alternative starting URL', + { + retries: { + runMode: 3, + openMode: 3, + }, + defaultCommandTimeout: 4000, + execTimeout: 10000, + taskTimeout: 10000, + pageLoadTimeout: 10000, + requestTimeout: 5000, + responseTimeout: 10000, + }, + () => { + const [expectedZoom, expectedLat, expectedLng] = [12.05, 41.40965, -75.65978]; + const expectedURL = `http://localhost:8000/en/cejst/#${expectedZoom}/${expectedLat}/${expectedLng}`; + cy.visit(expectedURL); + cy.getMap().then((map) => { + cy.waitForMapIdle(map); + cy.url().should('equal', expectedURL); + const actualZoom = map.getZoom(); + const actualCenter = map.getCenter(); + expect(actualCenter.lat).to.eq(expectedLat); + expect(actualCenter.lng).to.eq(expectedLng); + expect(actualZoom).to.eq(expectedZoom); + }); + }); }); diff --git a/client/src/components/AboutCard/AboutCard.test.tsx b/client/src/components/AboutCard/AboutCard.test.tsx index 51edbcb2..6edf23ec 100644 --- a/client/src/components/AboutCard/AboutCard.test.tsx +++ b/client/src/components/AboutCard/AboutCard.test.tsx @@ -4,19 +4,35 @@ import {LocalizedComponent} from '../../test/testHelpers'; import AboutCard from './AboutCard'; describe('rendering of the AboutCard', () => { - const {asFragment} = render( - - - Content body of the action card. - - , - ); + it('checks if small cards component renders', () => { + const {asFragment} = render( + + + Content body of the action card. + + , + ); + expect(asFragment()).toMatchSnapshot(); + }); - it('checks if component renders', () => { + it('checks if large cards component renders', () => { + const {asFragment} = render( + + + Content body of the action card. + + , + ); expect(asFragment()).toMatchSnapshot(); }); }); diff --git a/client/src/components/AboutCard/__snapshots__/AboutCard.test.tsx.snap b/client/src/components/AboutCard/__snapshots__/AboutCard.test.tsx.snap index a46ab072..8c2a073d 100644 --- a/client/src/components/AboutCard/__snapshots__/AboutCard.test.tsx.snap +++ b/client/src/components/AboutCard/__snapshots__/AboutCard.test.tsx.snap @@ -1,6 +1,46 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`rendering of the AboutCard checks if component renders 1`] = ` +exports[`rendering of the AboutCard checks if large cards component renders 1`] = ` + +
+
+
+ Test Header +
+
+
+

+ Test Header +

+ Content body of the action card. +
+
+
+
+
+`; + +exports[`rendering of the AboutCard checks if small cards component renders 1`] = `
+ href="#" + > + Test Action +
diff --git a/client/src/components/AlertWrapper/alertWrapper.module.scss b/client/src/components/AlertWrapper/alertWrapper.module.scss deleted file mode 100644 index 8aab663a..00000000 --- a/client/src/components/AlertWrapper/alertWrapper.module.scss +++ /dev/null @@ -1,11 +0,0 @@ -.alertWrapper { - margin-bottom: 0; -} - -.alertHide { - display: none; -} - -.alertWarning { - margin-top: 0; -} diff --git a/client/src/components/AlertWrapper/alertWrapper.module.scss.d.ts b/client/src/components/AlertWrapper/alertWrapper.module.scss.d.ts deleted file mode 100644 index 91daf3be..00000000 --- a/client/src/components/AlertWrapper/alertWrapper.module.scss.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare namespace AlertWrapperScssNamespace { - export interface IAlertWrapperScss { - alertWrapper: string; - alertHide: string; - alertWarning: string; - } - } - -declare const AlertWrapperScssModule: AlertWrapperScssNamespace.IAlertWrapperScss & { - /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ - locals: AlertWrapperScssNamespace.IAlertWrapperScss; - }; - - export = AlertWrapperScssModule; diff --git a/client/src/components/AlertWrapper/index.tsx b/client/src/components/AlertWrapper/index.tsx deleted file mode 100644 index 06ab68d3..00000000 --- a/client/src/components/AlertWrapper/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import {Alert} from '@trussworks/react-uswds'; -import {useIntl} from 'gatsby-plugin-intl'; - -import * as styles from './alertWrapper.module.scss'; -import * as COMMON_COPY from '../../data/copy/common'; - -interface IAlertWrapperProps { - showBetaAlert?: boolean, // defaults to false - showLimitedDataAlert?: boolean, // defaults to false -} - -const AlertWrapper = ({ - showBetaAlert = false, - showLimitedDataAlert = false, -}: IAlertWrapperProps) => { - const intl = useIntl(); - - - return ( -
- {showBetaAlert && ( - - {intl.formatMessage(COMMON_COPY.ALERTS.BETA_TITLE)} - — {intl.formatMessage(COMMON_COPY.ALERTS.BETA_BODY)} -
-
- )} - - {showLimitedDataAlert && ( - - {intl.formatMessage(COMMON_COPY.ALERTS.LIMITED_TITLE)} - — {intl.formatMessage(COMMON_COPY.ALERTS.LIMITED_BODY)} -
-
- )} -
- ); -}; - -export default AlertWrapper; diff --git a/client/src/components/AlertWrapper/tests/alertWrapper.test.tsx b/client/src/components/AlertWrapper/tests/alertWrapper.test.tsx deleted file mode 100644 index 01f42688..00000000 --- a/client/src/components/AlertWrapper/tests/alertWrapper.test.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from 'react'; -import {render} from '@testing-library/react'; -import {LocalizedComponent} from '../../../test/testHelpers'; -import AlertWrapper from '../../AlertWrapper'; - -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom/extend-expect'; - -const PUBLIC_BETA_REGEX = /Public beta/; -const LIMITED_DATA_REGEX = /Limited data sources/; - -describe('rendering full the AlertWrapper', () => { - it('checks if component renders both alerts', () => { - const component = render( - - - , - ); - - expect(component.container).toHaveTextContent(PUBLIC_BETA_REGEX); - expect(component.container).toHaveTextContent(LIMITED_DATA_REGEX); - }); -}); - -describe('rendering showBetaAlert the AlertWrapper', () => { - it('checks if component renders only beta alert', () => { - const component = render( - - - , - ); - - expect(component.container).toHaveTextContent(PUBLIC_BETA_REGEX); - expect(component.container).not.toHaveTextContent(LIMITED_DATA_REGEX); - }); -}); - -describe('rendering showLimitedDataAlert the AlertWrapper', () => { - it('checks if component renders only limited data alert', () => { - const component = render( - - - , - ); - - expect(component.container).not.toHaveTextContent(PUBLIC_BETA_REGEX); - expect(component.container).toHaveTextContent(LIMITED_DATA_REGEX); - }); -}); diff --git a/client/src/components/BetaBanner/BetaBanner.module.scss b/client/src/components/BetaBanner/BetaBanner.module.scss new file mode 100644 index 00000000..07538ef7 --- /dev/null +++ b/client/src/components/BetaBanner/BetaBanner.module.scss @@ -0,0 +1,38 @@ +@use '../../styles/design-system.scss' as *; + +.betaBannerContainer { + @include u-bg("gray-cool-2"); + + .betaBanner { + @include u-display("flex"); + @include u-height(3); + max-width: 60.25rem; // Needs this exact value to align with GovBanner + @include u-font("body", "3xs"); + @include u-margin-left(auto); + @include u-margin-right(auto); + @include u-padding-top("05"); + @include u-padding-bottom(3); + + @include at-media-max("desktop") { + @include u-margin-left(2); + @include u-margin-right(0); + } + + @include at-media-max("tablet-lg") { + @include u-height(6); + } + + .betaPillIcon { + @include u-bg("yellow-20v"); + @include u-height(1); + @include u-width(2); + @include u-radius("2px"); + @include u-margin-right(1); + margin-top: 0.4rem; //Needs this exact value for vertical alignment + } + + .betaHeading { + @include u-text("bold"); + } + } +} diff --git a/client/src/components/BetaBanner/BetaBanner.module.scss.d.ts b/client/src/components/BetaBanner/BetaBanner.module.scss.d.ts new file mode 100644 index 00000000..1deeae1d --- /dev/null +++ b/client/src/components/BetaBanner/BetaBanner.module.scss.d.ts @@ -0,0 +1,15 @@ +declare namespace BetaBannerNamespace { + export interface IDatasetCardScss { + betaBannerContainer: string; + betaBanner:string; + betaPillIcon:string; + betaHeading: string; + } + } + +declare const DatasetCardScssModule: BetaBannerNamespace.IDatasetCardScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: BetaBannerNamespace.IDatasetCardScss; + }; + + export = DatasetCardScssModule; diff --git a/client/src/components/BetaBanner/BetaBanner.test.tsx b/client/src/components/BetaBanner/BetaBanner.test.tsx new file mode 100644 index 00000000..241a83c4 --- /dev/null +++ b/client/src/components/BetaBanner/BetaBanner.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import BetaBanner from './BetaBanner'; + +describe('rendering of the BetaBanner', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/BetaBanner/BetaBanner.tsx b/client/src/components/BetaBanner/BetaBanner.tsx new file mode 100644 index 00000000..1e7ab85e --- /dev/null +++ b/client/src/components/BetaBanner/BetaBanner.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import {useIntl} from 'gatsby-plugin-intl'; + +import * as COMMON_COPY from '../../data/copy/common'; +import * as styles from './BetaBanner.module.scss'; + +const BetaBanner = () => { + const intl = useIntl(); + + return ( +
+
+
+
+ + {intl.formatMessage(COMMON_COPY.BETA_BANNER.TITLE)}{' '} + + + {intl.formatMessage(COMMON_COPY.BETA_BANNER.INFO)} + +
+
+
+ ); +}; + +export default BetaBanner; diff --git a/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap b/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap new file mode 100644 index 00000000..ad259d12 --- /dev/null +++ b/client/src/components/BetaBanner/__snapshots__/BetaBanner.test.tsx.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the BetaBanner checks if component renders 1`] = ` + +
+
+
+
+ + This is a Beta site. + + + It is an early, in-progress version of the tool with limited data + sets that will be continuously updated. + +
+
+
+ +`; diff --git a/client/src/components/BetaBanner/index.tsx b/client/src/components/BetaBanner/index.tsx new file mode 100644 index 00000000..f05cf7f7 --- /dev/null +++ b/client/src/components/BetaBanner/index.tsx @@ -0,0 +1,3 @@ +import BetaBanner from './BetaBanner'; + +export default BetaBanner; diff --git a/client/src/components/DatasetContainer/index.tsx b/client/src/components/DatasetContainer/index.tsx index 1a181258..72cc3b1f 100644 --- a/client/src/components/DatasetContainer/index.tsx +++ b/client/src/components/DatasetContainer/index.tsx @@ -2,7 +2,6 @@ import React from 'react'; import {useIntl} from 'gatsby-plugin-intl'; import {Grid} from '@trussworks/react-uswds'; -import AlertWrapper from '../AlertWrapper'; import DatasetCard from '../DatasetCard'; import J40MainGridContainer from '../J40MainGridContainer'; import {hyphenizeString} from '../../../cypress/integration/common/helpers'; @@ -22,7 +21,6 @@ const DatasetContainer = () => { -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.HEADING)}

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 9afe1d04..4a69ba62 100644 --- a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap +++ b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap @@ -18,32 +18,6 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis class="grid-col-12" data-testid="grid" > -
-
-
-

- - Limited data sources - - - — Datasets may be added, updated, or removed. - -
-

-
-
-

Datasets used in methodology

diff --git a/client/src/components/J40Header/J40Header.module.scss b/client/src/components/J40Header/J40Header.module.scss new file mode 100644 index 00000000..8ffc39ac --- /dev/null +++ b/client/src/components/J40Header/J40Header.module.scss @@ -0,0 +1,67 @@ +@use '../../styles/design-system.scss' as *; + +// Set nav links color to primary color (1b1b1b) +.usa-nav__primary > .usa-nav__primary-item > a { + @include u-text("gray-90"); +} + +.logoNavRow { + @include u-margin-top(4); + + .logo { + @include u-width(10); + @include u-padding("05"); + } + + // The logoTitle declaration is enabled for widths > 1200px + .logoTitle { + @include u-display("flex"); + @include u-flex-direction("column"); + @include typeset("sans", 8, 3); + } + + .title2BetaPill { + @include u-display("flex"); + } + + .betaPill { + @include u-display("inline-block"); + @include u-bg("yellow-20v"); + @include u-radius(1); + @include u-padding-left(2); + @include u-padding-right(2); + @include u-padding-top('05'); + @include u-margin-left(1); + @include u-font("body", "2xs"); + } + + .navLinks { + @include u-display("flex"); + justify-content: end; + } + + // This media query limits this declaration to 1024 < width < 1200px + @include at-media-max("desktop-lg") { + .logoTitle { + @include typeset("sans", 7, 3); + } + } + + // This media query limits this declaration to 880 < width < 1024px + @include at-media-max("tablet-lg") { + .logoTitle { + @include typeset("sans", 7, 2); + } + } + + // This media query limits this declaration to 640 < width < 880px + @include at-media-max("tablet") { + .logoTitle { + @include typeset("sans", 5, 2); + } + + .betaPill { + @include u-font("body", "3xs"); + } + } +} diff --git a/client/src/components/J40Header/J40Header.module.scss.d.ts b/client/src/components/J40Header/J40Header.module.scss.d.ts new file mode 100644 index 00000000..4fe051b5 --- /dev/null +++ b/client/src/components/J40Header/J40Header.module.scss.d.ts @@ -0,0 +1,17 @@ +declare namespace J40HeaderNamespace { + export interface IDatasetCardScss { + logoNavRow: string; + logo: string; + logoTitle: string; + title2BetaPill: string; + betaPill: string; + navLinks: string; + } + } + +declare const DatasetCardScssModule: J40HeaderNamespace.IDatasetCardScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: J40HeaderNamespace.IDatasetCardScss; + }; + + export = DatasetCardScssModule; diff --git a/client/src/components/J40Header/J40Header.test.tsx b/client/src/components/J40Header/J40Header.test.tsx new file mode 100644 index 00000000..64472639 --- /dev/null +++ b/client/src/components/J40Header/J40Header.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import J40Header from './J40Header'; + +describe('rendering of the J40Header', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/J40Header.tsx b/client/src/components/J40Header/J40Header.tsx similarity index 60% rename from client/src/components/J40Header.tsx rename to client/src/components/J40Header/J40Header.tsx index b57b51be..28a444a2 100644 --- a/client/src/components/J40Header.tsx +++ b/client/src/components/J40Header/J40Header.tsx @@ -5,12 +5,15 @@ import { NavMenuButton, PrimaryNav, GovBanner, - Tag, + Grid, } from '@trussworks/react-uswds'; +import BetaBanner from '../BetaBanner'; +import J40MainGridContainer from '../J40MainGridContainer'; // @ts-ignore -import siteLogo from '../../src/images/icon.png'; -import * as COMMON_COPY from '../data/copy/common'; +import siteLogo from '../../images/j40-logo-v2.png'; +import * as styles from './J40Header.module.scss'; +import * as COMMON_COPY from '../../data/copy/common'; const J40Header = () => { const intl = useIntl(); @@ -31,7 +34,6 @@ const J40Header = () => { to={'/'} key={'about'} activeClassName="usa-current" - className={'j40-header'} data-cy={'nav-link-about'}> {intl.formatMessage(COMMON_COPY.HEADER.ABOUT)} , @@ -41,7 +43,6 @@ const J40Header = () => { to={'/cejst'} key={'cejst'} activeClassName="usa-current" - className={'j40-header'} data-cy={'nav-link-explore-the-tool'}> {intl.formatMessage(COMMON_COPY.HEADER.EXPLORE)} , @@ -51,7 +52,6 @@ const J40Header = () => { to={'/methodology'} key={'methodology'} activeClassName="usa-current" - className={'j40-header'} data-cy={'nav-link-methodology'}> {intl.formatMessage(COMMON_COPY.HEADER.METHODOLOGY)} , @@ -61,7 +61,6 @@ const J40Header = () => { to={'/contact'} key={'contact'} activeClassName="usa-current" - className={'j40-header'} data-cy={'nav-link-contact'}> {intl.formatMessage(COMMON_COPY.HEADER.CONTACT)} , @@ -73,38 +72,49 @@ const J40Header = () => { }; return ( - <> -
- -
-
- {/* Removing h1 from logo ease transition to USWDS tokens in headers */} - {/* https://wehavezeal.com/blog/web-development/2016/01/12/should-i-use-the-h1-tag-for-my-website-logo */} -
- {`${titleL1} - - {titleL1}
- {titleL2} - Beta -
+
+ + {/* Banners */} + + + + {/* Logo and Navigation */} + + + + + {/* Logo */} + + {`${titleL1} + + + {/* Logo Title */} + +
+
{titleL1}
+
+
{titleL2}
+
BETA
+
+
+ + {/* Nav links */} + -
- - -
-
- + + + + + + ); }; diff --git a/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap b/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap new file mode 100644 index 00000000..a590e30d --- /dev/null +++ b/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap @@ -0,0 +1,264 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the J40Header checks if component renders 1`] = ` + + + +`; diff --git a/client/src/components/J40Header/index.tsx b/client/src/components/J40Header/index.tsx new file mode 100644 index 00000000..2b6a9184 --- /dev/null +++ b/client/src/components/J40Header/index.tsx @@ -0,0 +1,3 @@ +import J40Header from './J40Header'; + +export default J40Header; diff --git a/client/src/components/MapWrapper/index.tsx b/client/src/components/MapWrapper/index.tsx index af59c800..4244f719 100644 --- a/client/src/components/MapWrapper/index.tsx +++ b/client/src/components/MapWrapper/index.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import {Grid} from '@trussworks/react-uswds'; -import AlertWrapper from '../AlertWrapper'; import J40Map from '../J40Map'; import * as styles from './mapWrapper.module.scss'; @@ -14,12 +13,6 @@ interface IMapWrapperProps { const MapWrapper = ({location}: IMapWrapperProps) => { return ( <> - - - - - - diff --git a/client/src/data/copy/common.tsx b/client/src/data/copy/common.tsx index b88ad557..81e18589 100644 --- a/client/src/data/copy/common.tsx +++ b/client/src/data/copy/common.tsx @@ -1,30 +1,17 @@ import {defineMessages} from 'react-intl'; -// Alerts -export const ALERTS = defineMessages({ - BETA_TITLE: { - id: 'alert.alertBetaTitle', - defaultMessage: - 'Public beta', - description: 'Title for an alert inform users that datasets may change', +// Beta Banner +export const BETA_BANNER = defineMessages({ + TITLE: { + id: 'banner.beta.title', + defaultMessage: 'This is a Beta site.', + description: 'the main title of the beta banner', }, - BETA_BODY: { - id: 'alert.alertBetaBody', - defaultMessage: - 'This website may be continuously updated', - description: 'Body for an alert inform users that datasets may change', - }, - LIMITED_TITLE: { - id: 'alert.alertDataLimitedTitle', - defaultMessage: - 'Limited data sources', - description: 'Title for an alert inform users that datasets may change', - }, - LIMITED_BODY: { - id: 'alert.alertDataLimitedBody', - defaultMessage: - 'Datasets may be added, updated, or removed.', - description: 'Body for an alert inform users that datasets may change', + 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.`, + description: 'the main info of the beta banner', }, }); diff --git a/client/src/data/copy/explore.tsx b/client/src/data/copy/explore.tsx index 0496decf..090f1822 100644 --- a/client/src/data/copy/explore.tsx +++ b/client/src/data/copy/explore.tsx @@ -31,6 +31,7 @@ export const PAGE_DESCRIPTION = Data & methodology, + methodologyLinkEs: Datos y metodología, }} />; diff --git a/client/src/images/downloadDraftLink.png b/client/src/images/downloadDraftLink.png new file mode 100644 index 0000000000000000000000000000000000000000..809045a124728f4f2bcffb1a426b5fadc637161c GIT binary patch literal 8999 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 literal 0 HcmV?d00001 diff --git a/client/src/images/icon.png b/client/src/images/icon.png deleted file mode 100644 index b499fae957c8bae7742a80d25bc2de380379d3a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2343 zcmV+?3E1|DP)j*29gF3%F41{Tdy^HpZ3Wi4Za^c=IWL$I3*4 zxI02f1)mQZL%AY^Ea~U49xh!{viECu5rg#X@*3i>_iF<}$Zs+Ky`|&Mu2q`Ie7Qw$ zyh#Z8$0lB<1~z9a2pq&bfL{yVylv~;Y1sQUI!Q(XWBfvFki<0-CIrC(( zqvt%Vha;0ebnn;bz5J1K*sCYr7509u1QLG`Jmt9H&6}x2Vg|-Nxvp@;41Lf&AJ&|I z1P^yg=H9QhF=DAoRu?C7vZf`N`!#w`KTCWIC9_%Z<~GB8 z5o7&H@ke})Boec5B>7~x1Wk^bhxPDD_MCgawvh;13_(OFcysND5W1EkW}wW26@^nG z^W_$u-oKl?U`se+c1o?Ed%vbrZ|yMfTA3{ptvdq*GJJeRWWL;z4Lj$6F$fhJ*u7tS zGO*sW%sMEU3f??1GGOMhGVRWAq}vs|dGUqFjFQL@BqbtbDy)&BSj8Nty6%bMzTnLV z0g?G~i-wCYmQQFKN06DAl7XF+#lA%fyjYSQ?gKQtw3UALU)69 zk}Q!&5GXWQX+X9~ABIuB+^Qfv>JXX}J&=Ydhy>F!6+nWq4u{e(-lGQ2(cmd(r@{k&9_064u7bms_IYRk&U=0fgMCLd5u9MZP2d zl_$CpK^J4pLg9O0MCLFvlP=yVi996h+|^+{Ow3wEfL2%2K|#-O#PTwbA&`Mrc5-+U z!&#iM7LpFo4^8VK(rYc6eAv(*Y+J~z2`BZPST|%5C7S0r>jQCZy+}g7+$!P5qiWC~ ztFsv~Kq|AhloW_PBDrK5t+BB+X1;O>wAo7BDW`8?;({1nb?I9>OH@RGKiH_feJP2dan{CU4t?c zyh|DdG|S|sFep1sTIxN&5*noCtm~bHLAl=ZliF=Tmd>tK#h_fl6Jo1tAl*q(0SFvL zlrllxJnMRIRyWsseq2o-Mj+BqGSA(hyoDHH)Sz7N`6A-Nc-HlrDaRNGLg`c@!hM}} zy|#!!Iqu1I31g0P4Ae%jn5QCo(^aUg_k0x_>T%ZfGHFn5>ZnaA>rNE5Sc|MBWq7y- z8e<)6P_CSDe~z%3q9VuDd%mhc`C-=ejJEEu7Pbu--y#jlBJ0OF;0Q9M#O8X>*ET56 zx}H{uulIZ=#9s}{9L9(BP&g^6_k5EE<*7)yf|J#Bra1T$hhBFIQO+8l*+glAN!5P zgNUzHcP~*BSfR_JO(+KHNpKl(N@izLRgnje{l+5R*GlBy-FJZ%c7jx1$2ya$>^%k6 zOSTr-03NOfjcwIFMwTBmiGh%QZhbl$75=8$D>7si$m*~(#BDm0stqRvC9#PJp|dyM z>5R<4?#T>FuJg{Ms-u9ckO*mocx1{=|@f$d+{nN&%_ZkSAiwV5aeP3M5f43o$} ziCNMTNq|ffX0tFpy-`-bWkgcXj!Zg!?htBzcP3REWV%LhuPmFsLCm&6V%#3zwl>`* zSbIhSUfrg^mTl*Zlls<_ua$6}?qynYmlM}nqt^6*rfw>T+AWJ@-uD}e6El{suhobR zgwt z_nPOk4La7Pq*8~@NZE|_h_{}sd3g|ebtEfcr#S=aJel7T=K?FVs#0rJW``7g`Ev^r zoosTHvKwR)lzpu!JwR8GR*)ExB5j>F@wFz{G~=M{Yegc|HYlNqf+mau6$y~{wZ=7C ziR|y6vH`(PjL#79M*4|;Lk3ZzInxB0P>@dSh7?5V|W| z$)q|{ciiT?TIBJ_oE;LOwi)rTIkjeRULU5XMs2VZl+w`KM;QPB N002ovPDHLkV1kqTP#gdN diff --git a/client/src/images/j40-logo-colors.png b/client/src/images/j40-logo-colors.png new file mode 100644 index 0000000000000000000000000000000000000000..c73f77fcbfa0e87d90296a75d0848c8771f596c1 GIT binary patch literal 17448 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 m.defaultMessage); + +const logger = fs.createWriteStream('es-out.json', { + flags: 'a', // 'a' means appending (old data will be preserved) +}); + +// Only create the file if keys and message length are the same +if (englishKeys.length === englishMessage.length) { + // Write the opening curly bracket of JSON + logger.write('{\n'); + + // Loop through all keys adding english and spanish content: + for (i=0; i spanishObj[`${key}.english`] = englishMessage[index]); + +// // Add key (spanish) to spanish object +// englishKeys.forEach((key, index) => spanishObj[key] = 'Please fill in Spanish here.'); +// } else { +// // throw error if lengths do not match +// throw Error(`The number of English keys do not match the number of English messages. +// Please run test testIntlExtraction`); +// } + +// // Alphabetize the spanish object by keys: +// const spanishObjAlphabetized = Object.keys(spanishObj).sort().reduce( +// (obj, key) => { +// obj[key] = spanishObj[key]; +// return obj; +// }, +// {}, +// ); + +// console.log(spanishObjAlphabetized); + +// // Write to file: +// const esJson = JSON.stringify(spanishObjAlphabetized, null, 2); +// fs.writeFileSync('es-out.json', esJson); diff --git a/client/src/intl/en.json b/client/src/intl/en.json index 02a6d3e2..9416f6b0 100644 --- a/client/src/intl/en.json +++ b/client/src/intl/en.json @@ -19,22 +19,6 @@ "defaultMessage": "About", "description": "about page title text" }, - "alert.alertBetaBody": { - "defaultMessage": "This website may be continuously updated", - "description": "Body for an alert inform users that datasets may change" - }, - "alert.alertBetaTitle": { - "defaultMessage": "Public beta", - "description": "Title for an alert inform users that datasets may change" - }, - "alert.alertDataLimitedBody": { - "defaultMessage": "Datasets may be added, updated, or removed.", - "description": "Body for an alert inform users that datasets may change" - }, - "alert.alertDataLimitedTitle": { - "defaultMessage": "Limited data sources", - "description": "Title for an alert inform users that datasets may change" - }, "areaDetail.categorization.community.of.focus": { "defaultMessage": "Community of focus", "description": "the communities the score currently is focused on" @@ -187,6 +171,14 @@ "defaultMessage": "Percentile (0-100)", "description": "the population of the feature selected" }, + "banner.beta.info": { + "defaultMessage": "It is an early, in-progress version of the tool with limited data sets that will be continuously updated.", + "description": "the main info of the beta banner" + }, + "banner.beta.title": { + "defaultMessage": "This is a Beta site.", + "description": "the main title of the beta banner" + }, "community.members.heading": { "defaultMessage": "Community members", "description": "sub heading of page" @@ -319,6 +311,10 @@ "defaultMessage": "Have a question about government services?", "description": "Footer column header" }, + "footer.whitehouselink": { + "defaultMessage": "Whitehouse.gov", + "description": "Footer Whitehouse.gov link text" + }, "footer.whitehouselogoalt": { "defaultMessage": "Whitehouse logo", "description": "Footer Whitehouse logo alt text" diff --git a/client/src/intl/es.json b/client/src/intl/es.json index 36636426..dbd8db8e 100644 --- a/client/src/intl/es.json +++ b/client/src/intl/es.json @@ -1,30 +1,422 @@ { - "areasOfInterest.climate": "Cambio climático", - "areasOfInterest.energy": "Energía limpia y eficiencia energética", - "areasOfInterest.housing": "Vivienda asequible y sostenible", - "areasOfInterest.pollution": "Remediación de la contaminación heredada", - "areasOfInterest.training": "Capacitación y desarrollo de la fuerza laboral", - "areasOfInterest.transit": "Transporte limpio", - "areasOfInterest.water": "Infraestructura de agua limpia", - "header.about": "Sobre nosotras", - "header.contact": "Contacto", - "header.explore": "Explore el trabajo", - "header.methodology": "Metodología", - "header.timeline": "Cronología", - "header.title": "Justice40", - "index.aboutContent.header": "Acerca de Justice40", - "index.aboutContent.p1": "En un esfuerzo por abordar las injusticias ambientales históricas, el presidente Biden creó la Iniciativa Justice40 el 27 de enero de 2021. La Iniciativa Justice40 dirige el 40% de los beneficios de las inversiones federales en siete áreas clave a comunidades sobrecargadas y desatendidas.", - "index.aboutContent.p2": "Las agencias federales darán prioridad a los beneficios utilizando una nueva herramienta de evaluación de la justicia económica y climática. Esta herramienta de selección será un mapa que visualiza datos para comparar los impactos acumulativos de factores ambientales, climáticos y económicos. Está siendo desarrollado por el Consejo de Calidad Ambiental (Council on Environmental Quality - CEQ) con la orientación de líderes de justicia ambiental y comunidades afectadas por injusticias ambientales. La primera versión de la herramienta de detección se lanzará en julio de 2021. Sin embargo, la herramienta de detección y los datos que se utilizan se actualizarán continuamente para reflejar mejor las experiencias vividas por los miembros de la comunidad.", - "index.aboutContent.p3": "Lea más sobre la Iniciativa Justice40 en {presidentLink} del presidente Biden.", - "index.presidentalLinkLabel": "Orden ejecutiva sobre la lucha contra la crisis climática en el país y en el extranjero.", - "index.presidentalLinkUri": "https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/", - "index.section2.header": "Áreas de enfoque", - "index.section3.header": "Un enfoque transparente, centrado en la comunidad", - "index.section3.inclusive": "{inlineHeader} Muchas áreas que carecen de inversiones también carecen de datos ambientales y se pasarían por alto utilizando los datos ambientales disponibles. CEQ se está acercando activamente a grupos que históricamente han sido excluidos de la toma de decisiones, como grupos en áreas rurales y tribales, para comprender sus necesidades y solicitar su opinión.", - "index.section3.inclusiveLabel": "Inclusivo:", - "index.section3.intro": "Las iniciativas exitosas están guiadas por aportes directos de las comunidades a las que sirven. CEQ se compromete con la transparencia, la inclusión y la iteración en la construcción de esta herramienta de evaluación.", - "index.section3.iterative": "{inlineHeader} La lista de priorización de la comunidad inicial proporcionada por la herramienta de evaluación es el comienzo de un proceso de colaboración en el refinamiento de la puntuación, en lugar de una respuesta final. CEQ ha recibido recomendaciones sobre conjuntos de datos de entrevistas comunitarias, el Consejo Asesor de Justicia Ambiental de la Casa Blanca y mediante comentarios públicos, pero establecer una puntuación que sea verdaderamente representativa será un proceso continuo a largo plazo. A medida que las comunidades envíen comentarios y recomendaciones, CEQ continuará mejorando las herramientas que se están construyendo y los procesos para la participación pública y de las partes interesadas.", - "index.section3.iterativeLabel": "Iterativo:", - "index.section3.transparent": "{inlineHeader} El código y los datos detrás de la herramienta de detección son de código abierto, lo que significa que está disponible para que el público los revise y contribuya. Esta herramienta se está desarrollando públicamente para que las comunidades, los expertos académicos y cualquier persona interesada puedan participar en el proceso de creación de herramientas.", - "index.section3.transparentLabel": "Transparencia:" + "about.page.sub.header.1.text.1_english" : "On January 27, 2021, 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 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.", + "about.page.sub.header.1.text.1" : "El 27 de enero de 2021, 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 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.", + + "about.page.sub.header.1.text.2_english" : "The current version of the tool is in a public beta form and will be updated based on feedback from the public.", + "about.page.sub.header.1.text.2" : "La versión actual de la herramienta se encuentra en una versión beta pública y se actualizará en función de los comentarios del público.", + + "about.page.sub.header.2.text.1_english" : "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.", + "about.page.sub.header.2.text.1" : "La herramienta proporcionará información importante para la iniciativa Justice40. 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.", + + "about.page.sub.header.2.text.2_english" : "Read more about the Justice40 Initiative in President Biden’s", + "about.page.sub.header.2.text.2" : "Leer más sobre la iniciativa Justice40", + + "about.page.title.text_english" : "About", + "about.page.title.text" : "Sobre nosotras", + + "areaDetail.categorization.community.of.focus_english" : "Community of focus", + "areaDetail.categorization.community.of.focus" : "", + + "areaDetail.categorization.not.community.of.focus_english" : "Not a community of focus", + "areaDetail.categorization.not.community.of.focus" : "", + + "areaDetail.geographicInfo.censusBlockGroup_english" : "Census block group:", + "areaDetail.geographicInfo.censusBlockGroup" : "", + + "areaDetail.geographicInfo.county_english" : "County:", + "areaDetail.geographicInfo.county" : "", + + "areaDetail.geographicInfo.population_english" : "Population:", + "areaDetail.geographicInfo.population" : "", + + "areaDetail.geographicInfo.state_english" : "State:", + "areaDetail.geographicInfo.state" : "", + + "areaDetail.indicator.areaMedianIncome_english" : "Area Median Income", + "areaDetail.indicator.areaMedianIncome" : "", + + "areaDetail.indicator.asthma_english" : "Asthma", + "areaDetail.indicator.asthma" : "", + + "areaDetail.indicator.description.area_median_income_english" : "Median income of the census block group calculated as a percent of the metropolitan area’s or state's median income", + "areaDetail.indicator.description.area_median_income" : "", + + "areaDetail.indicator.description.asthma_english" : "People who answer “yes” to both of the questions: “Have you ever been told by a doctor nurse, or other health professional that you have asthma?” and “Do you still have asthma?\"", + "areaDetail.indicator.description.asthma" : "", + + "areaDetail.indicator.description.diabetes_english" : "People ages 18 and up who report having been told by a doctor, nurse, or other health professionals that they have diabetes other than diabetes during pregnancy", + "areaDetail.indicator.description.diabetes" : "", + + "areaDetail.indicator.description.dieselPartMatter_english" : "Mixture of particles that is part of diesel exhaust in the air", + "areaDetail.indicator.description.dieselPartMatter" : "", + + "areaDetail.indicator.description.education_english" : "Percent of people age 25 or older that didn’t get a high school diploma", + "areaDetail.indicator.description.education" : "", + + "areaDetail.indicator.description.energyBurden_english" : "Average annual energy cost ($) divided by household income", + "areaDetail.indicator.description.energyBurden" : "", + + "areaDetail.indicator.description.femaRisk_english" : "Expected Annual Loss Score, which is the average economic loss in dollars resulting from natural hazards each year.", + "areaDetail.indicator.description.femaRisk" : "", + + "areaDetail.indicator.description.heartDisease_english" : "People ages 18 and up who report ever having been told by a doctor, nurse, or other health professionals that they had angina or coronary heart disease", + "areaDetail.indicator.description.heartDisease" : "", + + "areaDetail.indicator.description.houseBurden_english" : "Households that are low income and spend more than 30% of their income on housing costs", + "areaDetail.indicator.description.houseBurden" : "", + + "areaDetail.indicator.description.leadPaint_english" : "Housing units built pre-1960, used as an indicator of potential lead paint exposure in homes", + "areaDetail.indicator.description.leadPaint" : "", + + "areaDetail.indicator.description.lifeExpect_english" : "Estimated years of life expectancy", + "areaDetail.indicator.description.lifeExpect" : "", + + "areaDetail.indicator.description.pm25_english" : "Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller", + "areaDetail.indicator.description.pm25" : "", + + "areaDetail.indicator.description.poverty_english" : "Percent of a block group's population in households where the household income is at or below 100% of the federal poverty level", + "areaDetail.indicator.description.poverty" : "", + + "areaDetail.indicator.description.trafficVolume_english" : "Count of vehicles (average annual daily traffic) at major roads within 500 meters, divided by distance in meters", + "areaDetail.indicator.description.trafficVolume" : "", + + "areaDetail.indicator.description.wasteWater_english" : "Toxic concentrations at stream segments within 500 meters divided by distance in kilometers", + "areaDetail.indicator.description.wasteWater" : "", + + "areaDetail.indicator.diabetes_english" : "Diabetes", + "areaDetail.indicator.diabetes" : "", + + "areaDetail.indicator.dieselPartMatter_english" : "Diesel particulate matter", + "areaDetail.indicator.dieselPartMatter" : "", + + "areaDetail.indicator.education_english" : "Education, less than high school", + "areaDetail.indicator.education" : "", + + "areaDetail.indicator.energyBurden_english" : "Energy burden", + "areaDetail.indicator.energyBurden" : "", + + "areaDetail.indicator.femaRisk_english" : "FEMA Risk Index", + "areaDetail.indicator.femaRisk" : "", + + "areaDetail.indicator.heartDisease_english" : "Heart disease", + "areaDetail.indicator.heartDisease" : "", + + "areaDetail.indicator.houseBurden_english" : "Housing cost burden", + "areaDetail.indicator.houseBurden" : "", + + "areaDetail.indicator.leadPaint_english" : "Lead paint", + "areaDetail.indicator.leadPaint" : "", + + "areaDetail.indicator.lifeExpect_english" : "Life expectancy", + "areaDetail.indicator.lifeExpect" : "", + + "areaDetail.indicator.pm25_english" : "PM2.5", + "areaDetail.indicator.pm25" : "", + + "areaDetail.indicator.poverty_english" : "Poverty", + "areaDetail.indicator.poverty" : "", + + "areaDetail.indicator.trafficVolume_english" : "Traffic proximity and volume", + "areaDetail.indicator.trafficVolume" : "", + + "areaDetail.indicator.wasteWater_english" : "Wastewater discharge", + "areaDetail.indicator.wasteWater" : "", + + "areaDetail.indicators.indicatorColumnHeader_english" : "Indicator", + "areaDetail.indicators.indicatorColumnHeader" : "", + + "areaDetail.indicators.percentileColumnHeader_english" : "Percentile (0-100)", + "areaDetail.indicators.percentileColumnHeader" : "", + + "banner.beta.info_english" : "It is an early, in-progress version of the tool with limited data sets that will be continuously updated.", + "banner.beta.info" : "", + + "banner.beta.title_english" : "This is a Beta site.", + "banner.beta.title" : "", + + "community.members.heading_english" : "Community members", + "community.members.heading" : "", + + "community.members.info_english" : "Explore data about communities of focus in your area, and help provide feedback on the tool.", + "community.members.info" : "", + + "community.members.link_english" : "Explore the tool", + "community.members.link" : "", + + "contact.page.header.text_english" : "Contact", + "contact.page.header.text" : "", + + "contact.page.sub.header.text_english" : "Email us", + "contact.page.sub.header.text" : "", + + "contact.page.title.text_english" : "Contact", + "contact.page.title.text" : "", + + "datasetCard.dataDateRange_english" : "Data date range:", + "datasetCard.dataDateRange" : "", + + "datasetCard.dataResolution_english" : "Data resolution:", + "datasetCard.dataResolution" : "", + + "datasetCard.dataSource_english" : "Data source:", + "datasetCard.dataSource" : "", + + "datasetContainer.additional.heading_english" : "Additional Indicators", + "datasetContainer.additional.heading" : "", + + "datasetContainer.additional.info_english" : "These datasets provide additional information about each community.", + "datasetContainer.additional.info" : "", + + "datasetContainer.heading_english" : "Datasets used in methodology", + "datasetContainer.heading" : "", + + "datasetContainer.info_english" : "The datasets come from a variety of sources and were selected based on relevance, availability, recency, and quality. The datasets seek to identify a range of human health, environmental, climate-related, and other cumulative impacts on communities.", + "datasetContainer.info" : "", + + "download.draft.ptag.1_english" : "{downloadDraft} of communities of focus and datasets used. Last updated: {dateUpdated}.", + "download.draft.ptag.1" : "", + + "download.draft.ptag.2_english" : "ZIP file will contain one .xlsx, one .csv, and one .pdf ({downloadFileSize}).", + "download.draft.ptag.2" : "", + + "downloadPacket.button.text_english" : "Download package", + "downloadPacket.button.text" : "", + + "downloadPacket.header.text_english" : "Draft communities list v{versionNumber} ({downloadFileSize})", + "downloadPacket.header.text" : "", + + "downloadPacket.info.last.updated_english" : "Last updated: {downloadLastUpdated}", + "downloadPacket.info.last.updated" : "", + + "downloadPacket.info.text_english" : "The package includes draft v{versionNumber} of the list of communities of focus (.csv and .xlsx) and information about how to use the list (.pdf).", + "downloadPacket.info.text" : "", + + "exploreTool.heading.text_english" : "Explore the tool", + "exploreTool.heading.text" : "", + + "exploreTool.page.description_english" : "Zoom into the map to see communities of focus that can help Federal agencies identify disadvantaged communities and to provide socioeconomic, environmental, and climate information and data. Learn more about the methodology and datasets that were used to determine these communities of focus on the {methodologyLink} page.", + "exploreTool.page.description" : "", + + "exploreTool.title.text_english" : "Explore the tool", + "exploreTool.title.text" : "", + + "federal.pm.heading_english" : "Federal program managers", + "federal.pm.heading" : "", + + "federal.pm.info_english" : "Download the screening tool’s draft list of communities of focus. Explore data that may be useful to your program, and provide feedback on the tool.", + "federal.pm.info" : "", + + "federal.pm.link_english" : "Go to data & methodology", + "federal.pm.link" : "", + + "footer.arialabel_english" : "Footer navigation", + "footer.arialabel" : "", + + "footer.contactheader_english" : "Contact", + "footer.contactheader" : "", + + "footer.findcontactlink_english" : "Find a contact at USA.gov", + "footer.findcontactlink" : "", + + "footer.foialink_english" : "Freedom of Information Act (FOIA)", + "footer.foialink" : "", + + "footer.logo.title_english" : "Council on Environmental Quality", + "footer.logo.title" : "", + + "footer.moreinfoheader_english" : "More information", + "footer.moreinfoheader" : "", + + "footer.privacylink_english" : "Privacy Policy", + "footer.privacylink" : "", + + "footer.questionsheader_english" : "Have a question about government services?", + "footer.questionsheader" : "", + + "footer.whitehouselink_english" : "Whitehouse.gov", + "footer.whitehouselink" : "", + + "footer.whitehouselogoalt_english" : "Whitehouse logo", + "footer.whitehouselogoalt" : "", + + "getInvolved.title_english" : "Get involved", + "getInvolved.title" : "", + + "header.about_english" : "About", + "header.about" : "", + + "header.contact_english" : "Contact", + "header.contact" : "", + + "header.explore_english" : "Explore the tool", + "header.explore" : "", + + "header.methodology_english" : "Data & methodology", + "header.methodology" : "", + + "header.title.line1_english" : "Climate and Economic Justice", + "header.title.line1" : "", + + "header.title.line2_english" : "Screening Tool", + "header.title.line2" : "", + + "howToGetStarted.title_english" : "How to get started", + "howToGetStarted.title" : "", + + "index.heading.about.us_english" : "About us", + "index.heading.about.us" : "", + + "index.heading.justice40_english" : "The Justice40 Initiative", + "index.heading.justice40" : "", + + "index.heading.screentool_english" : "The screening tool", + "index.heading.screentool" : "", + + "index.presidentalLinkLabel_english" : "Executive Order 14008 on Tackling the Climate Crisis at Home and Abroad.", + "index.presidentalLinkLabel" : "", + + "join.open.source.info_english" : "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.", + "join.open.source.info" : "", + + "join.open.source.link_english" : "Check it out on GitHub", + "join.open.source.link" : "", + + "join.opensource.heading_english" : "Join the open source community", + "join.opensource.heading" : "", + + "legend.info.priority.label_english" : "Draft community of focus", + "legend.info.priority.label" : "", + + "legend.info.threshold.label_english" : "A community identified as experiencing disadvantages that merits the focus of certain Federal investments, including through the Justice40 Initiative", + "legend.info.threshold.label" : "", + + "map.territoryFocus.alaska.long_english" : "Alaska", + "map.territoryFocus.alaska.long" : "", + + "map.territoryFocus.alaska.short_english" : "AK", + "map.territoryFocus.alaska.short" : "", + + "map.territoryFocus.focusOn_english" : "Focus on {territory}", + "map.territoryFocus.focusOn" : "", + + "map.territoryFocus.hawaii.long_english" : "Hawaii", + "map.territoryFocus.hawaii.long" : "", + + "map.territoryFocus.hawaii.short_english" : "HI", + "map.territoryFocus.hawaii.short" : "", + + "map.territoryFocus.lower48.long_english" : "Lower 48", + "map.territoryFocus.lower48.long" : "", + + "map.territoryFocus.lower48.short_english" : "48", + "map.territoryFocus.lower48.short" : "", + + "map.territoryFocus.puerto_rico.long_english" : "Puerto Rico", + "map.territoryFocus.puerto_rico.long" : "", + + "map.territoryFocus.puerto_rico.short_english" : "PR", + "map.territoryFocus.puerto_rico.short" : "", + + "map.zoom.warning_english" : "Zoom in to the state or regional level to see prioritized communities on the map.", + "map.zoom.warning" : "", + + "mapIntro.censusBlockGroupDefinition_english" : "A census block group is generally between 600 and 3,000 people. It is the smallest geographical unit for which the U.S. Census Bureau publishes sample data.", + "mapIntro.censusBlockGroupDefinition" : "", + + "mapIntro.didYouKnow_english" : "Did you know?", + "mapIntro.didYouKnow" : "", + + "mapIntro.mapIntroHeader_english" : "Zoom and select a census block group to view data", + "mapIntro.mapIntroHeader" : "", + + "methodology.page.header.text_english" : "Methodology", + "methodology.page.header.text" : "", + + "methodology.page.paragraph.first_english" : "The methodology for identifying communities of focus is currently in a draft, pre-decisional form that may change over time as more datasets become available.", + "methodology.page.paragraph.first" : "", + + "methodology.page.title.text_english" : "Data and Methodology", + "methodology.page.title.text" : "", + + "methodology.step.1.a.heading_english" : "Percent of Area Median Income", + "methodology.step.1.a.heading" : "", + + "methodology.step.1.a.info.1_english" : "If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income.", + "methodology.step.1.a.info.1" : "", + + "methodology.step.1.a.info.2_english" : "If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income.", + "methodology.step.1.a.info.2" : "", + + "methodology.step.1.b.heading_english" : "Percent of households below or at 100% of the federal poverty line", + "methodology.step.1.b.heading" : "", + + "methodology.step.1.c.heading_english" : "The high school degree achievement rate for adults 25 years and older", + "methodology.step.1.c.heading" : "", + + "methodology.step.1.c.info_english" : "The percent of individuals who are 25 or older who have received a high school degree.", + "methodology.step.1.c.info" : "", + + "methodology.step.1.heading_english" : "Gather datasets", + "methodology.step.1.heading" : "", + + "methodology.step.1.info_english" : "The methodology includes the following inputs that are equally weighted.", + "methodology.step.1.info" : "", + + "methodology.step.2.heading_english" : "Determine communites of focus", + "methodology.step.2.heading" : "", + + "methodology.step.2.info_english" : "Under the existing formula, a census block group will be considered a community of focus if:", + "methodology.step.2.info" : "", + + "methodology.steps.2.b.info_english" : "This is the percent of households in a state with a household income below or at 100% of the {federalPovertyLine}. This federal poverty line is calculated based on the composition of each household (e.g., based on household size), but it does not vary geographically.", + "methodology.steps.2.b.info" : "", + + "methodology.steps.2.formula_english" : "{medianIncome} {or} {livingAtPovery} {and} {education}", + "methodology.steps.2.formula" : "", + + "methodology.steps.description.1_english" : "The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010.", + "methodology.steps.description.1" : "", + + "methodology.steps.description.2_english" : "The following describes the process for identifying communities of focus.", + "methodology.steps.description.2" : "", + + "methodology.steps.heading_english" : "Methodology", + "methodology.steps.heading" : "", + + "pageNotFound.Guidance.text_english" : "Try creating a page in", + "pageNotFound.Guidance.text" : "", + + "pageNotFound.apology.description.text_english" : "we couldn’t find what you were looking for.", + "pageNotFound.apology.description.text" : "", + + "pageNotFound.apology.text_english" : "Sorry", + "pageNotFound.apology.text" : "", + + "pageNotFound.heading.text_english" : "Page not found", + "pageNotFound.heading.text" : "", + + "pageNotFound.link.to.go.home.text_english" : "Go home", + "pageNotFound.link.to.go.home.text" : "", + + "pageNotFound.title.text_english" : "Page not found", + "pageNotFound.title.text" : "", + + "send.feedback.heading_english" : "Send feedback", + "send.feedback.heading" : "", + + "send.feedback.info_english" : "Have ideas about how this tool can be improved to better reflect the on-the-ground experiences of your community?", + "send.feedback.info" : "", + + "youCanHelpInfoText.heading_english" : "How you can help improve the tool", + "youCanHelpInfoText.heading" : "", + + "youCanHelpInfoText.list.item.1_english" : "If you have helpful information, we would love to {rxEmailFromYou}.", + "youCanHelpInfoText.list.item.1" : "", + + "youCanHelpInfoText.list.item.2_english" : "View our {dataMeth} page and send us feedback.", + "youCanHelpInfoText.list.item.2" : "", + + "youCanHelpInfoText.list.item.3_english" : "Find your community of interest and {shareFeedback}.", + "youCanHelpInfoText.list.item.3" : "" + } diff --git a/client/src/pages/__snapshots__/contact.test.tsx.snap b/client/src/pages/__snapshots__/contact.test.tsx.snap index b9ff6a50..79690173 100644 --- a/client/src/pages/__snapshots__/contact.test.tsx.snap +++ b/client/src/pages/__snapshots__/contact.test.tsx.snap @@ -3,7 +3,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are visible 1`] = `
+
+
+
+
+ + This is a Beta site. + + + It is an early, in-progress version of the tool with limited data + sets that will be continuously updated. + +
+
+
-
-
-
-
-
-

- - Public beta - - - — This website may be continuously updated - -
-

-
-
-
-
+
+
+
+
+ + This is a Beta site. + + + It is an early, in-progress version of the tool with limited data + sets that will be continuously updated. + +
+
+
- +
+
+ Climate and Economic Justice +
+
+
+ Screening Tool +
+
+ BETA +
+
+
+
+
+ + +
-
-
-
-
-
-

- - Public beta - - - — This website may be continuously updated - -
-

-
-
-
-
+
+
+
+
+ + This is a Beta site. + + + It is an early, in-progress version of the tool with limited data + sets that will be continuously updated. + +
+
+
- +
+
+ Climate and Economic Justice +
+
+
+ Screening Tool +
+
+ BETA +
+
+
+
+
+ + +
-
-
-
-
-
-

- - Public beta - - - — This website may be continuously updated - -
-

-
-
-
-
-
-
-
-

- - Limited data sources - - - — Datasets may be added, updated, or removed. - -
-

-
-
-

Datasets used in methodology

diff --git a/client/src/pages/cejst.tsx b/client/src/pages/cejst.tsx index d9f4308e..cba6cee1 100644 --- a/client/src/pages/cejst.tsx +++ b/client/src/pages/cejst.tsx @@ -2,7 +2,6 @@ import React from 'react'; import {useIntl} from 'gatsby-plugin-intl'; import {Grid} from '@trussworks/react-uswds'; -import AlertWrapper from '../components/AlertWrapper'; import HowYouCanHelp from '../components/HowYouCanHelp'; import J40MainGridContainer from '../components/J40MainGridContainer'; import Layout from '../components/layout'; @@ -22,9 +21,6 @@ const CEJSTPage = ({location}: IMapPageProps) => { return ( - - -

{intl.formatMessage(EXPLORE_COPY.PAGE_INTRO.PAGE_HEADING)}

diff --git a/client/src/pages/contact.tsx b/client/src/pages/contact.tsx index adc9aaec..1ddefaff 100644 --- a/client/src/pages/contact.tsx +++ b/client/src/pages/contact.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import {Grid} from '@trussworks/react-uswds'; import {useIntl, FormattedMessage} from 'gatsby-plugin-intl'; -import AlertWrapper from '../components/AlertWrapper'; import J40MainGridContainer from '../components/J40MainGridContainer'; import Layout from '../components/layout'; @@ -18,10 +17,6 @@ const ContactPage = ({location}: IContactPageProps) => { return ( - - - - diff --git a/client/src/pages/index.tsx b/client/src/pages/index.tsx index 09a0b1af..186d655b 100644 --- a/client/src/pages/index.tsx +++ b/client/src/pages/index.tsx @@ -3,7 +3,6 @@ import {useIntl} from 'gatsby-plugin-intl'; import AboutCard from '../components/AboutCard/AboutCard'; import AboutCardsContainer from '../components/AboutCard/AboutCardsContainer'; -import AlertWrapper from '../components/AlertWrapper'; import J40MainGridContainer from '../components/J40MainGridContainer'; import Layout from '../components/layout'; @@ -36,9 +35,6 @@ const IndexPage = ({location}: IndexPageProps) => { return ( - - -

{intl.formatMessage(ABOUT_COPY.PAGE.HEADING)}

diff --git a/client/src/pages/methodology.tsx b/client/src/pages/methodology.tsx index 8acbb1e6..805d2d37 100644 --- a/client/src/pages/methodology.tsx +++ b/client/src/pages/methodology.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import {Grid} from '@trussworks/react-uswds'; import {useIntl} from 'gatsby-plugin-intl'; -import AlertWrapper from '../components/AlertWrapper'; import DatasetContainer from '../components/DatasetContainer'; import DownloadPacket from '../components/DownloadPacket'; import J40MainGridContainer from '../components/J40MainGridContainer'; @@ -22,10 +21,6 @@ const IndexPage = ({location}: MethodPageProps) => { return ( - - - -

{intl.formatMessage(METHODOLOGY_COPY.PAGE.HEADING)}

diff --git a/client/src/styles/design-system.scss b/client/src/styles/design-system.scss new file mode 100644 index 00000000..3b1de84f --- /dev/null +++ b/client/src/styles/design-system.scss @@ -0,0 +1,9 @@ +@import '../styles/theme/_uswds-theme-general.scss'; +@import '../styles/theme/_uswds-theme-typography.scss'; +@import '../styles/theme/_uswds-theme-spacing.scss'; +@import '../styles/theme/_uswds-theme-color.scss'; +@import '../styles/theme/_uswds-theme-utilities.scss'; + +@import '../styles/uswds-settings.scss'; + +@import '../../node_modules/uswds/src/stylesheets/packages/_required.scss'; \ No newline at end of file diff --git a/client/src/styles/global.scss b/client/src/styles/global.scss index 35eb7847..b5f66a2b 100644 --- a/client/src/styles/global.scss +++ b/client/src/styles/global.scss @@ -20,11 +20,9 @@ There are 3 things that should be included in this file: Instead of having a separate file for these styles, all styles are being placed here. - Global styles - Layout styles - -- Header styles -- Main content styles -- Footer styles - Component styles - -- Alert styles -- Map styles -- Timeline/process list styles -- About styles @@ -101,93 +99,9 @@ p.flush { This section will outline styles for components that are on each page. These components include: -- header styles - main content styles - footer styles -****************************** -* HEADER STYLES -****************************** -*/ -.j40-header, -.j40-primary-nav, -.j40-header > li > a { - - // Todo color: remove this global - // May be able to place importance like this: u-bg('red-warm-50v', !important) - color: $primary-color !important; - z-index: 5; - - .usa-nav-container { - max-width: 76rem; - } - - span { - // make sure the open close chevron is colored correctly - color: $primary-color; // Todo color: remove this global - } - - // this is the title - @include at-media("desktop") { - .j40-title { - font-size: 0.9em; - padding-bottom: 0; // allows vertical centering on logo and text - font-weight: normal; - } - - .usa-navbar { - width: 100%; - } - - // this actual site logo - .sitelogo { - float: left; // allows vertical centering on logo and text - margin-right: 0.5rem; // space between logo and text - width: 4rem; - padding: 0.5rem; // this will change the size of the logo too - } - - // nav menu item font - .usa-nav__primary { - .usa-nav__primary-item { - a { - margin-bottom: 0.5em; // how far menu is from bottom edge of nav - font-weight: 600; - } - } - } - - // this is forcing the whole toolbar much taller - .usa-logo { - margin-top: 1.2rem; - margin-bottom: 1.2rem; - } - } - - @include at-media("mobile") { - .usa-logo__text { - padding-top: 3px; // allows vertical centering on logo and text - padding-bottom: 0; // allows vertical centering on logo and text - font-weight: normal; - } - - .usa-navbar { - width: 100%; - } - - .j40-sitelogo { - float: left; // allows vertical centering on logo and text - margin-right: 0.5em; // space between logo and text - width: 3em; - padding: 0.4em; // this will change the size of the logo too - } - } -} - -.usa-tag.j40 { - background: orange; - margin-left: 1rem; -} /* ****************************** @@ -242,49 +156,9 @@ components include: /***************** COMPONENT STYLES ************************************************************** This section will outline styles that are component specific -- alert - map - timeline - about -- accordion - -/* -****************************** -* ALERT STYLES -****************************** -*/ - -.j40-sitealert { - p { - margin: 0; - } - - min-height: 2.5em; - margin: 0; - - .j40-sitealert-title { - font-weight: bold; - } - - .usa-alert { - margin: 0; - padding-bottom: 0; - padding-top: 0; - } - - .usa-alert__body { - padding-top: 0; - padding-bottom: 0; - margin-bottom: 0; - } - - .usa-alert__text { - padding-top: 0; - padding-bottom: 0; - margin-bottom: 0; - } -} - /* ******************************