diff --git a/CITATION.cff b/CITATION.cff index aec07b9e..9c27438d 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.3.1 +version: 26.2.2 doi: 10.5281/zenodo.14527429 identifiers: - type: url diff --git a/DESCRIPTION b/DESCRIPTION index 1a810014..765ddf30 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: FreesearchR Title: Easy data analysis for clinicians -Version: 26.3.1 +Version: 26.2.2 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 d112d044..7dc9856c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,11 +1,3 @@ -# 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 1a1ca529..2e388696 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'26.3.1' +app_version <- function()'26.2.2' diff --git a/R/hosted_version.R b/R/hosted_version.R index 83b5883c..ac3e35b9 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v26.3.1-260228' +hosted_version <- function()'v26.2.2-260223' diff --git a/R/sysdata.rda b/R/sysdata.rda index 1ea59202..21d41608 100644 Binary files a/R/sysdata.rda and b/R/sysdata.rda differ diff --git a/R/theme.R b/R/theme.R index 3251f8c5..7f812de2 100644 --- a/R/theme.R +++ b/R/theme.R @@ -9,21 +9,9 @@ custom_theme <- function(..., primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - # 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')" - ), + base_font = bslib::font_google("Montserrat"), + heading_font = bslib::font_google("Public Sans", wght = "700"), + code_font = bslib::font_google("Open Sans"), 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 0aea99e8..3898cf41 100644 --- a/R/ui_elements.R +++ b/R/ui_elements.R @@ -68,12 +68,11 @@ 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::uiOutput(outputId = "data_sample_text"), - # shiny::helpText( - # i18n$t( - # "Upload a file, get data directly from REDCap or use local or sample data." - # ) - # ), + 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 ccdef23d..a0adec99 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-28 | +|date |2026-02-23 | |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.3.1.260228 | +|FreesearchR |26.2.2.260223 | -------------------------------------------------------------------------------- @@ -26,6 +26,8 @@ |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) | @@ -44,6 +46,7 @@ |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) | @@ -53,7 +56,6 @@ |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) | @@ -63,6 +65,7 @@ |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) | @@ -85,11 +88,10 @@ |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.3.1 |NA |NA | +|FreesearchR |26.2.2 |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) | @@ -108,23 +110,24 @@ |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) | @@ -164,6 +167,7 @@ |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) | @@ -196,6 +200,7 @@ |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) | @@ -213,13 +218,12 @@ |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) | @@ -230,4 +234,5 @@ |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 e0949ec5..fcc50395 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpDLoQCo/file14ced11821c07.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmpp0JgLn/file73e17b926733.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.3.1' +app_version <- function()'26.2.2' ######## @@ -4524,7 +4524,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.3.1-260228' +hosted_version <- function()'v26.2.2-260223' ######## @@ -10469,21 +10469,9 @@ custom_theme <- function(..., primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - # 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')" - ), + base_font = bslib::font_google("Montserrat"), + heading_font = bslib::font_google("Public Sans", wght = "700"), + code_font = bslib::font_google("Open Sans"), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"), @@ -10676,12 +10664,11 @@ 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::uiOutput(outputId = "data_sample_text"), - # shiny::helpText( - # i18n$t( - # "Upload a file, get data directly from REDCap or use local or sample data." - # ) - # ), + shiny::helpText( + i18n$t( + "Upload a file, get data directly from REDCap or use local or sample data." + ) + ), shiny::br(), shiny::br(), shiny::conditionalPanel( @@ -13509,6 +13496,16 @@ 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") @@ -13547,6 +13544,7 @@ server <- function(input, output, session) { # session$setCurrentTheme(bs_theme_update(theme = custom_theme(version = 5, bg = "#000",fg="#fff"))) # }) + ############################################################################## ######### ######### Setting reactive values @@ -13639,33 +13637,16 @@ 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"), - env_label - # i18n$t("Local or sample data") + 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"), @@ -13678,10 +13659,12 @@ server <- function(input, output, session) { target = "acc_pan_mis") }) + output$redcap_warning <- shiny::renderUI({ rv_alerts$redcap_alert }) + ############################################################################## ######### ######### Data import section @@ -13815,6 +13798,7 @@ server <- function(input, output, session) { rv$data_original <- temp_data |> default_parsing() } + }, ignoreNULL = FALSE ) @@ -13877,14 +13861,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 @@ -13909,6 +13893,7 @@ server <- function(input, output, session) { } }, ignoreNULL = TRUE) + shiny::observeEvent(input$data_reset, { shinyWidgets::ask_confirmation( cancelOnDismiss = TRUE, @@ -14231,6 +14216,7 @@ server <- function(input, output, session) { rv$list$table1 <- NULL }) + ############################################################################## ######### ######### Code export @@ -14294,18 +14280,19 @@ 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 @@ -14318,8 +14305,7 @@ 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")]) ) }) @@ -14338,6 +14324,7 @@ server <- function(input, output, session) { # ) # }) + output$detail_level <- shiny::renderUI({ shiny::radioButtons( inputId = "detail_level", @@ -14349,12 +14336,14 @@ server <- function(input, output, session) { ) }) + ############################################################################## ######### ######### Descriptive evaluations ######### ############################################################################## + output$data_info_nochar <- shiny::renderUI({ shiny::req(rv$list$data) data_description(rv$list$data, @@ -14373,12 +14362,14 @@ 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", @@ -14419,6 +14410,7 @@ server <- function(input, output, session) { # } # ) + rv$code$table1 <- glue::glue("FreesearchR::create_baseline(df,{list2str(parameters)})") }) @@ -14459,9 +14451,12 @@ 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() @@ -14470,6 +14465,7 @@ 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 fef64b5f..cf5fc05c 100644 --- a/app_docker/translations/translation_da.csv +++ b/app_docker/translations/translation_da.csv @@ -314,17 +314,16 @@ "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","Æ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." +"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." "Data successfully imported!","Data successfully imported!" -"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" +"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." diff --git a/app_docker/translations/translation_sw.csv b/app_docker/translations/translation_sw.csv index 300390ff..f17394c2 100644 --- a/app_docker/translations/translation_sw.csv +++ b/app_docker/translations/translation_sw.csv @@ -327,4 +327,3 @@ "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 deleted file mode 100755 index 895e220a..00000000 Binary files a/app_docker/www/fonts/Montserrat-Regular.ttf and /dev/null differ diff --git a/app_docker/www/fonts/OpenSans-Regular.ttf b/app_docker/www/fonts/OpenSans-Regular.ttf deleted file mode 100755 index 134d225f..00000000 Binary files a/app_docker/www/fonts/OpenSans-Regular.ttf and /dev/null differ diff --git a/app_docker/www/fonts/PublicSans-Bold.ttf b/app_docker/www/fonts/PublicSans-Bold.ttf deleted file mode 100755 index 7b6182c2..00000000 Binary files a/app_docker/www/fonts/PublicSans-Bold.ttf and /dev/null differ diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index 101f20a5..b72cf92c 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//RtmpDLoQCo/file14ced66223522.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmpp0JgLn/file73e17f71b1a4.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.3.1' +app_version <- function()'26.2.2' ######## @@ -4524,7 +4524,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.3.1-260228' +hosted_version <- function()'v26.2.2-260223' ######## @@ -10469,21 +10469,9 @@ custom_theme <- function(..., primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - # 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')" - ), + base_font = bslib::font_google("Montserrat"), + heading_font = bslib::font_google("Public Sans", wght = "700"), + code_font = bslib::font_google("Open Sans"), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"), @@ -10676,12 +10664,11 @@ 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::uiOutput(outputId = "data_sample_text"), - # shiny::helpText( - # i18n$t( - # "Upload a file, get data directly from REDCap or use local or sample data." - # ) - # ), + shiny::helpText( + i18n$t( + "Upload a file, get data directly from REDCap or use local or sample data." + ) + ), shiny::br(), shiny::br(), shiny::conditionalPanel( @@ -13509,6 +13496,16 @@ 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") @@ -13547,6 +13544,7 @@ server <- function(input, output, session) { # session$setCurrentTheme(bs_theme_update(theme = custom_theme(version = 5, bg = "#000",fg="#fff"))) # }) + ############################################################################## ######### ######### Setting reactive values @@ -13639,33 +13637,16 @@ 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"), - env_label - # i18n$t("Local or sample data") + 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"), @@ -13678,10 +13659,12 @@ server <- function(input, output, session) { target = "acc_pan_mis") }) + output$redcap_warning <- shiny::renderUI({ rv_alerts$redcap_alert }) + ############################################################################## ######### ######### Data import section @@ -13815,6 +13798,7 @@ server <- function(input, output, session) { rv$data_original <- temp_data |> default_parsing() } + }, ignoreNULL = FALSE ) @@ -13877,14 +13861,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 @@ -13909,6 +13893,7 @@ server <- function(input, output, session) { } }, ignoreNULL = TRUE) + shiny::observeEvent(input$data_reset, { shinyWidgets::ask_confirmation( cancelOnDismiss = TRUE, @@ -14231,6 +14216,7 @@ server <- function(input, output, session) { rv$list$table1 <- NULL }) + ############################################################################## ######### ######### Code export @@ -14294,18 +14280,19 @@ 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 @@ -14318,8 +14305,7 @@ 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")]) ) }) @@ -14338,6 +14324,7 @@ server <- function(input, output, session) { # ) # }) + output$detail_level <- shiny::renderUI({ shiny::radioButtons( inputId = "detail_level", @@ -14349,12 +14336,14 @@ server <- function(input, output, session) { ) }) + ############################################################################## ######### ######### Descriptive evaluations ######### ############################################################################## + output$data_info_nochar <- shiny::renderUI({ shiny::req(rv$list$data) data_description(rv$list$data, @@ -14373,12 +14362,14 @@ 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", @@ -14419,6 +14410,7 @@ server <- function(input, output, session) { # } # ) + rv$code$table1 <- glue::glue("FreesearchR::create_baseline(df,{list2str(parameters)})") }) @@ -14459,9 +14451,12 @@ 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() @@ -14470,6 +14465,7 @@ 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 deleted file mode 100755 index 895e220a..00000000 Binary files a/inst/apps/FreesearchR/www/fonts/Montserrat-Regular.ttf and /dev/null differ diff --git a/inst/apps/FreesearchR/www/fonts/OpenSans-Regular.ttf b/inst/apps/FreesearchR/www/fonts/OpenSans-Regular.ttf deleted file mode 100755 index 134d225f..00000000 Binary files a/inst/apps/FreesearchR/www/fonts/OpenSans-Regular.ttf and /dev/null differ diff --git a/inst/apps/FreesearchR/www/fonts/PublicSans-Bold.ttf b/inst/apps/FreesearchR/www/fonts/PublicSans-Bold.ttf deleted file mode 100755 index 7b6182c2..00000000 Binary files a/inst/apps/FreesearchR/www/fonts/PublicSans-Bold.ttf and /dev/null differ diff --git a/inst/translations/translation_da.csv b/inst/translations/translation_da.csv index fef64b5f..cf5fc05c 100644 --- a/inst/translations/translation_da.csv +++ b/inst/translations/translation_da.csv @@ -314,17 +314,16 @@ "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","Æ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." +"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." "Data successfully imported!","Data successfully imported!" -"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" +"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." diff --git a/inst/translations/translation_sw.csv b/inst/translations/translation_sw.csv index 300390ff..f17394c2 100644 --- a/inst/translations/translation_sw.csv +++ b/inst/translations/translation_sw.csv @@ -327,4 +327,3 @@ "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 0afa1b53..94804114 100644 --- a/man/custom_theme.Rd +++ b/man/custom_theme.Rd @@ -10,12 +10,9 @@ custom_theme( primary = FreesearchR_colors("primary"), secondary = FreesearchR_colors("secondary"), bootswatch = "united", - 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')"), + base_font = bslib::font_google("Montserrat"), + heading_font = bslib::font_google("Public Sans", wght = "700"), + code_font = bslib::font_google("Open Sans"), success = FreesearchR_colors("success"), info = FreesearchR_colors("info"), warning = FreesearchR_colors("warning"),