From f0ace4fa2c063d5327f4e83708fab97c088c5967 Mon Sep 17 00:00:00 2001 From: Pascal Burkhard Date: Mon, 16 Sep 2024 14:06:24 +0200 Subject: [PATCH 1/3] feat: handle freeze state in translated renders --- R/render.R | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/R/render.R b/R/render.R index 402fa2c..a339a75 100644 --- a/R/render.R +++ b/R/render.R @@ -197,6 +197,33 @@ render_quarto_lang <- function(language_code, path, output_dir, type) { config_path <- file.path(temporary_directory, project_name, "_quarto.yml") config <- read_yaml(config_path) + freeze_folder_exists <- fs::dir_exists( + file.path(temporary_directory, project_name, "_freeze") + ) + + if (freeze_folder_exists) { + freeze_path <- fs::path(temporary_directory, project_name, "_freeze") + freeze_temp <- fs::path( + temporary_directory, + project_name, paste0("_freeze.", language_code) + ) + freeze_ls <- fs::dir_ls(freeze_path, recurse = TRUE) + + freeze_lang <- freeze_ls[grep(paste0("\\.", language_code, "$"), freeze_ls)] + freeze_dirs <- fs::path_rel(freeze_lang, start = freeze_path) + freeze_dirs <- gsub( + paste0(".", language_code), "", + freeze_dirs, fixed = TRUE + ) + + fs::dir_copy(freeze_lang, fs::path(freeze_temp, freeze_dirs)) + fs::dir_copy(fs::path(freeze_path, "site_libs"), freeze_temp) + + fs::dir_delete(freeze_path) + fs::dir_copy(freeze_temp, freeze_path) + fs::dir_delete(freeze_temp) + } + config[["lang"]] <- language_code config[[type]][["title"]] <- config[[sprintf("title-%s", language_code)]] %||% # nolint: line_length_linter From 037e9e33c9913dc10739c3be15852e4336368cb1 Mon Sep 17 00:00:00 2001 From: Pascal Burkhard Date: Wed, 18 Sep 2024 11:13:01 +0200 Subject: [PATCH 2/3] test: check that quarto freeze data is handled correctly --- tests/testthat/test-render.R | 74 ++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/tests/testthat/test-render.R b/tests/testthat/test-render.R index 972fbd9..43ea29a 100644 --- a/tests/testthat/test-render.R +++ b/tests/testthat/test-render.R @@ -729,3 +729,77 @@ test_that("render_website() works - sidebar in language profile", { expect_identical(sidebar_fr_id, "quarto-sidebar") }) + +test_that("render_website() works - quarto freeze for languages is working", { + parent_dir <- withr::local_tempdir() + project_dir <- "blop" + + quarto_multilingual_website( + parent_dir = parent_dir, + project_dir = project_dir, + further_languages = "fr", + main_language = "en", + site_url = "https://ropensci.org" + ) + + config <- brio::read_lines(file.path(parent_dir, project_dir, "_quarto.yml")) + config <- c( + config, + "", + "execute:", + " freeze: true" + ) + brio::write_lines(config, file.path(parent_dir, project_dir, "_quarto.yml")) + + index <- brio::read_lines(file.path(parent_dir, project_dir, "index.qmd")) + index <- c( + index, + "", + "```{r}", + "print('Hello World!')", + "```" + ) + brio::write_lines(index, file.path(parent_dir, project_dir, "index.qmd")) + + index_fr <- brio::read_lines( + file.path(parent_dir, project_dir, "index.fr.qmd") + ) + index_fr <- c( + index_fr, + "", + "```{r}", + "print('Bonjour le monde!')", + "```" + ) + brio::write_lines( + index_fr, file.path(parent_dir, project_dir, "index.fr.qmd") + ) + + # Render with quarto to generate the _freeze folder + withr::with_dir( + parent_dir, + quarto::quarto_render(input = project_dir, as_job = FALSE) + ) + + withr::with_dir(parent_dir, render_website(project_dir)) + + index_html <- brio::read_lines( + file.path(parent_dir, project_dir, "_site", "index.html") + ) + hello_world_present <- any(grepl( + "Hello World!", + index_html, + fixed = TRUE + )) + expect_true(hello_world_present) + + index_html_fr <- brio::read_lines( + file.path(parent_dir, project_dir, "_site", "fr", "index.html") + ) + bonjour_monde_present <- any(grepl( + "Bonjour le monde!", + index_html_fr, + fixed = TRUE + )) + expect_true(bonjour_monde_present) +}) From 3f4621f448a18997e92d52f7c8c333082cc8a83c Mon Sep 17 00:00:00 2001 From: Pascal Burkhard Date: Thu, 19 Sep 2024 22:55:29 +0200 Subject: [PATCH 3/3] refactor: apply review suggestions --- R/render.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/render.R b/R/render.R index a339a75..1e800fa 100644 --- a/R/render.R +++ b/R/render.R @@ -209,7 +209,9 @@ render_quarto_lang <- function(language_code, path, output_dir, type) { ) freeze_ls <- fs::dir_ls(freeze_path, recurse = TRUE) - freeze_lang <- freeze_ls[grep(paste0("\\.", language_code, "$"), freeze_ls)] + freeze_lang <- purrr::keep( + freeze_ls, \(x) grepl(paste0("\\.", language_code, "$"), x) + ) freeze_dirs <- fs::path_rel(freeze_lang, start = freeze_path) freeze_dirs <- gsub( paste0(".", language_code), "",