diff --git a/.github/workflows/blog.yaml b/.github/workflows/blog.yaml index 187b1d68b..a9b55a12b 100644 --- a/.github/workflows/blog.yaml +++ b/.github/workflows/blog.yaml @@ -5,10 +5,11 @@ on: paths: # run only when an Rmd file changes - "**.Rmd" - "environment.yml" + - "dependencies.R" - ".github/workflows/blog.yaml" jobs: - build: + blog: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -16,7 +17,7 @@ jobs: # submodules: true # Fetch Hugo themes (true OR recursive) fetch-depth: 3 - name: Cache Conda - uses: actions/cache@v2.1.5 + uses: actions/cache@v2.1.6 with: path: ~/conda_pkgs_dir key: ${{ runner.os }}-conda6-${{ hashFiles('environment.yml') }} @@ -42,7 +43,7 @@ jobs: run: | Rscript ./dependencies.R - name: Restore Blogdown Cache - uses: actions/cache@v2.1.5 + uses: actions/cache@v2.1.6 with: path: | ./blogdown @@ -65,7 +66,7 @@ jobs: - uses: actions/setup-node@v2.1.5 with: node-version: "12" - - uses: actions/cache@v2.1.5 + - uses: actions/cache@v2.1.6 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d849bc1b3..98d31a83c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,7 +14,7 @@ jobs: - uses: actions/setup-node@v2.1.5 with: node-version: "14" - - uses: actions/cache@v2.1.5 + - uses: actions/cache@v2.1.6 with: path: ~/.npm key: ${{ runner.os }}-node3-${{ hashFiles('**/package-lock.json') }} diff --git a/.github/workflows/release_main.yml b/.github/workflows/release_main.yml index ec2cb98e3..bc02bf29a 100644 --- a/.github/workflows/release_main.yml +++ b/.github/workflows/release_main.yml @@ -47,7 +47,7 @@ jobs: with: node-version: "14" - name: Cache Node.js modules - uses: actions/cache@v2.1.5 + uses: actions/cache@v2.1.6 with: path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS key: ${{ runner.OS }}-node2-${{ hashFiles('**/package-lock.json') }} diff --git a/.vscode/settings.json b/.vscode/settings.json index d3860b2a3..1b518204e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,7 @@ "editor.formatOnSave": true, "editor.formatOnPaste": true, "editor.formatOnSaveMode": "modifications", + "prettier.prettierPath": "./node_modules/prettier", "[scss]": { "files.trimTrailingWhitespace": true, "editor.formatOnSave": true, @@ -16,5 +17,6 @@ "files.trimTrailingWhitespace": true, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode" - } + }, + "prettier.enableDebugLogs": true } diff --git a/README.md b/README.md index 780b45efa..1a5a42f21 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,8 @@ In order to convert the Rmd files to HTML files for Hugo you also need to: 1. Activate the environment: `conda activate www-main` 1. Install extra R dependencies: `Rscript ./dependencies.R` +As an alternative you can use Docker and Docker Compose. Then it reduces to `docker-compose up -d` to create a docker container for the current environment. In the following you would need to jump into the container to execute the upcoming command via `docker-compose exec r bash`. + #### Commands 1. Activate the environment: `conda activate www-main` @@ -93,15 +95,88 @@ In order to convert the Rmd files to HTML files for Hugo you also need to: blogdown also has an integrated server `blogdown::serve_site()` which will render RMarkdown files on the fly and does a similar thing as `hugo server -D`. A shortcut is available through `npm run start:blog`. -#### Adding a new blog post +## Adding a new blog post + +*Prerequisite*: Installed Blog Editor environment from the previous section + +### Create new blog file + +Create a new file `content/blog` with a naming convention of `YYYY-MM-DD-short-title.Rmd`. The date is the creation date. Copy the template post or another example to start with. *Note*: Starting the file with an underscore (e.g. `_2021-04-20-jj-vaccine.Rmd`), will stop this file from being automatically checked by the Github Action CI. Only do this when the public CI cannot build this post, if for example private data is used. In case you use new dependencies don't forget to either edit `environment.yml` or `dependencies.R`. -A Github action should runs when Rmd files changes so it will verify that the blog post can be built. +A Github action should run when Rmd files changes so it will verify that the blog post can be built. However, the converted HTML file along with all generated images are committed to the repository. This simplifies the deployment and ensures that we have a blog post even when the API or data changes. +### Edit Blog Header + +The header of a blog file contains numerous attributes to be defined, including: name, publication date (`date`), tags, a short summary (at most 150 characters), and a list of authors. The author list `authors` is a list of people keys, see below for how to add people. + +The `heroImage` is an optional hero image banner. The image is optional but its thumbnail version is not. However, the template post has good default value for this one. The hero image should be a JPG file with 1120x440 pixels. The thumbnail hero image should be a JPG file with 300x300 pixels. The files should be stored in `/content/blog/images`. + +The `related` list is a list of related blog links identified by their file name without the Rmd suffix. + +### Linking within the blog post + +In order to generate links that are relative to the whole website there are two short codes for R Markdown available. -### Release Process +#### Linking to another page + +using the `reflink` shortcode. For example, `r blogdown::shortcode_html("reflink", "2020-09-18-google-survey", "Google")` will generate a relative link to the blog post with the filename `2020-09-18-google-survey` and anchor text `Google`. + +#### Linking to the API docs + +using the `apireflink` shortcode. For example, `r blogdown::shortcode_html("apireflink", "api/covidcast.html", "COVIDcast API")` will generate a link to the API docs and its sub page `api/covidcast.html` and will look like: [`COVIDcast API`](https://cmu-delphi.github.io/delphi-epidata/). + +### Creating wide figures + +In case of a wide figure, one can break out of the layout by adding the `out.extra = 'class="wide-figure"'` extra argument to the corresponding R chunk. + +e.g., +``` +{r, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 5, out.extra = 'class="wide-figure"'} +ggplot(...) +``` + +### Adding static images + +Static images (e.g. pre-generated plots) should be stored in a `/static/blog/_files` directory and referenced using something like + +``` +![](/blog/2021-04-29-vaccine-trends-hispanic_files/hesitancy_over_time_hispanic_and_white_adults.png) +``` + +### Building the blog file + +see before using `Rscript -e 'blogdown::build_site(local=TRUE, run_hugo=FALSE, build_rmd="content/blog/.Rmd")'` where `` should be replaced by the name of the Rmd file. **The generated files should be committed to this repository to ensure reproducibility.** + + +## Adding new people (team, blog authors) + +People on this website are centrally managed in the `/content/people/index.md` file. Each entry should have the following attributes: + + * `key` ... short key to identify this person when referencing them in the blog section + * `firstName`, `lastName`, `affiliation` + * `image` ... name of the head shot image (preferred 500x500px in JPG format) stored in `/content/people/headshots` + * `description` ... used within the blog footer as an about the author text + * `note` ...optional note about past contributors + * `link` ... optional used for linking to a personal website + * `team` ... list of teams this person is part of. used to assign places on the teams page. possible values are: + * `core` ... core member + * `blog` ... blog author + * `highlight` ... highlight person on front page + * `external` ... external person not to be listed in the teams page + * `past` ... past member team section + * `leadership` ... ryan and roni + * `contributors` ... contributor team section + * `google` ... google team section + + +## Adding new news item + +News items are short announcements that should be persistent. The are centrally managed in the `/content/news/headless` directory. Each news item is its own file with content, title, and publication date. + +## Release Process The release consists of multiple steps which can be all done via the GitHub website: @@ -115,4 +190,3 @@ The release consists of multiple steps which can be all done via the GitHub webs 1. create docker image and the production system will be notified to pull this update 1. Once the jobs are completed the new release should be available at https://delphi.cmu.edu within minutes. 1. Done - diff --git a/config.toml b/config.toml index 1f16a67de..ac840098e 100644 --- a/config.toml +++ b/config.toml @@ -141,6 +141,7 @@ relativeURLs = false mission = "Develop the theory and practice of epidemiological forecasting, with a long-term vision of making this technology as universally accepted and useful as weather forecasting is today." apiUrl = "https://cmu-delphi.github.io/delphi-epidata" twitter = "CmuDelphi" + contactForm = "https://docs.google.com/forms/d/e/1FAIpQLScqgT1fKZr5VWBfsaSp-DNaN03aV6EoZU4YljIzHJ1Wl_zmtg/viewform" feedbackForm = "https://docs.google.com/forms/d/e/1FAIpQLSeIeOJtrAhdOriEyiRY7LkpQX8DZBY19dl6De8l56Q9CZhmxw/viewform?usp=pp_url&entry.1245962748=" feedbackLikelihoodMobile = 0.2 feedbackLikelihoodDesktop = 1 diff --git a/content/about/news/headless/2020_12_chng_partnership.md b/content/about/news/headless/2020_12_chng_partnership.md new file mode 100644 index 000000000..3f3f3e9c6 --- /dev/null +++ b/content/about/news/headless/2020_12_chng_partnership.md @@ -0,0 +1,7 @@ +--- +date: 2020-12-01 +title: COVIDcast enhanced with Change Healthcare COVID-19 de-identified claims data +category: update +--- + +[Change Healthcare and Carnegie Mellon University’s Delphi Research Group announce the launch of Delphi's enhanced COVIDcast real-time COVID-19 indicators](https://newsroom.changehealthcare.com/press-releases/carnegie-mellon-university-s-delphi-research-group-enhances-covi) diff --git a/content/about/news/headless/2021_05_12_spaig_award.md b/content/about/news/headless/2021_05_12_spaig_award.md new file mode 100644 index 000000000..ca64d392a --- /dev/null +++ b/content/about/news/headless/2021_05_12_spaig_award.md @@ -0,0 +1,7 @@ +--- +date: 2021-05-12 +title: Delphi Research Group and collaborators honored for COVIDcast +category: update +--- + +[The American Statistical Association (ASA) presented the 2021 Statistical Partnerships Among Academe, Industry, and Government (SPAIG) Award to Carnegie Mellon University’s Delphi Research Group and their COVIDcast partners](https://www.cmu.edu/dietrich/news/news-stories/2021/may/spaig-covid.html) diff --git a/content/blog/2015-07-23-template-post.Rmd b/content/blog/2015-07-23-template-post.Rmd index e98e5fcdc..3d353bfda 100644 --- a/content/blog/2015-07-23-template-post.Rmd +++ b/content/blog/2015-07-23-template-post.Rmd @@ -11,7 +11,7 @@ authors: # list of team member keys, see /content/about/team/index.md -> team - frida # uncomment to enable a big hero image # heroImage: blog-lg-img_hello-world.jpg # size: 1120x440 jpg format -heroImageThumb: blog-thumb.jpg # size: 300x200 jpg format +heroImageThumb: blog-thumb.jpg # size: 300x300 jpg format summary: | Blog summary, the first 150 characters are used for the blog list acknowledgements: | diff --git a/content/blog/2015-07-23-template-post.html b/content/blog/2015-07-23-template-post.html index 37eb14349..39b57a584 100644 --- a/content/blog/2015-07-23-template-post.html +++ b/content/blog/2015-07-23-template-post.html @@ -11,7 +11,7 @@ - frida # uncomment to enable a big hero image # heroImage: blog-lg-img_hello-world.jpg # size: 1120x440 jpg format -heroImageThumb: blog-thumb.jpg # size: 300x200 jpg format +heroImageThumb: blog-thumb.jpg # size: 300x300 jpg format summary: | Blog summary, the first 150 characters are used for the blog list acknowledgements: | diff --git a/content/blog/2020-08-26-fb-survey.Rmd b/content/blog/2020-08-26-fb-survey.Rmd index df20cbf68..678ece683 100644 --- a/content/blog/2020-08-26-fb-survey.Rmd +++ b/content/blog/2020-08-26-fb-survey.Rmd @@ -328,9 +328,9 @@ plot_one = function(geo_value, title = NULL, xlab = NULL, trans21 = function(x) trans(x, range2, range1) # Find state name, find abbreviation, then set title - state_name = fips_to_name(paste0(substr(geo_value, 1, 2), "000")) + state_name = state_fips_to_name(paste0(substr(geo_value, 1, 2), "000")) state_abbr = name_to_abbr(state_name) - title = paste0(fips_to_name(geo_value), ", ", state_abbr) + title = paste0(county_fips_to_name(geo_value), ", ", state_abbr) # Transform the combined signal to the incidence range, then stack # these rowwise into one data frame diff --git a/content/blog/2020-08-26-fb-survey.html b/content/blog/2020-08-26-fb-survey.html index ee3721775..0516c82b5 100644 --- a/content/blog/2020-08-26-fb-survey.html +++ b/content/blog/2020-08-26-fb-survey.html @@ -322,9 +322,9 @@

Some Interesting Examples

trans21 = function(x) trans(x, range2, range1) # Find state name, find abbreviation, then set title - state_name = fips_to_name(paste0(substr(geo_value, 1, 2), "000")) + state_name = state_fips_to_name(paste0(substr(geo_value, 1, 2), "000")) state_abbr = name_to_abbr(state_name) - title = paste0(fips_to_name(geo_value), ", ", state_abbr) + title = paste0(county_fips_to_name(geo_value), ", ", state_abbr) # Transform the combined signal to the incidence range, then stack # these rowwise into one data frame diff --git a/content/blog/2021-03-10_c2b.Rmd b/content/blog/2021-03-10_c2b.Rmd index 5f6138944..bf81ab277 100644 --- a/content/blog/2021-03-10_c2b.Rmd +++ b/content/blog/2021-03-10_c2b.Rmd @@ -12,13 +12,13 @@ authors: - roni - cscott heroImage: blog-lg-c2b.jpg # size: 1120x440 jpg format -heroImageThumb: blog-thumb-c2b-1.jpg # size: 300x200 jpg format +heroImageThumb: blog-thumb-c2b-1.jpg # size: 300x300 jpg format # related: summary: | In partnership with the Allegheny County Health Department, we explored solutions to pressing challenges - during the pandemic. - + during the pandemic. + acknowledgements: | Thank you to the Allegheny County Health Department (especially Antony Gnalian, Dr. LuAnn Brink, and Dr. Debra Bogen) for their invaluable feedback, efforts, and diff --git a/content/blog/2021-03-10_c2b.html b/content/blog/2021-03-10_c2b.html index e4f1543bf..3d14c07f2 100644 --- a/content/blog/2021-03-10_c2b.html +++ b/content/blog/2021-03-10_c2b.html @@ -12,13 +12,13 @@ - roni - cscott heroImage: blog-lg-c2b.jpg # size: 1120x440 jpg format -heroImageThumb: blog-thumb-c2b-1.jpg # size: 300x200 jpg format +heroImageThumb: blog-thumb-c2b-1.jpg # size: 300x300 jpg format # related: summary: | In partnership with the Allegheny County Health Department, we explored solutions to pressing challenges - during the pandemic. - + during the pandemic. + acknowledgements: | Thank you to the Allegheny County Health Department (especially Antony Gnalian, Dr. LuAnn Brink, and Dr. Debra Bogen) for their invaluable feedback, efforts, and diff --git a/content/blog/images/blog-thumb-c2b-1.jpg b/content/blog/images/blog-thumb-c2b-1.jpg index 6990231de..57c5e6433 100644 Binary files a/content/blog/images/blog-thumb-c2b-1.jpg and b/content/blog/images/blog-thumb-c2b-1.jpg differ diff --git a/content/blog/images/blog-thumb-img_A Syndromic COVID-19.jpg b/content/blog/images/blog-thumb-img_A Syndromic COVID-19.jpg index 69d0955f0..92d7edee5 100644 Binary files a/content/blog/images/blog-thumb-img_A Syndromic COVID-19.jpg and b/content/blog/images/blog-thumb-img_A Syndromic COVID-19.jpg differ diff --git a/content/blog/images/blog-thumb-img_Accessing Open COVID-19.jpg b/content/blog/images/blog-thumb-img_Accessing Open COVID-19.jpg index 075bf4c7a..bcef78e92 100644 Binary files a/content/blog/images/blog-thumb-img_Accessing Open COVID-19.jpg and b/content/blog/images/blog-thumb-img_Accessing Open COVID-19.jpg differ diff --git a/content/blog/images/blog-thumb-img_New and Improved COVID.jpg b/content/blog/images/blog-thumb-img_New and Improved COVID.jpg index 6e79b9134..1832e1d8c 100644 Binary files a/content/blog/images/blog-thumb-img_New and Improved COVID.jpg and b/content/blog/images/blog-thumb-img_New and Improved COVID.jpg differ diff --git a/content/blog/images/blog-thumb-img_facebook-survey-post.jpg b/content/blog/images/blog-thumb-img_facebook-survey-post.jpg index d173d218d..87e6e3f4e 100644 Binary files a/content/blog/images/blog-thumb-img_facebook-survey-post.jpg and b/content/blog/images/blog-thumb-img_facebook-survey-post.jpg differ diff --git a/content/blog/images/blog-thumb-img_google-survey-post.jpg b/content/blog/images/blog-thumb-img_google-survey-post.jpg index 8ad0ad76a..71829c4bc 100644 Binary files a/content/blog/images/blog-thumb-img_google-survey-post.jpg and b/content/blog/images/blog-thumb-img_google-survey-post.jpg differ diff --git a/content/blog/images/blog-thumb-img_hello-world.jpg b/content/blog/images/blog-thumb-img_hello-world.jpg index 5458a5542..d728b389f 100644 Binary files a/content/blog/images/blog-thumb-img_hello-world.jpg and b/content/blog/images/blog-thumb-img_hello-world.jpg differ diff --git a/content/blog/images/blog-thumb-vaccine-2.jpg b/content/blog/images/blog-thumb-vaccine-2.jpg index 14bccb8eb..106c2277b 100644 Binary files a/content/blog/images/blog-thumb-vaccine-2.jpg and b/content/blog/images/blog-thumb-vaccine-2.jpg differ diff --git a/content/blog/images/blog-thumb-vaccine-survey.jpg b/content/blog/images/blog-thumb-vaccine-survey.jpg index 45eb54128..5ca859470 100644 Binary files a/content/blog/images/blog-thumb-vaccine-survey.jpg and b/content/blog/images/blog-thumb-vaccine-survey.jpg differ diff --git a/content/blog/images/blog-thumbnail_can symptoms surveys improve covid-19.jpg b/content/blog/images/blog-thumbnail_can symptoms surveys improve covid-19.jpg index 9c2a31a30..e5853269f 100644 Binary files a/content/blog/images/blog-thumbnail_can symptoms surveys improve covid-19.jpg and b/content/blog/images/blog-thumbnail_can symptoms surveys improve covid-19.jpg differ diff --git a/content/blog/images/causal-inference-mobility-thumb.jpg b/content/blog/images/causal-inference-mobility-thumb.jpg index 306a0c13c..3baedbf82 100644 Binary files a/content/blog/images/causal-inference-mobility-thumb.jpg and b/content/blog/images/causal-inference-mobility-thumb.jpg differ diff --git a/content/blog/images/holiday-gathering-small.jpg b/content/blog/images/holiday-gathering-small.jpg index 1a8e307d2..62e4fa1b3 100644 Binary files a/content/blog/images/holiday-gathering-small.jpg and b/content/blog/images/holiday-gathering-small.jpg differ diff --git a/content/blog/images/masks-public-thumb.jpg b/content/blog/images/masks-public-thumb.jpg index c692b711b..14a51429a 100644 Binary files a/content/blog/images/masks-public-thumb.jpg and b/content/blog/images/masks-public-thumb.jpg differ diff --git a/content/blog/images/unpack-cfr-thumb.jpg b/content/blog/images/unpack-cfr-thumb.jpg index b60c62bbb..a42f8b60f 100644 Binary files a/content/blog/images/unpack-cfr-thumb.jpg and b/content/blog/images/unpack-cfr-thumb.jpg differ diff --git a/content/covidcast/surveys.md b/content/covidcast/surveys.md index 98e6e7cbd..c07075341 100644 --- a/content/covidcast/surveys.md +++ b/content/covidcast/surveys.md @@ -52,12 +52,15 @@ Our [National COVID Survey Dashboard]({{< relref "covidcast/survey-results" >}}) ### Publications -- J. Lessler, M. K. Grabowski, K. H. Grantz, E. Badillo-Goicoechea, C. J. E. Metcalf, C. Lupton-Smith, A. S. Azman, and E. A. Stuart (2021). [Household COVID-19 risk and in-person schooling](https://doi.org/10.1126/science.abh2939). *Science*. +- C. M. Zipfel, V. Colizza, and S. Bansal (2021). [The missing season: The impacts of the COVID-19 pandemic on influenza](https://doi.org/10.1016/j.vaccine.2021.05.049). *Vaccine*. +- J. Lessler, M. K. Grabowski, K. H. Grantz, E. Badillo-Goicoechea, C. J. E. Metcalf, C. Lupton-Smith, A. S. Azman, and E. A. Stuart (2021). [Household COVID-19 risk and in-person schooling](https://doi.org/10.1126/science.abh2939). *Science* 372 (6545), 1092-1097. +- Doerr, A.J. (2021). [Locked (Down) and Loaded (Language): Effect of Policy and Speech on COVID-19 Outcomes](https://doi.org/10.1177/15480518211012404). *Journal of Leadership & Organizational Studies*. - Bilinski, A., Emanuel, E., Salomon, J.A. and Venkataramani, A. (2021). [Better Late Than Never: Trends in COVID-19 Infection Rates, Risk Perceptions, and Behavioral Responses in the USA](https://doi.org/10.1007/s11606-021-06633-8). *Journal of General Internal Medicine*. +- Molteni, E., Astley, C.M., Ma, W. et al. (2021). [Symptoms and syndromes associated with SARS-CoV-2 infection and severity in pregnant women from two community cohorts](https://doi.org/10.1038/s41598-021-86452-3). *Scientific Reports* 11, 6928. - Rebeiro, P., Aronoff, D, and Smith, M.K. (2021). [The Impact of State Mask-Wearing Requirements on the Growth of COVID-19 Cases, Hospitalizations, and Deaths in the United States](https://doi.org/10.1093/cid/ciab101). *Clinical Infectious Diseases*, ciab101. -- Rader, White, Burns, Chen, Brilliant, Cohen, Shaman, Brilliant, Kraemer, Moritz, Hawkins, Scarpino, Astley, and Brownstein (2021). [Mask-wearing and control of SARS-CoV-2 transmission in the USA: a cross-sectional study](https://doi.org/10.1016/S2589-7500(20)30293-4). *Lancet Digital Health* volume 3, issue 3, e148-e157. +- Rader, White, Burns, Chen, Brilliant, Cohen, Shaman, Brilliant, Kraemer, Moritz, Hawkins, Scarpino, Astley, and Brownstein (2021). [Mask-wearing and control of SARS-CoV-2 transmission in the USA: a cross-sectional study](https://doi.org/10.1016/S2589-7500(20)30293-4). *Lancet Digital Health* 3 (3), e148-e157. - Flaxman AD, Henning DJ and Duber HC (2020). [The relative incidence of COVID-19 in healthcare workers versus non-healthcare workers: evidence from a web-based survey of Facebook users in the United States](https://doi.org/10.12688/gatesopenres.13202.1). *Gates Open Research*, 4:174. -- Kreuter, F., Barkay, N., Bilinski, A., Bradford, A., Chiu, S., Eliat, R., Fan, J., Galili, T., Haimovich, D., Kim, B., LaRocca, S., Li, Y., Morris, K., Presser, S., Sarig, T., Salomon, J. A., Stewart, K., Stuart, E. A., & Tibshirani, R. J. (2020). [Partnering with a global platform to inform research and public policy making](https://doi.org/10.18148/srm/2020.v14i2.7761). *Survey Research Methods*, 14(2), 159-163. +- Kreuter, F., Barkay, N., Bilinski, A., Bradford, A., Chiu, S., Eliat, R., Fan, J., Galili, T., Haimovich, D., Kim, B., LaRocca, S., Li, Y., Morris, K., Presser, S., Sarig, T., Salomon, J. A., Stewart, K., Stuart, E. A., & Tibshirani, R. J. (2020). [Partnering with a global platform to inform research and public policy making](https://doi.org/10.18148/srm/2020.v14i2.7761). *Survey Research Methods*, 14 (2), 159-163. If you have used the survey data, or the aggregate data available in the COVIDcast API, to publish research results, please [contact us](#who-can-i-contact) so we can include your work here. diff --git a/content/epivis/_index.md b/content/epivis/_index.md new file mode 100644 index 000000000..3c40df856 --- /dev/null +++ b/content/epivis/_index.md @@ -0,0 +1,8 @@ +--- +title: EPIVis +description: EpiVis is an interactive tool for visualizing epidemiological time-series data. +layout: epivis_app +order: 1 +feedback: true +footer: false +--- diff --git a/content/tools/epivis.md b/content/tools/epivis.md index c62bc3e62..e6990332d 100644 --- a/content/tools/epivis.md +++ b/content/tools/epivis.md @@ -1,6 +1,6 @@ --- title: EpiVis -link: https://delphi.cmu.edu/epivis/epivis.html +link: /epivis/ order: 1 --- diff --git a/dependencies.R b/dependencies.R index 9f2d856c9..6953dc618 100644 --- a/dependencies.R +++ b/dependencies.R @@ -3,6 +3,7 @@ # blogdown::install_hugo() -devtools::install_github("cmu-delphi/covidcast", ref = "main", - upgrade = 'never', - subdir = "R-packages/covidcast") +install.packages("covidcast", repo="http://cran.rstudio.com/") +# devtools::install_github("cmu-delphi/covidcast", ref = "main", +# upgrade = 'never', +# subdir = "R-packages/covidcast") diff --git a/package-lock.json b/package-lock.json index 1ffdadbcf..e447dfe97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "www-main", - "version": "2.5.0", + "version": "2.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14,18 +14,18 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -64,22 +64,28 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -356,46 +362,6 @@ "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "clone-response": { @@ -688,6 +654,12 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -973,9 +945,9 @@ } }, "highlight.js": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", - "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==" + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.0.1.tgz", + "integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==" }, "http-cache-semantics": { "version": "3.8.1", @@ -996,9 +968,9 @@ } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "husky": { @@ -1088,6 +1060,12 @@ "has": "^1.0.3" } }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -1136,6 +1114,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1183,9 +1167,9 @@ "dev": true }, "katex": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.5.tgz", - "integrity": "sha512-n2uEzFpNFUOAlWs0eCgmT82LQyP+BlS45yBgnLRqe+ENp3+FEM3lM+cJwZwwxxONFgayyq1fm6n+w35vo2MaUg==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.11.tgz", + "integrity": "sha512-yJBHVIgwlAaapzlbvTpVF/ZOs8UkTj/sd46Fl8+qAf2/UiituPYVeapVD8ADZtqyRg/qNWUKt7gJoyYVWLrcXw==", "requires": { "commander": "^6.0.0" }, @@ -1213,22 +1197,22 @@ "dev": true }, "lint-staged": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", - "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz", + "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==", "dev": true, "requires": { - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-truncate": "^2.1.0", - "commander": "^6.2.0", + "commander": "^7.2.0", "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", + "debug": "^4.3.1", "dedent": "^0.7.0", "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", + "execa": "^5.0.0", + "listr2": "^3.8.2", + "log-symbols": "^4.1.0", + "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", @@ -1245,9 +1229,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -1270,9 +1254,9 @@ "dev": true }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, "cross-spawn": { @@ -1287,30 +1271,27 @@ } }, "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -1375,28 +1356,22 @@ } }, "listr2": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.4.3.tgz", - "integrity": "sha512-wZmkzNiuinOfwrGqAwTCcPw6aKQGTAMGXwG5xeU1WpDjJNeBA35jGBeWxR3OF+R6Yl5Y3dRG+3vE8t6PDcSNHA==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.8.2.tgz", + "integrity": "sha512-E28Fw7Zd3HQlCJKzb9a8C8M0HtFWQeucE+S8YrSrqZObuCLPRHMRrR8gNmYt65cU9orXYHwvN5agXC36lYt7VQ==", "dev": true, "requires": { - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-truncate": "^2.1.0", "figures": "^3.2.0", "indent-string": "^4.0.0", "log-update": "^4.0.0", "p-map": "^4.0.0", - "rxjs": "^6.6.6", + "rxjs": "^6.6.7", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1407,9 +1382,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -1431,12 +1406,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -1452,32 +1421,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -1486,17 +1429,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } } } }, @@ -1524,12 +1456,13 @@ } }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { @@ -1542,9 +1475,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -1595,12 +1528,6 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1625,18 +1552,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -1648,26 +1563,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -1721,13 +1616,13 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "mime-db": { @@ -1988,9 +1883,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true }, "pify": { @@ -2167,9 +2062,9 @@ } }, "rxjs": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", - "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -2377,12 +2272,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true } } }, @@ -2416,6 +2305,17 @@ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2444,6 +2344,15 @@ "is-regexp": "^1.0.0" } }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -2562,9 +2471,9 @@ "dev": true }, "uikit": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/uikit/-/uikit-3.6.20.tgz", - "integrity": "sha512-hq0vjW35JoedfVSjaJx8ZEXrE1hgDF8t1TEBUT6P7V3vepZ5U99rPu3HXl2bzR8c0XC0bdJ9Gcl9i03SsaeFyw==" + "version": "3.6.22", + "resolved": "https://registry.npmjs.org/uikit/-/uikit-3.6.22.tgz", + "integrity": "sha512-c8jz0lzvGPrPbOG4K5HvOCgUe7i9A6blZmMq2M/EYqoY7FT9dBayGFZYbBeio2s9WCpADIcCAj2QX/5L3EByOQ==" }, "unbzip2-stream": { "version": "1.4.3", @@ -2606,6 +2515,43 @@ "isexe": "^2.0.0" } }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2619,6 +2565,13 @@ "uikit": "^3.6.19" } }, + "www-epivis": { + "version": "https://github.com/cmu-delphi/www-epivis/releases/download/v2.0.0/www-epivis-2.0.0.tgz", + "integrity": "sha512-3jhsaZ8TI0A9XPbdV9wd7TDiA2P+7Tf/53VX1ulmJlHuUhFVGMDVq4V5dJNxosw6PMvn5ClxY05BWLFTSx+0fg==", + "requires": { + "uikit": "^3.6.22" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 84f723366..fd559d0e4 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,20 @@ { "name": "www-main", - "version": "2.5.0", + "version": "2.6.0", "private": true, "dependencies": { "@fortawesome/fontawesome-free": "^5.15.3", - "highlight.js": "^10.7.2", - "katex": "^0.13.5", - "uikit": "^3.6.20", - "www-covidcast": "https://github.com/cmu-delphi/www-covidcast/releases/download/v2.4.0/www-covidcast-2.4.0.tgz" + "highlight.js": "^11.0.1", + "katex": "^0.13.11", + "uikit": "^3.6.22", + "www-covidcast": "https://github.com/cmu-delphi/www-covidcast/releases/download/v2.4.0/www-covidcast-2.4.0.tgz", + "www-epivis": "https://github.com/cmu-delphi/www-epivis/releases/download/v2.0.0/www-epivis-2.0.0.tgz" }, "devDependencies": { "hugo-bin": "^0.71.1", "husky": "^6.0.0", - "lint-staged": "^10.5.4", - "prettier": "^2.2.1", + "lint-staged": "^11.0.0", + "prettier": "~2.2.1", "prettier-plugin-go-template": "^0.0.10", "rimraf": "^3.0.2", "shx": "^0.3.3" @@ -25,7 +26,8 @@ "clean": "rimraf \"*.tgz\" public", "copy_fonts": "shx cp -r \"node_modules/katex/dist/fonts/*\" themes/delphi/static/css/fonts/", "copy_covidcast": "shx rm -rf \"static/covidcast/*\" && shx cp \"node_modules/www-covidcast/public/**/*.{js,txt,css,map}\" static/covidcast/", - "postinstall": "npm run copy_fonts && npm run copy_covidcast", + "copy_epivis": "shx rm -rf \"static/epivis/*\" && shx cp \"node_modules/www-epivis/public/**/*.{js,txt,css,map}\" static/epivis/", + "postinstall": "npm run copy_fonts && npm run copy_covidcast && npm run copy_epivis", "build:blog": "Rscript -e \"blogdown::build_site(local=FALSE, run_hugo=FALSE, build_rmd='md5sum')\"", "prebuild": "npm run clean", "build": "hugo --gc --minify", diff --git a/static/covidcast/.gitignore b/static/covidcast/.gitignore index 8b42cac9a..7cc47d84a 100644 --- a/static/covidcast/.gitignore +++ b/static/covidcast/.gitignore @@ -1,4 +1,5 @@ *.js *.txt *.html -*.css \ No newline at end of file +*.css +*.map \ No newline at end of file diff --git a/static/epivis/.gitignore b/static/epivis/.gitignore new file mode 100644 index 000000000..7cc47d84a --- /dev/null +++ b/static/epivis/.gitignore @@ -0,0 +1,5 @@ +*.js +*.txt +*.html +*.css +*.map \ No newline at end of file diff --git a/themes/delphi/assets/css/pages/_covidcast.scss b/themes/delphi/assets/css/pages/_covidcast.scss index 0750cc759..89bac1ef0 100644 --- a/themes/delphi/assets/css/pages/_covidcast.scss +++ b/themes/delphi/assets/css/pages/_covidcast.scss @@ -1,7 +1,12 @@ -#vizbox { +#vizbox, +#epivis { margin-top: 5px !important; } +#epivis { + flex-grow: 1; +} + .covidcast_wrapper { display: flex; flex-direction: column; diff --git a/themes/delphi/assets/js/main.js b/themes/delphi/assets/js/main.js index dee102a9e..958fa67c3 100644 --- a/themes/delphi/assets/js/main.js +++ b/themes/delphi/assets/js/main.js @@ -7,3 +7,5 @@ UIkit.use(plugin); window.UIkit = UIkit; // define for covidcast at which base url it is embedded window.DELPHI_COVIDCAST_PAGE = "/covidcast/"; +// define for covidcast at which base url it is embedded +window.DELPHI_EPIVIS_PAGE = "/epivis/"; diff --git a/themes/delphi/layouts/_default/epivis_app.html b/themes/delphi/layouts/_default/epivis_app.html new file mode 100644 index 000000000..9637a83ff --- /dev/null +++ b/themes/delphi/layouts/_default/epivis_app.html @@ -0,0 +1,11 @@ +{{ define "styles" }} + +{{ end }} +{{ define "scripts" }} + +{{ end }} +{{ define "breadcrumb" }}{{ end }} +{{ define "body_class" }}{{ if eq .Params.footer false }}covidcast_wrapper{{ end }}{{ end }} +{{ define "main" }} +
+{{ end }} diff --git a/themes/delphi/layouts/blog/list.html b/themes/delphi/layouts/blog/list.html index 45fa9e1d3..94c1f9c2d 100644 --- a/themes/delphi/layouts/blog/list.html +++ b/themes/delphi/layouts/blog/list.html @@ -10,8 +10,8 @@

{{ .Description }}

{{ .Date.Format "Jan _2" }}
- - {{ .Title }} + + {{ .Title }}
diff --git a/themes/delphi/layouts/blog/single.html b/themes/delphi/layouts/blog/single.html index 799684124..e9d96cf99 100644 --- a/themes/delphi/layouts/blog/single.html +++ b/themes/delphi/layouts/blog/single.html @@ -16,8 +16,13 @@

{{ .Title }}

{{ $img := $images.GetMatch (path.Join .Params.heroImage) }} - - {{ .Title }} + + {{ .Title }}
{{ end }} diff --git a/themes/delphi/layouts/partials/blog/card.html b/themes/delphi/layouts/partials/blog/card.html index 820d0b6e6..7c85e0b2c 100644 --- a/themes/delphi/layouts/partials/blog/card.html +++ b/themes/delphi/layouts/partials/blog/card.html @@ -3,8 +3,8 @@ {{ $img := ($.GetPage "/blog/images").Resources.GetMatch .Params.heroImageThumb }} - - {{ .Title }} + + {{ .Title }}
diff --git a/themes/delphi/layouts/partials/epivis/find-file.html b/themes/delphi/layouts/partials/epivis/find-file.html new file mode 100644 index 000000000..125472dad --- /dev/null +++ b/themes/delphi/layouts/partials/epivis/find-file.html @@ -0,0 +1,10 @@ + +{{ $pattern := . }} +{{ $matchedFile := false }} +{{ range (readDir "./static/epivis") }} + {{ $testFile := . }} + {{ with (index (findRE $pattern .Name 1) 0) }} + {{ $matchedFile = path.Join "./epivis" $testFile.Name }} + {{ end }} +{{ end }} +{{ return $matchedFile }} diff --git a/themes/delphi/layouts/partials/footer.html b/themes/delphi/layouts/partials/footer.html index 14872d345..1e7493e77 100644 --- a/themes/delphi/layouts/partials/footer.html +++ b/themes/delphi/layouts/partials/footer.html @@ -43,9 +43,12 @@
Contact
  • Website Feedback
  • +
  • + All other inquiries +
  • diff --git a/themes/delphi/layouts/partials/landing/latest-card.html b/themes/delphi/layouts/partials/landing/latest-card.html index fd1e4aaa4..eef3b7a8d 100644 --- a/themes/delphi/layouts/partials/landing/latest-card.html +++ b/themes/delphi/layouts/partials/landing/latest-card.html @@ -1,8 +1,8 @@
    - - {{ .title }} + + {{ .title }}
    diff --git a/themes/delphi/layouts/partials/landing/teampic.html b/themes/delphi/layouts/partials/landing/teampic.html index 631d64f9c..b8b8061dc 100644 --- a/themes/delphi/layouts/partials/landing/teampic.html +++ b/themes/delphi/layouts/partials/landing/teampic.html @@ -2,8 +2,8 @@ {{ $team := where (partial "get-persons.html" .) ".team" "intersect" (slice .team) }} {{ range first 8 $team }} - - {{ .name }} + + {{ .name }} {{ end }}
    diff --git a/themes/delphi/layouts/shortcodes/team.html b/themes/delphi/layouts/shortcodes/team.html index 8d1464ffc..bcdd28ab5 100644 --- a/themes/delphi/layouts/shortcodes/team.html +++ b/themes/delphi/layouts/shortcodes/team.html @@ -8,15 +8,20 @@ {{ if isset . "link" }} - - {{ .name }} + + {{ .name }} {{ .name | safeHTML }} {{ else }} - - {{ .name }} + + {{ .name }}
    {{ .name | safeHTML }}