Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ Imports:
magrittr (>= 2.0.3),
rlang (>= 1.1.0),
shiny (>= 1.14.0),
systemfonts (>= 1.3.1),
ROvis.utils
Suggests:
covr (>= 3.6.4),
Expand Down
1 change: 0 additions & 1 deletion NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,3 @@ importFrom(shiny,
HTML,
tags
)
importFrom(systemfonts,system_fonts)
1 change: 0 additions & 1 deletion R/ROvis.table-package.R
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#' @importFrom cli cli_abort
#' @importFrom dplyr filter
#' @importFrom magrittr %>%
#' @importFrom systemfonts system_fonts
#' @importFrom DT datatable
#' @importFrom gt gt
#' @importFrom ROvis.utils ro_check_if_font_available
Expand Down
8 changes: 5 additions & 3 deletions R/ro_dt_theme.R
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
#' @importFrom shiny tags HTML
#' @importFrom ROvis.utils ro_check_if_font_available
#'
#' @param base_family Character. Font family to use for table text. Default is "Arial".
#' @param base_family Character. Font family to use for table text. Default is
#' "RijksoverheidSansWebText". If not installed, Verdana is used, then Arial,
#' then the first font found on your device, whichever is installed first.
#' @param sorting Logical. If \code{TRUE}, column headers are left-aligned;
#' if \code{FALSE}, right-aligned. Default is \code{FALSE}.
#'
Expand All @@ -19,7 +21,7 @@
#' @examples
#' if (interactive()) {
#' ui <- fluidPage(
#' ro_dt_theme(base_family = "Arial", sorting = FALSE),
#' ro_dt_theme(sorting = FALSE),
#' DTOutput("mytable")
#' )
#' server <- function(input, output, session) {
Expand All @@ -33,7 +35,7 @@ ro_dt_theme <- function(
sorting = FALSE
) {
check_string(base_family)
ro_check_if_font_available(base_family = base_family)
base_family <- ro_check_if_font_available(target_font_family = base_family)

if (sorting) {
header_align <- "left"
Expand Down
19 changes: 11 additions & 8 deletions R/ro_gt_theme.R
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@
#' @importFrom gt gt tab_options cols_align sub_missing opt_row_striping
#' tab_style cells_title cell_text cells_column_labels cells_row_groups
#' cells_body everything where px
#' @importFrom systemfonts system_fonts
#' @importFrom ROvis.utils ro_check_if_font_available
#' @importFrom ROvis.utils ro_color
#'
#' @param df Dataframe.
#' @param ROfont Default is FALSE, will change to TRUE for next major release (1.0.0).
#' If Rijksoverheid font is not available on your device, Verdana will be used.
#' If Rijksoverheid font is not available on your device, Verdana is used, then Arial,
#' then the first font found on your device, whichever is installed first.
#' @param ... For internal use. Leave empty.
#' @family gt
#' @return gt table object.
Expand All @@ -27,13 +28,15 @@ ro_gt_theme <- function(df, ROfont = FALSE, ...) {
check_data_frame(df)
check_bool(ROfont)

if (
ROfont &&
"RijksoverheidSansWebText" %in% system_fonts()$family
) {
font <- "RijksoverheidSansWebText"
# RO font usage is opt-in until it becomes the default in the next major
# release (1.0.0), so don't surface RO-font-specific messaging until then.
if (ROfont) {
font <- ro_check_if_font_available("RijksoverheidSansWebText")
} else {
font <- "Verdana"
font <- suppressMessages(ro_check_if_font_available("RijksoverheidSansWebText"))
if (identical(font, "RijksoverheidSansWebText")) {
font <- "Verdana"
}
}

gt(df, ...) |>
Expand Down
6 changes: 4 additions & 2 deletions man/ro_dt_theme.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion man/ro_gt_theme.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions tests/testthat/test-ro_dt_theme.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
test_that("ro_dt_theme applies the font resolved by ro_check_if_font_available", {
local_mocked_bindings(
ro_check_if_font_available = function(target_font_family) "Verdana"
)
css <- ro_dt_theme()$children[[1]]$children[[1]]
expect_true(grepl("Verdana", css, fixed = TRUE))
})

test_that("ro_dt_theme errors for an unavailable custom font", {
expect_error(
ro_dt_theme(base_family = "Not an installed font"),
"Can't find"
)
})
29 changes: 29 additions & 0 deletions tests/testthat/test-ro_gt_theme.R
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,32 @@ gt_object_test <- mtcars |>
test_that("output is a gt object", {
expect_identical(class(gt_object_test)[1], "gt_tbl")
})

test_that("ro_gt_theme stays quiet about font resolution by default", {
local_mocked_bindings(
ro_check_if_font_available = function(base_family) {
message("mocked font message")
"Verdana"
}
)
expect_no_message(mtcars |> ro_gt_theme())
})

test_that("ro_gt_theme surfaces the font message when ROfont = TRUE", {
local_mocked_bindings(
ro_check_if_font_available = function(base_family) {
message("mocked font message")
"Verdana"
}
)
expect_message(mtcars |> ro_gt_theme(ROfont = TRUE), "mocked font message")
})

test_that("ro_gt_theme does not use the RO font when ROfont = FALSE, even if installed", {
local_mocked_bindings(
ro_check_if_font_available = function(base_family) "RijksoverheidSansWebText"
)
html <- mtcars |> ro_gt_theme() |> gt::as_raw_html()
expect_true(grepl("Verdana", html, fixed = TRUE))
expect_false(grepl("RijksoverheidSansWebText", html, fixed = TRUE))
})