diff --git a/CITATION.cff b/CITATION.cff index 9c27438d..aec07b9e 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -8,7 +8,7 @@ message: 'To cite package "FreesearchR" in publications use:' type: software license: AGPL-3.0-or-later title: 'FreesearchR: Easy data analysis for clinicians' -version: 26.2.2 +version: 26.3.1 doi: 10.5281/zenodo.14527429 identifiers: - type: url diff --git a/DESCRIPTION b/DESCRIPTION index 765ddf30..1a810014 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: FreesearchR Title: Easy data analysis for clinicians -Version: 26.2.2 +Version: 26.3.1 Authors@R: c( person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7559-1154")), diff --git a/NEWS.md b/NEWS.md index 7dc9856c..d112d044 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +# FreesearchR 26.3.1 + +*FIX* Include font files for static loading without dependency on Google. + +*NEW* Updated text strings to better reflect environment data availability. + +New strings translated. + # FreesearchR 26.2.2 *FIX* Minor addition to the previous update with correct activation of the missingness evaluation button. diff --git a/R/app_version.R b/R/app_version.R index 2e388696..1a1ca529 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'26.2.2' +app_version <- function()'26.3.1' diff --git a/R/hosted_version.R b/R/hosted_version.R index ac3e35b9..83b5883c 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v26.2.2-260223' +hosted_version <- function()'v26.3.1-260228' diff --git a/R/sysdata.rda b/R/sysdata.rda index 21d41608..1ea59202 100644 Binary files a/R/sysdata.rda and b/R/sysdata.rda differ diff --git a/R/theme.R b/R/theme.R index 7f812de2..3251f8c5 100644 --- a/R/theme.R +++ b/R/theme.R @@ -9,9 +9,21 @@ custom_theme <- function(..., primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - base_font = bslib::font_google("Montserrat"), - heading_font = bslib::font_google("Public Sans", wght = "700"), - code_font = bslib::font_google("Open Sans"), + # base_font = bslib::font_google("Montserrat"), + base_font = bslib::font_face( + family = "Montserrat", + src = "url('/fonts/Montserrat-Regular.ttf') format('truetype')" + ), + # heading_font = bslib::font_google("Public Sans", wght = "700"), + heading_font = bslib::font_face( + family = "PublicSans", + src = "url('/fonts/PublicSans-Bold.ttf') format('truetype')" + ), + # code_font = bslib::font_google("Open Sans"), + code_font = bslib::font_face( + family = "OpenSans", + src = "url('/fonts/OpenSans-Regular.ttf') format('truetype')" + ), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"), diff --git a/R/ui_elements.R b/R/ui_elements.R index 3898cf41..0aea99e8 100644 --- a/R/ui_elements.R +++ b/R/ui_elements.R @@ -68,11 +68,12 @@ ui_elements <- function(selection) { ), # shiny::tags$script('document.querySelector("#source div").style.width = "100%"'), ## Update this to change depending on run locally or hosted - shiny::helpText( - i18n$t( - "Upload a file, get data directly from REDCap or use local or sample data." - ) - ), + shiny::uiOutput(outputId = "data_sample_text"), + # shiny::helpText( + # i18n$t( + # "Upload a file, get data directly from REDCap or use local or sample data." + # ) + # ), shiny::br(), shiny::br(), shiny::conditionalPanel( diff --git a/SESSION.md b/SESSION.md index a0adec99..ccdef23d 100644 --- a/SESSION.md +++ b/SESSION.md @@ -11,11 +11,11 @@ |collate |en_US.UTF-8 | |ctype |en_US.UTF-8 | |tz |Europe/Copenhagen | -|date |2026-02-23 | +|date |2026-02-28 | |rstudio |2026.01.1+403 Apple Blossom (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |26.2.2.260223 | +|FreesearchR |26.3.1.260228 | -------------------------------------------------------------------------------- @@ -26,8 +26,6 @@ |apexcharter |0.4.5 |2026-01-07 |CRAN (R 4.5.2) | |askpass |1.2.1 |2024-10-04 |CRAN (R 4.5.0) | |assertthat |0.2.1 |2019-03-21 |CRAN (R 4.5.0) | -|attachment |0.4.5 |2025-03-14 |CRAN (R 4.5.0) | -|attempt |0.3.1 |2020-05-03 |CRAN (R 4.5.0) | |backports |1.5.0 |2024-05-23 |CRAN (R 4.5.0) | |base64enc |0.1-6 |2026-02-02 |CRAN (R 4.5.2) | |bayestestR |0.17.0 |2025-08-29 |CRAN (R 4.5.0) | @@ -46,7 +44,6 @@ |cardx |0.3.2 |2026-02-05 |CRAN (R 4.5.2) | |caTools |1.18.3 |2024-09-04 |CRAN (R 4.5.0) | |cellranger |1.1.0 |2016-07-27 |CRAN (R 4.5.0) | -|cffr |1.2.1 |2026-01-12 |CRAN (R 4.5.2) | |checkmate |2.3.4 |2026-02-03 |CRAN (R 4.5.2) | |class |7.3-23 |2025-01-01 |CRAN (R 4.5.2) | |classInt |0.4-11 |2025-01-08 |CRAN (R 4.5.0) | @@ -56,6 +53,7 @@ |colorspace |2.1-2 |2025-09-22 |CRAN (R 4.5.0) | |commonmark |2.0.0 |2025-07-07 |CRAN (R 4.5.0) | |crayon |1.5.3 |2024-06-20 |CRAN (R 4.5.0) | +|crul |1.6.0 |NA |NA | |curl |7.0.0 |2025-08-19 |CRAN (R 4.5.0) | |data.table |1.18.2.1 |2026-01-27 |CRAN (R 4.5.2) | |datamods |1.5.3 |2024-10-02 |CRAN (R 4.5.0) | @@ -65,7 +63,6 @@ |devtools |2.4.6 |2025-10-03 |CRAN (R 4.5.0) | |DHARMa |0.4.7 |2024-10-18 |CRAN (R 4.5.0) | |digest |0.6.39 |2025-11-19 |CRAN (R 4.5.2) | -|dockerfiler |0.2.5 |2025-05-07 |CRAN (R 4.5.0) | |doParallel |1.0.17 |2022-02-07 |CRAN (R 4.5.0) | |dplyr |1.2.0 |2026-02-03 |CRAN (R 4.5.2) | |DT |0.34.0 |2025-09-02 |CRAN (R 4.5.0) | @@ -88,10 +85,11 @@ |foreach |1.5.2 |2022-02-02 |CRAN (R 4.5.0) | |foreign |0.8-90 |2025-03-31 |CRAN (R 4.5.2) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.5.0) | -|FreesearchR |26.2.2 |NA |NA | +|FreesearchR |26.3.1 |NA |NA | |fs |1.6.6 |2025-04-12 |CRAN (R 4.5.0) | |gdtools |0.5.0 |2026-02-09 |CRAN (R 4.5.2) | |generics |0.1.4 |2025-05-09 |CRAN (R 4.5.0) | +|gfonts |0.2.0 |NA |NA | |ggalluvial |0.12.5 |2023-02-22 |CRAN (R 4.5.0) | |ggcorrplot |0.1.4.1 |2023-09-05 |CRAN (R 4.5.0) | |ggforce |0.5.0 |2025-06-18 |CRAN (R 4.5.0) | @@ -110,24 +108,23 @@ |htmlTable |2.4.3 |2024-07-21 |CRAN (R 4.5.0) | |htmltools |0.5.9 |2025-12-04 |CRAN (R 4.5.2) | |htmlwidgets |1.6.4 |2023-12-06 |CRAN (R 4.5.0) | +|httpcode |0.3.0 |NA |NA | |httpuv |1.6.16 |2025-04-16 |CRAN (R 4.5.0) | |IDEAFilter |0.2.1 |2025-07-29 |CRAN (R 4.5.0) | |insight |1.4.6 |2026-02-04 |CRAN (R 4.5.2) | |iterators |1.0.14 |2022-02-05 |CRAN (R 4.5.0) | |jquerylib |0.1.4 |2021-04-26 |CRAN (R 4.5.0) | |jsonlite |2.0.0 |2025-03-27 |CRAN (R 4.5.0) | -|jsonvalidate |1.5.0 |2025-02-07 |CRAN (R 4.5.0) | |KernSmooth |2.23-26 |2025-01-01 |CRAN (R 4.5.2) | |keyring |1.4.1 |2025-06-15 |CRAN (R 4.5.0) | |knitr |1.51 |2025-12-20 |CRAN (R 4.5.2) | +|labeling |0.4.3 |2023-08-29 |CRAN (R 4.5.0) | |later |1.4.6 |2026-02-13 |CRAN (R 4.5.2) | |lattice |0.22-7 |2025-04-02 |CRAN (R 4.5.2) | |lifecycle |1.0.5 |2026-01-08 |CRAN (R 4.5.2) | -|litedown |0.9 |2025-12-18 |CRAN (R 4.5.2) | |lme4 |1.1-38 |2025-12-02 |CRAN (R 4.5.2) | |lubridate |1.9.5 |2026-02-04 |CRAN (R 4.5.2) | |magrittr |2.0.4 |2025-09-12 |CRAN (R 4.5.0) | -|markdown |2.0 |2025-03-23 |CRAN (R 4.5.0) | |MASS |7.3-65 |2025-02-28 |CRAN (R 4.5.0) | |Matrix |1.7-4 |2025-08-28 |CRAN (R 4.5.2) | |memoise |2.0.1 |2021-11-26 |CRAN (R 4.5.0) | @@ -167,7 +164,6 @@ |R6 |2.6.1 |2025-02-15 |CRAN (R 4.5.0) | |ragg |1.5.0 |2025-09-02 |CRAN (R 4.5.0) | |rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.5.0) | -|rappdirs |0.3.4 |2026-01-17 |CRAN (R 4.5.2) | |rbibutils |2.4.1 |2026-01-21 |CRAN (R 4.5.2) | |RColorBrewer |1.1-3 |2022-04-03 |CRAN (R 4.5.0) | |Rcpp |1.1.1 |2026-01-10 |CRAN (R 4.5.2) | @@ -200,7 +196,6 @@ |sessioninfo |1.2.3 |2025-02-05 |CRAN (R 4.5.0) | |shiny |1.13.0 |2026-02-20 |CRAN (R 4.5.2) | |shiny.i18n |0.3.0 |2023-01-16 |CRAN (R 4.5.0) | -|shiny2docker |0.0.3 |2025-06-28 |CRAN (R 4.5.0) | |shinybusy |0.3.3 |2024-03-09 |CRAN (R 4.5.0) | |shinyjs |2.1.1 |2026-01-15 |CRAN (R 4.5.2) | |shinyTime |1.0.3 |2022-08-19 |CRAN (R 4.5.0) | @@ -218,12 +213,13 @@ |tidyselect |1.2.1 |2024-03-11 |CRAN (R 4.5.0) | |timechange |0.4.0 |2026-01-29 |CRAN (R 4.5.2) | |toastui |0.4.0 |2025-04-03 |CRAN (R 4.5.0) | +|triebeard |0.4.1 |NA |NA | |tweenr |2.0.3 |2024-02-26 |CRAN (R 4.5.0) | |twosamples |2.0.1 |2023-06-23 |CRAN (R 4.5.0) | |tzdb |0.5.0 |2025-03-15 |CRAN (R 4.5.0) | +|urltools |1.7.3.1 |NA |NA | |usethis |3.2.1 |2025-09-06 |CRAN (R 4.5.0) | |uuid |1.2-2 |2026-01-23 |CRAN (R 4.5.2) | -|V8 |8.0.1 |2025-10-10 |CRAN (R 4.5.0) | |vctrs |0.7.1 |2026-01-23 |CRAN (R 4.5.2) | |viridis |0.6.5 |2024-01-29 |CRAN (R 4.5.0) | |viridisLite |0.4.3 |2026-02-04 |CRAN (R 4.5.2) | @@ -234,5 +230,4 @@ |xml2 |1.5.2 |2026-01-17 |CRAN (R 4.5.2) | |xtable |1.8-4 |2019-04-21 |CRAN (R 4.5.0) | |yaml |2.3.12 |2025-12-10 |CRAN (R 4.5.2) | -|yesno |0.1.3 |2024-07-26 |CRAN (R 4.5.0) | |zip |2.3.3 |2025-05-13 |CRAN (R 4.5.0) | diff --git a/app_docker/app.R b/app_docker/app.R index fcc50395..e0949ec5 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmpp0JgLn/file73e17b926733.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpDLoQCo/file14ced11821c07.R ######## i18n_path <- here::here("translations") @@ -72,7 +72,7 @@ if (!"global_freesearchR" %in% ls(name = globalenv())) { #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'26.2.2' +app_version <- function()'26.3.1' ######## @@ -4524,7 +4524,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.2.2-260223' +hosted_version <- function()'v26.3.1-260228' ######## @@ -10469,9 +10469,21 @@ custom_theme <- function(..., primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - base_font = bslib::font_google("Montserrat"), - heading_font = bslib::font_google("Public Sans", wght = "700"), - code_font = bslib::font_google("Open Sans"), + # base_font = bslib::font_google("Montserrat"), + base_font = bslib::font_face( + family = "Montserrat", + src = "url('/fonts/Montserrat-Regular.ttf') format('truetype')" + ), + # heading_font = bslib::font_google("Public Sans", wght = "700"), + heading_font = bslib::font_face( + family = "PublicSans", + src = "url('/fonts/PublicSans-Bold.ttf') format('truetype')" + ), + # code_font = bslib::font_google("Open Sans"), + code_font = bslib::font_face( + family = "OpenSans", + src = "url('/fonts/OpenSans-Regular.ttf') format('truetype')" + ), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"), @@ -10664,11 +10676,12 @@ ui_elements <- function(selection) { ), # shiny::tags$script('document.querySelector("#source div").style.width = "100%"'), ## Update this to change depending on run locally or hosted - shiny::helpText( - i18n$t( - "Upload a file, get data directly from REDCap or use local or sample data." - ) - ), + shiny::uiOutput(outputId = "data_sample_text"), + # shiny::helpText( + # i18n$t( + # "Upload a file, get data directly from REDCap or use local or sample data." + # ) + # ), shiny::br(), shiny::br(), shiny::conditionalPanel( @@ -13496,16 +13509,6 @@ ui <- bslib::page_fixed( #### Current file: /Users/au301842/FreesearchR/app/server.R ######## -data("mtcars") -data("iris") - -# trial <- gtsummary::trial -# starwars <- dplyr::starwars -# -# mtcars_na <- rbind(mtcars,NA,NA) - -# thematic::thematic_shiny() - load_data <- function() { Sys.sleep(1) shinyjs::hide("loading_page") @@ -13544,7 +13547,6 @@ server <- function(input, output, session) { # session$setCurrentTheme(bs_theme_update(theme = custom_theme(version = 5, bg = "#000",fg="#fff"))) # }) - ############################################################################## ######### ######### Setting reactive values @@ -13637,16 +13639,33 @@ server <- function(input, output, session) { # ), # selected = "file" # ) + + if (isTRUE(global_freesearchR$include_globalenv)) { + env_label <- i18n$t("Local or sample data") + output$data_sample_text <- shiny::renderText(shiny::helpText( + i18n$t( + "Upload a file, get data directly from REDCap or use local or sample data." + ) + )) + } else { + env_label <- i18n$t("Sample data") + output$data_sample_text <- shiny::renderUI(shiny::helpText( + i18n$t( + "Upload a file, get data directly from REDCap or use sample data." + ) + )) + } + shiny::updateSelectInput(inputId = "source", choices = setNames(c("file", "redcap", "env"), c( i18n$t("File upload"), i18n$t("REDCap server export"), - i18n$t("Local or sample data") + env_label + # i18n$t("Local or sample data") ))) # output$intro_text <- renderUI(includeHTML(i18n$t("www/intro.html"))) }) - shiny::observeEvent(input$language_select, { bslib::accordion_panel_update(id = "acc_chars", title = i18n$t("Settings"), @@ -13659,12 +13678,10 @@ server <- function(input, output, session) { target = "acc_pan_mis") }) - output$redcap_warning <- shiny::renderUI({ rv_alerts$redcap_alert }) - ############################################################################## ######### ######### Data import section @@ -13798,7 +13815,6 @@ server <- function(input, output, session) { rv$data_original <- temp_data |> default_parsing() } - }, ignoreNULL = FALSE ) @@ -13861,14 +13877,14 @@ server <- function(input, output, session) { shiny::observeEvent(list(rv$data_original, rv$data), { if (is.null(rv$data_original) | NROW(rv$data_original) == 0 | - is.null(rv$data) | !any(is_splittable(rv$data))) { + is.null(rv$data) | + !any(is_splittable(rv$data))) { shiny::updateActionButton(inputId = "modal_string", disabled = TRUE) } else if (!is.null(rv$data) && any(is_splittable(rv$data))) { shiny::updateActionButton(inputId = "modal_string", disabled = FALSE) } }) - ############################################################################## ######### ######### Data modification section @@ -13893,7 +13909,6 @@ server <- function(input, output, session) { } }, ignoreNULL = TRUE) - shiny::observeEvent(input$data_reset, { shinyWidgets::ask_confirmation( cancelOnDismiss = TRUE, @@ -14216,7 +14231,6 @@ server <- function(input, output, session) { rv$list$table1 <- NULL }) - ############################################################################## ######### ######### Code export @@ -14280,19 +14294,18 @@ server <- function(input, output, session) { )) }) - ## Just a note to self ## This is a very rewarding couple of lines marking new insights to dynamically rendering code shiny::observe({ shiny::req(rv$regression) - rv$regression()$regression$models |> purrr::imap(\(.x, .i) { - output[[paste0("code_", tolower(.i))]] <- shiny::renderUI({ - prismCodeBlock(paste0(paste("#", .i, "regression model\n"), .x$code_table)) + rv$regression()$regression$models |> + purrr::imap(\(.x, .i) { + output[[paste0("code_", tolower(.i))]] <- shiny::renderUI({ + prismCodeBlock(paste0(paste("#", .i, "regression model\n"), .x$code_table)) + }) }) - }) }) - ############################################################################## ######### ######### Data analyses Inputs @@ -14305,7 +14318,8 @@ server <- function(input, output, session) { selected = "none", label = i18n$t("Select variable to stratify baseline"), data = shiny::reactive(rv$data_filtered)(), - col_subset = c("none", names(rv$data_filtered)[unlist(lapply(rv$data_filtered, data_type)) %in% c("dichotomous", "categorical", "ordinal")]) + col_subset = c("none", names(rv$data_filtered)[unlist(lapply(rv$data_filtered, data_type)) %in% + c("dichotomous", "categorical", "ordinal")]) ) }) @@ -14324,7 +14338,6 @@ server <- function(input, output, session) { # ) # }) - output$detail_level <- shiny::renderUI({ shiny::radioButtons( inputId = "detail_level", @@ -14336,14 +14349,12 @@ server <- function(input, output, session) { ) }) - ############################################################################## ######### ######### Descriptive evaluations ######### ############################################################################## - output$data_info_nochar <- shiny::renderUI({ shiny::req(rv$list$data) data_description(rv$list$data, @@ -14362,14 +14373,12 @@ server <- function(input, output, session) { # # }) - shiny::observeEvent(list(input$act_eval), { shiny::req(input$strat_var) # shiny::req(input$baseline_theme) shiny::req(input$detail_level) shiny::req(rv$list$data) - parameters <- list( by.var = input$strat_var, add.p = input$add_p == "yes", @@ -14410,7 +14419,6 @@ server <- function(input, output, session) { # } # ) - rv$code$table1 <- glue::glue("FreesearchR::create_baseline(df,{list2str(parameters)})") }) @@ -14451,12 +14459,9 @@ server <- function(input, output, session) { ## Missingness evaluation - rv$missings <- data_missings_server(id = "missingness", data = shiny::reactive(rv$data_filtered)) - - # shiny::observe({ # req(rv$missings()) # browser() @@ -14465,7 +14470,6 @@ server <- function(input, output, session) { # mcar_validate(data=rv$missings()[["_data"]],outcome = input$missings_var) # }) - ############################################################################## ######### ######### Data visuals diff --git a/app_docker/translations/translation_da.csv b/app_docker/translations/translation_da.csv index cf5fc05c..fef64b5f 100644 --- a/app_docker/translations/translation_da.csv +++ b/app_docker/translations/translation_da.csv @@ -314,16 +314,17 @@ "The app contains a selelct number of features and will guide you through key analyses.","Appen indeholder udvalgte funktioner, og guider dig gennem de vigtigste analyser." "Sort by Levels","Sorter efter niveauer" "Reorder factor levels","Omarranger niveauer" -"Modify factor levels","Modify factor levels" -"Reorder or rename the levels of factor/categorical variables.","Reorder or rename the levels of factor/categorical variables." -"Maximum number of observations:","Maximum number of observations:" -"setting to 0 includes all","setting to 0 includes all" -"Select a dataset from your environment or sample dataset from a package.","Select a dataset from your environment or sample dataset from a package." -"Select a sample dataset from a package.","Select a sample dataset from a package." -"Data ready to be imported!","Data ready to be imported!" -"Data has %s obs. of %s variables.","Data has %s obs. of %s variables." +"Modify factor levels","Ændr kategoriske niveauer" +"Reorder or rename the levels of factor/categorical variables.","Ændr navn eller rækkefølge på kategorisk variabel." +"Maximum number of observations:","Maximale antal observationer:" +"setting to 0 includes all","angiv 0 for at inkludere alle" +"Select a dataset from your environment or sample dataset from a package.","Vælg et datasæt fra din kørende session eller vælg træningsdata." +"Select a sample dataset from a package.","Vælg et træningsdatasæt." +"Data ready to be imported!","Data er klar til at blive importeret!" +"Data has %s obs. of %s variables.","Data har %s obs. på %s variabler." "Data successfully imported!","Data successfully imported!" -"Click to see data","Click to see data" -"No data present.","No data present." -"You have provided a complete dataset with no missing values.","You have provided a complete dataset with no missing values." -"Start by loading data.","Start by loading data." +"Click to see data","Klik for at se data" +"No data present.","Ingen data tilstede." +"You have provided a complete dataset with no missing values.","Data er uden manglende observationer." +"Start by loading data.","Start med at vælge data." +"Sample data","Træningsdata" diff --git a/app_docker/translations/translation_sw.csv b/app_docker/translations/translation_sw.csv index f17394c2..300390ff 100644 --- a/app_docker/translations/translation_sw.csv +++ b/app_docker/translations/translation_sw.csv @@ -327,3 +327,4 @@ "No data present.","No data present." "You have provided a complete dataset with no missing values.","You have provided a complete dataset with no missing values." "Start by loading data.","Start by loading data." +"Sample data","Sample data" diff --git a/app_docker/www/fonts/Montserrat-Regular.ttf b/app_docker/www/fonts/Montserrat-Regular.ttf new file mode 100755 index 00000000..895e220a Binary files /dev/null and b/app_docker/www/fonts/Montserrat-Regular.ttf differ diff --git a/app_docker/www/fonts/OpenSans-Regular.ttf b/app_docker/www/fonts/OpenSans-Regular.ttf new file mode 100755 index 00000000..134d225f Binary files /dev/null and b/app_docker/www/fonts/OpenSans-Regular.ttf differ diff --git a/app_docker/www/fonts/PublicSans-Bold.ttf b/app_docker/www/fonts/PublicSans-Bold.ttf new file mode 100755 index 00000000..7b6182c2 Binary files /dev/null and b/app_docker/www/fonts/PublicSans-Bold.ttf differ diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index b72cf92c..101f20a5 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmpp0JgLn/file73e17f71b1a4.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpDLoQCo/file14ced66223522.R ######## i18n_path <- system.file("translations", package = "FreesearchR") @@ -72,7 +72,7 @@ if (!"global_freesearchR" %in% ls(name = globalenv())) { #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'26.2.2' +app_version <- function()'26.3.1' ######## @@ -4524,7 +4524,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.2.2-260223' +hosted_version <- function()'v26.3.1-260228' ######## @@ -10469,9 +10469,21 @@ custom_theme <- function(..., primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - base_font = bslib::font_google("Montserrat"), - heading_font = bslib::font_google("Public Sans", wght = "700"), - code_font = bslib::font_google("Open Sans"), + # base_font = bslib::font_google("Montserrat"), + base_font = bslib::font_face( + family = "Montserrat", + src = "url('/fonts/Montserrat-Regular.ttf') format('truetype')" + ), + # heading_font = bslib::font_google("Public Sans", wght = "700"), + heading_font = bslib::font_face( + family = "PublicSans", + src = "url('/fonts/PublicSans-Bold.ttf') format('truetype')" + ), + # code_font = bslib::font_google("Open Sans"), + code_font = bslib::font_face( + family = "OpenSans", + src = "url('/fonts/OpenSans-Regular.ttf') format('truetype')" + ), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"), @@ -10664,11 +10676,12 @@ ui_elements <- function(selection) { ), # shiny::tags$script('document.querySelector("#source div").style.width = "100%"'), ## Update this to change depending on run locally or hosted - shiny::helpText( - i18n$t( - "Upload a file, get data directly from REDCap or use local or sample data." - ) - ), + shiny::uiOutput(outputId = "data_sample_text"), + # shiny::helpText( + # i18n$t( + # "Upload a file, get data directly from REDCap or use local or sample data." + # ) + # ), shiny::br(), shiny::br(), shiny::conditionalPanel( @@ -13496,16 +13509,6 @@ ui <- bslib::page_fixed( #### Current file: /Users/au301842/FreesearchR/app/server.R ######## -data("mtcars") -data("iris") - -# trial <- gtsummary::trial -# starwars <- dplyr::starwars -# -# mtcars_na <- rbind(mtcars,NA,NA) - -# thematic::thematic_shiny() - load_data <- function() { Sys.sleep(1) shinyjs::hide("loading_page") @@ -13544,7 +13547,6 @@ server <- function(input, output, session) { # session$setCurrentTheme(bs_theme_update(theme = custom_theme(version = 5, bg = "#000",fg="#fff"))) # }) - ############################################################################## ######### ######### Setting reactive values @@ -13637,16 +13639,33 @@ server <- function(input, output, session) { # ), # selected = "file" # ) + + if (isTRUE(global_freesearchR$include_globalenv)) { + env_label <- i18n$t("Local or sample data") + output$data_sample_text <- shiny::renderText(shiny::helpText( + i18n$t( + "Upload a file, get data directly from REDCap or use local or sample data." + ) + )) + } else { + env_label <- i18n$t("Sample data") + output$data_sample_text <- shiny::renderUI(shiny::helpText( + i18n$t( + "Upload a file, get data directly from REDCap or use sample data." + ) + )) + } + shiny::updateSelectInput(inputId = "source", choices = setNames(c("file", "redcap", "env"), c( i18n$t("File upload"), i18n$t("REDCap server export"), - i18n$t("Local or sample data") + env_label + # i18n$t("Local or sample data") ))) # output$intro_text <- renderUI(includeHTML(i18n$t("www/intro.html"))) }) - shiny::observeEvent(input$language_select, { bslib::accordion_panel_update(id = "acc_chars", title = i18n$t("Settings"), @@ -13659,12 +13678,10 @@ server <- function(input, output, session) { target = "acc_pan_mis") }) - output$redcap_warning <- shiny::renderUI({ rv_alerts$redcap_alert }) - ############################################################################## ######### ######### Data import section @@ -13798,7 +13815,6 @@ server <- function(input, output, session) { rv$data_original <- temp_data |> default_parsing() } - }, ignoreNULL = FALSE ) @@ -13861,14 +13877,14 @@ server <- function(input, output, session) { shiny::observeEvent(list(rv$data_original, rv$data), { if (is.null(rv$data_original) | NROW(rv$data_original) == 0 | - is.null(rv$data) | !any(is_splittable(rv$data))) { + is.null(rv$data) | + !any(is_splittable(rv$data))) { shiny::updateActionButton(inputId = "modal_string", disabled = TRUE) } else if (!is.null(rv$data) && any(is_splittable(rv$data))) { shiny::updateActionButton(inputId = "modal_string", disabled = FALSE) } }) - ############################################################################## ######### ######### Data modification section @@ -13893,7 +13909,6 @@ server <- function(input, output, session) { } }, ignoreNULL = TRUE) - shiny::observeEvent(input$data_reset, { shinyWidgets::ask_confirmation( cancelOnDismiss = TRUE, @@ -14216,7 +14231,6 @@ server <- function(input, output, session) { rv$list$table1 <- NULL }) - ############################################################################## ######### ######### Code export @@ -14280,19 +14294,18 @@ server <- function(input, output, session) { )) }) - ## Just a note to self ## This is a very rewarding couple of lines marking new insights to dynamically rendering code shiny::observe({ shiny::req(rv$regression) - rv$regression()$regression$models |> purrr::imap(\(.x, .i) { - output[[paste0("code_", tolower(.i))]] <- shiny::renderUI({ - prismCodeBlock(paste0(paste("#", .i, "regression model\n"), .x$code_table)) + rv$regression()$regression$models |> + purrr::imap(\(.x, .i) { + output[[paste0("code_", tolower(.i))]] <- shiny::renderUI({ + prismCodeBlock(paste0(paste("#", .i, "regression model\n"), .x$code_table)) + }) }) - }) }) - ############################################################################## ######### ######### Data analyses Inputs @@ -14305,7 +14318,8 @@ server <- function(input, output, session) { selected = "none", label = i18n$t("Select variable to stratify baseline"), data = shiny::reactive(rv$data_filtered)(), - col_subset = c("none", names(rv$data_filtered)[unlist(lapply(rv$data_filtered, data_type)) %in% c("dichotomous", "categorical", "ordinal")]) + col_subset = c("none", names(rv$data_filtered)[unlist(lapply(rv$data_filtered, data_type)) %in% + c("dichotomous", "categorical", "ordinal")]) ) }) @@ -14324,7 +14338,6 @@ server <- function(input, output, session) { # ) # }) - output$detail_level <- shiny::renderUI({ shiny::radioButtons( inputId = "detail_level", @@ -14336,14 +14349,12 @@ server <- function(input, output, session) { ) }) - ############################################################################## ######### ######### Descriptive evaluations ######### ############################################################################## - output$data_info_nochar <- shiny::renderUI({ shiny::req(rv$list$data) data_description(rv$list$data, @@ -14362,14 +14373,12 @@ server <- function(input, output, session) { # # }) - shiny::observeEvent(list(input$act_eval), { shiny::req(input$strat_var) # shiny::req(input$baseline_theme) shiny::req(input$detail_level) shiny::req(rv$list$data) - parameters <- list( by.var = input$strat_var, add.p = input$add_p == "yes", @@ -14410,7 +14419,6 @@ server <- function(input, output, session) { # } # ) - rv$code$table1 <- glue::glue("FreesearchR::create_baseline(df,{list2str(parameters)})") }) @@ -14451,12 +14459,9 @@ server <- function(input, output, session) { ## Missingness evaluation - rv$missings <- data_missings_server(id = "missingness", data = shiny::reactive(rv$data_filtered)) - - # shiny::observe({ # req(rv$missings()) # browser() @@ -14465,7 +14470,6 @@ server <- function(input, output, session) { # mcar_validate(data=rv$missings()[["_data"]],outcome = input$missings_var) # }) - ############################################################################## ######### ######### Data visuals diff --git a/inst/apps/FreesearchR/www/fonts/Montserrat-Regular.ttf b/inst/apps/FreesearchR/www/fonts/Montserrat-Regular.ttf new file mode 100755 index 00000000..895e220a Binary files /dev/null and b/inst/apps/FreesearchR/www/fonts/Montserrat-Regular.ttf differ diff --git a/inst/apps/FreesearchR/www/fonts/OpenSans-Regular.ttf b/inst/apps/FreesearchR/www/fonts/OpenSans-Regular.ttf new file mode 100755 index 00000000..134d225f Binary files /dev/null and b/inst/apps/FreesearchR/www/fonts/OpenSans-Regular.ttf differ diff --git a/inst/apps/FreesearchR/www/fonts/PublicSans-Bold.ttf b/inst/apps/FreesearchR/www/fonts/PublicSans-Bold.ttf new file mode 100755 index 00000000..7b6182c2 Binary files /dev/null and b/inst/apps/FreesearchR/www/fonts/PublicSans-Bold.ttf differ diff --git a/inst/translations/translation_da.csv b/inst/translations/translation_da.csv index cf5fc05c..fef64b5f 100644 --- a/inst/translations/translation_da.csv +++ b/inst/translations/translation_da.csv @@ -314,16 +314,17 @@ "The app contains a selelct number of features and will guide you through key analyses.","Appen indeholder udvalgte funktioner, og guider dig gennem de vigtigste analyser." "Sort by Levels","Sorter efter niveauer" "Reorder factor levels","Omarranger niveauer" -"Modify factor levels","Modify factor levels" -"Reorder or rename the levels of factor/categorical variables.","Reorder or rename the levels of factor/categorical variables." -"Maximum number of observations:","Maximum number of observations:" -"setting to 0 includes all","setting to 0 includes all" -"Select a dataset from your environment or sample dataset from a package.","Select a dataset from your environment or sample dataset from a package." -"Select a sample dataset from a package.","Select a sample dataset from a package." -"Data ready to be imported!","Data ready to be imported!" -"Data has %s obs. of %s variables.","Data has %s obs. of %s variables." +"Modify factor levels","Ændr kategoriske niveauer" +"Reorder or rename the levels of factor/categorical variables.","Ændr navn eller rækkefølge på kategorisk variabel." +"Maximum number of observations:","Maximale antal observationer:" +"setting to 0 includes all","angiv 0 for at inkludere alle" +"Select a dataset from your environment or sample dataset from a package.","Vælg et datasæt fra din kørende session eller vælg træningsdata." +"Select a sample dataset from a package.","Vælg et træningsdatasæt." +"Data ready to be imported!","Data er klar til at blive importeret!" +"Data has %s obs. of %s variables.","Data har %s obs. på %s variabler." "Data successfully imported!","Data successfully imported!" -"Click to see data","Click to see data" -"No data present.","No data present." -"You have provided a complete dataset with no missing values.","You have provided a complete dataset with no missing values." -"Start by loading data.","Start by loading data." +"Click to see data","Klik for at se data" +"No data present.","Ingen data tilstede." +"You have provided a complete dataset with no missing values.","Data er uden manglende observationer." +"Start by loading data.","Start med at vælge data." +"Sample data","Træningsdata" diff --git a/inst/translations/translation_sw.csv b/inst/translations/translation_sw.csv index f17394c2..300390ff 100644 --- a/inst/translations/translation_sw.csv +++ b/inst/translations/translation_sw.csv @@ -327,3 +327,4 @@ "No data present.","No data present." "You have provided a complete dataset with no missing values.","You have provided a complete dataset with no missing values." "Start by loading data.","Start by loading data." +"Sample data","Sample data" diff --git a/man/custom_theme.Rd b/man/custom_theme.Rd index 94804114..0afa1b53 100644 --- a/man/custom_theme.Rd +++ b/man/custom_theme.Rd @@ -10,9 +10,12 @@ custom_theme( primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - base_font = bslib::font_google("Montserrat"), - heading_font = bslib::font_google("Public Sans", wght = "700"), - code_font = bslib::font_google("Open Sans"), + base_font = bslib::font_face(family = "Montserrat", src = + "url('/fonts/Montserrat-Regular.ttf') format('truetype')"), + heading_font = bslib::font_face(family = "PublicSans", src = + "url('/fonts/PublicSans-Bold.ttf') format('truetype')"), + code_font = bslib::font_face(family = "OpenSans", src = + "url('/fonts/OpenSans-Regular.ttf') format('truetype')"), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"),