diff --git a/CITATION.cff b/CITATION.cff index b2741aa4..4ceeccf6 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -9,7 +9,7 @@ type: software license: AGPL-3.0-or-later title: 'FreesearchR: A free and open-source browser based data analysis tool for researchers with publication ready output' -version: 25.5.5 +version: 25.5.6 doi: 10.5281/zenodo.14527429 identifiers: - type: url diff --git a/DESCRIPTION b/DESCRIPTION index f245494a..e723fde4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: FreesearchR Title: A free and open-source browser based data analysis tool for researchers with publication ready output -Version: 25.5.5 +Version: 25.5.6 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 44b78379..6534c2d6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +# FreesearchR 25.5.6 + +- *FIX* note on max file size of 5 mb + +- *FIX* added a banner to the dev version on shinyapps.io + +- *FIX* updated intro text + # FreesearchR 25.5.5 - *FIX* several minor bugs and polish diff --git a/R/app_version.R b/R/app_version.R index d4d8dc13..7290e2e0 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'25.5.5' +app_version <- function()'25.5.6' diff --git a/R/create-column-mod.R b/R/create-column-mod.R index 0bc24026..22768056 100644 --- a/R/create-column-mod.R +++ b/R/create-column-mod.R @@ -96,7 +96,7 @@ create_column_ui <- function(id) { uiOutput(outputId = ns("columns")), uiOutput(outputId = ns("feedback")), tags$div( - style = css( + style = htmltools::css( display = "grid", gridTemplateColumns = "3fr 1fr", columnGap = "10px", @@ -187,7 +187,7 @@ create_column_server <- function(id, if (input$new_column == "") { rv$feedback <- shinyWidgets::alert( status = "warning", - ph("warning"), datamods::i18n("New column name cannot be empty") + phosphoricons::ph("warning"), datamods::i18n("New column name cannot be empty") ) } }) @@ -351,7 +351,7 @@ try_compute_column <- function(expression, ) shinyWidgets::alert( status = "success", - ph("check"), datamods::i18n("Column added!") + phosphoricons::ph("check"), datamods::i18n("Column added!") ) } @@ -374,7 +374,7 @@ extract_calls <- function(exp) { alert_error <- function(text) { alert( status = "danger", - ph("bug"), text + phosphoricons::ph("bug"), text ) } @@ -385,7 +385,7 @@ btn_column <- function(label, data, inputId) { tags$button( type = "button", class = paste0("btn btn-column-", type), - style = css( + style = htmltools::css( "--bs-btn-padding-y" = ".25rem", "--bs-btn-padding-x" = ".5rem", "--bs-btn-font-size" = ".75rem", diff --git a/R/hosted_version.R b/R/hosted_version.R index 3cd23688..bf34da5d 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v25.5.5-250514' +hosted_version <- function()'v25.5.6-250516' diff --git a/R/import-file-ext.R b/R/import-file-ext.R index 5298ec49..1eba71ac 100644 --- a/R/import-file-ext.R +++ b/R/import-file-ext.R @@ -83,7 +83,7 @@ import_file_ui <- function(id, inputId = ns("file"), label = datamods:::i18n("Upload a file:"), buttonLabel = datamods:::i18n("Browse..."), - placeholder = datamods:::i18n("No file selected"), + placeholder = datamods:::i18n("No file selected; maximum file size is 5 mb"), accept = file_extensions, width = "100%", ## A solution to allow multiple file upload is being considered diff --git a/R/sysdata.rda b/R/sysdata.rda index 3bc008a0..8eef1f32 100644 Binary files a/R/sysdata.rda and b/R/sysdata.rda differ diff --git a/R/update-factor-ext.R b/R/update-factor-ext.R index 3fd4719e..014f854b 100644 --- a/R/update-factor-ext.R +++ b/R/update-factor-ext.R @@ -45,8 +45,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_levels"), label = tagList( - ph("sort-ascending"), - i18n("Sort by levels") + phosphoricons::ph("sort-ascending"), + datamods:::i18n("Sort by levels") ), class = "btn-outline-primary mb-3", width = "100%" @@ -58,8 +58,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_occurrences"), label = tagList( - ph("sort-ascending"), - i18n("Sort by count") + phosphoricons::ph("sort-ascending"), + datamods:::i18n("Sort by count") ), class = "btn-outline-primary mb-3", width = "100%" @@ -71,7 +71,7 @@ update_factor_ui <- function(id) { class = "float-end", shinyWidgets::prettyCheckbox( inputId = ns("new_var"), - label = i18n("Create a new variable (otherwise replaces the one selected)"), + label = datamods:::i18n("Create a new variable (otherwise replaces the one selected)"), value = FALSE, status = "primary", outline = TRUE, @@ -79,7 +79,7 @@ update_factor_ui <- function(id) { ), actionButton( inputId = ns("create"), - label = tagList(ph("arrow-clockwise"), i18n("Update factor variable")), + label = tagList(phosphoricons::ph("arrow-clockwise"), datamods:::i18n("Update factor variable")), class = "btn-outline-primary" ) ), @@ -127,13 +127,13 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_levels %% 2 == 1) { decreasing <- FALSE label <- tagList( - ph("sort-descending"), + phosphoricons::ph("sort-descending"), "Sort Levels" ) } else { decreasing <- TRUE label <- tagList( - ph("sort-ascending"), + phosphoricons::ph("sort-ascending"), "Sort Levels" ) } @@ -145,14 +145,14 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_occurrences %% 2 == 1) { decreasing <- FALSE label <- tagList( - ph("sort-descending"), - i18n("Sort count") + phosphoricons::ph("sort-descending"), + datamods:::i18n("Sort count") ) } else { decreasing <- TRUE label <- tagList( - ph("sort-ascending"), - i18n("Sort count") + phosphoricons::ph("sort-ascending"), + datamods:::i18n("Sort count") ) } updateActionButton(inputId = "sort_occurrences", label = as.character(label)) @@ -179,7 +179,7 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { grid <- grid_columns( grid, columns = c("Var1", "Var1_toset", "Freq"), - header = c(i18n("Levels"), "New label", i18n("Count")) + header = c(datamods:::i18n("Levels"), "New label", datamods:::i18n("Count")) ) grid <- grid_colorbar( grid, diff --git a/SESSION.md b/SESSION.md index 9dd0b555..f21212dd 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 |2025-05-14 | -|rstudio |2024.12.1+563 Kousa Dogwood (desktop) | +|date |2025-05-16 | +|rstudio |2025.05.0+496 Mariposa Orchid (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |25.5.5.250514 | +|FreesearchR |25.5.6.250516 | -------------------------------------------------------------------------------- @@ -53,6 +53,7 @@ |colorspace |2.1-1 |2024-07-26 |CRAN (R 4.4.1) | |commonmark |1.9.5 |2025-03-17 |CRAN (R 4.4.1) | |crayon |1.5.3 |2024-06-20 |CRAN (R 4.4.1) | +|credentials |2.0.2 |2024-10-04 |CRAN (R 4.4.1) | |curl |6.2.2 |2025-03-24 |CRAN (R 4.4.1) | |data.table |1.17.0 |2025-02-22 |CRAN (R 4.4.1) | |datamods |1.5.3 |2024-10-02 |CRAN (R 4.4.1) | @@ -84,16 +85,19 @@ |foreach |1.5.2 |2022-02-02 |CRAN (R 4.4.0) | |foreign |0.8-90 |2025-03-31 |CRAN (R 4.4.1) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.4.1) | -|FreesearchR |25.5.5 |NA |NA | +|FreesearchR |25.5.6 |NA |NA | |fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) | |gdtools |0.4.2 |2025-03-27 |CRAN (R 4.4.1) | |generics |0.1.3 |2022-07-05 |CRAN (R 4.4.1) | +|gert |2.1.5 |2025-03-25 |CRAN (R 4.4.1) | |ggalluvial |0.12.5 |2023-02-22 |CRAN (R 4.4.0) | |ggcorrplot |0.1.4.1 |2023-09-05 |CRAN (R 4.4.0) | |ggforce |0.4.2 |2024-02-19 |CRAN (R 4.4.0) | |ggplot2 |3.5.2 |2025-04-09 |CRAN (R 4.4.1) | |ggridges |0.5.6 |2024-01-23 |CRAN (R 4.4.0) | |ggstats |0.9.0 |2025-03-10 |CRAN (R 4.4.1) | +|gh |1.4.1 |2024-03-28 |CRAN (R 4.4.0) | +|gitcreds |0.1.2 |2022-09-08 |CRAN (R 4.4.1) | |glue |1.8.0 |2024-09-30 |CRAN (R 4.4.1) | |gridExtra |2.3 |2017-09-09 |CRAN (R 4.4.1) | |gt |1.0.0 |2025-04-05 |CRAN (R 4.4.1) | @@ -107,6 +111,7 @@ |htmltools |0.5.8.1 |2024-04-04 |CRAN (R 4.4.1) | |htmlwidgets |1.6.4 |2023-12-06 |CRAN (R 4.4.0) | |httpuv |1.6.16 |2025-04-16 |CRAN (R 4.4.1) | +|httr2 |1.1.2 |2025-03-26 |CRAN (R 4.4.1) | |IDEAFilter |0.2.0 |2024-04-15 |CRAN (R 4.4.0) | |insight |1.2.0 |2025-04-22 |CRAN (R 4.4.1) | |iterators |1.0.14 |2022-02-05 |CRAN (R 4.4.1) | @@ -119,9 +124,11 @@ |later |1.4.2 |2025-04-08 |CRAN (R 4.4.1) | |lattice |0.22-7 |2025-04-02 |CRAN (R 4.4.1) | |lifecycle |1.0.4 |2023-11-07 |CRAN (R 4.4.1) | +|litedown |0.7 |2025-04-08 |CRAN (R 4.4.1) | |lme4 |1.1-37 |2025-03-26 |CRAN (R 4.4.1) | |lubridate |1.9.4 |2024-12-08 |CRAN (R 4.4.1) | |magrittr |2.0.3 |2022-03-30 |CRAN (R 4.4.1) | +|markdown |2.0 |2025-03-23 |CRAN (R 4.4.1) | |MASS |7.3-65 |2025-02-28 |CRAN (R 4.4.1) | |Matrix |1.7-3 |2025-03-11 |CRAN (R 4.4.1) | |memoise |2.0.1 |2021-11-26 |CRAN (R 4.4.0) | @@ -160,6 +167,7 @@ |R6 |2.6.1 |2025-02-15 |CRAN (R 4.4.1) | |ragg |1.4.0 |2025-04-10 |CRAN (R 4.4.1) | |rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.4.0) | +|rappdirs |0.3.3 |2021-01-31 |CRAN (R 4.4.1) | |rbibutils |2.3 |2024-10-04 |CRAN (R 4.4.1) | |RColorBrewer |1.1-3 |2022-04-03 |CRAN (R 4.4.1) | |Rcpp |1.0.14 |2025-01-12 |CRAN (R 4.4.1) | @@ -196,6 +204,7 @@ |shinyWidgets |0.9.0 |2025-02-21 |CRAN (R 4.4.1) | |stringi |1.8.7 |2025-03-27 |CRAN (R 4.4.1) | |stringr |1.5.1 |2023-11-14 |CRAN (R 4.4.0) | +|sys |3.4.3 |2024-10-04 |CRAN (R 4.4.1) | |systemfonts |1.2.2 |2025-04-04 |CRAN (R 4.4.1) | |testthat |3.2.3 |2025-01-13 |CRAN (R 4.4.1) | |textshaping |1.0.0 |2025-01-20 |CRAN (R 4.4.1) | diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index be0bb4da..22b7ee47 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -49,7 +49,7 @@ library(rlang) #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'25.5.5' +app_version <- function()'25.5.6' ######## @@ -440,7 +440,7 @@ create_column_ui <- function(id) { uiOutput(outputId = ns("columns")), uiOutput(outputId = ns("feedback")), tags$div( - style = css( + style = htmltools::css( display = "grid", gridTemplateColumns = "3fr 1fr", columnGap = "10px", @@ -531,7 +531,7 @@ create_column_server <- function(id, if (input$new_column == "") { rv$feedback <- shinyWidgets::alert( status = "warning", - ph("warning"), datamods::i18n("New column name cannot be empty") + phosphoricons::ph("warning"), datamods::i18n("New column name cannot be empty") ) } }) @@ -695,7 +695,7 @@ try_compute_column <- function(expression, ) shinyWidgets::alert( status = "success", - ph("check"), datamods::i18n("Column added!") + phosphoricons::ph("check"), datamods::i18n("Column added!") ) } @@ -718,7 +718,7 @@ extract_calls <- function(exp) { alert_error <- function(text) { alert( status = "danger", - ph("bug"), text + phosphoricons::ph("bug"), text ) } @@ -729,7 +729,7 @@ btn_column <- function(label, data, inputId) { tags$button( type = "button", class = paste0("btn btn-column-", type), - style = css( + style = htmltools::css( "--bs-btn-padding-y" = ".25rem", "--bs-btn-padding-x" = ".5rem", "--bs-btn-font-size" = ".75rem", @@ -3996,7 +3996,7 @@ simple_snake <- function(data){ #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v25.5.5-250514' +hosted_version <- function()'v25.5.6-250516' ######## @@ -4103,7 +4103,7 @@ import_file_ui <- function(id, inputId = ns("file"), label = datamods:::i18n("Upload a file:"), buttonLabel = datamods:::i18n("Browse..."), - placeholder = datamods:::i18n("No file selected"), + placeholder = datamods:::i18n("No file selected; maximum file size is 5 mb"), accept = file_extensions, width = "100%", ## A solution to allow multiple file upload is being considered @@ -8125,8 +8125,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_levels"), label = tagList( - ph("sort-ascending"), - i18n("Sort by levels") + phosphoricons::ph("sort-ascending"), + datamods:::i18n("Sort by levels") ), class = "btn-outline-primary mb-3", width = "100%" @@ -8138,8 +8138,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_occurrences"), label = tagList( - ph("sort-ascending"), - i18n("Sort by count") + phosphoricons::ph("sort-ascending"), + datamods:::i18n("Sort by count") ), class = "btn-outline-primary mb-3", width = "100%" @@ -8151,7 +8151,7 @@ update_factor_ui <- function(id) { class = "float-end", shinyWidgets::prettyCheckbox( inputId = ns("new_var"), - label = i18n("Create a new variable (otherwise replaces the one selected)"), + label = datamods:::i18n("Create a new variable (otherwise replaces the one selected)"), value = FALSE, status = "primary", outline = TRUE, @@ -8159,7 +8159,7 @@ update_factor_ui <- function(id) { ), actionButton( inputId = ns("create"), - label = tagList(ph("arrow-clockwise"), i18n("Update factor variable")), + label = tagList(phosphoricons::ph("arrow-clockwise"), datamods:::i18n("Update factor variable")), class = "btn-outline-primary" ) ), @@ -8207,13 +8207,13 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_levels %% 2 == 1) { decreasing <- FALSE label <- tagList( - ph("sort-descending"), + phosphoricons::ph("sort-descending"), "Sort Levels" ) } else { decreasing <- TRUE label <- tagList( - ph("sort-ascending"), + phosphoricons::ph("sort-ascending"), "Sort Levels" ) } @@ -8225,14 +8225,14 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_occurrences %% 2 == 1) { decreasing <- FALSE label <- tagList( - ph("sort-descending"), - i18n("Sort count") + phosphoricons::ph("sort-descending"), + datamods:::i18n("Sort count") ) } else { decreasing <- TRUE label <- tagList( - ph("sort-ascending"), - i18n("Sort count") + phosphoricons::ph("sort-ascending"), + datamods:::i18n("Sort count") ) } updateActionButton(inputId = "sort_occurrences", label = as.character(label)) @@ -8259,7 +8259,7 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { grid <- grid_columns( grid, columns = c("Var1", "Var1_toset", "Freq"), - header = c(i18n("Levels"), "New label", i18n("Count")) + header = c(datamods:::i18n("Levels"), "New label", datamods:::i18n("Count")) ) grid <- grid_colorbar( grid, @@ -9352,6 +9352,15 @@ header_include <- function(){ } +######## +#### Current file: /Users/au301842/FreesearchR/dev/dev_banner.R +######## + +dev_banner <- function(){ + NULL + } + + ######## #### Current file: /Users/au301842/FreesearchR/app/ui.R ######## @@ -9369,6 +9378,10 @@ ui_elements <- list( "home" = bslib::nav_panel( title = "FreesearchR", shiny::fluidRow( + ## On building the dev-version for shinyapps.io, the dev_banner() is redefined + ## Default just output "NULL" + ## This could probably be achieved more legantly, but this works. + dev_banner(), shiny::column(width = 2), shiny::column( width = 8, diff --git a/inst/apps/FreesearchR/www/intro.md b/inst/apps/FreesearchR/www/intro.md index f1432c8b..0b644dcf 100644 --- a/inst/apps/FreesearchR/www/intro.md +++ b/inst/apps/FreesearchR/www/intro.md @@ -1,20 +1,18 @@ # Welcome -This is the ***FreesearchR*** data analysis tool. We intend the ***FreesearchR*** to be a powerful and free tool for easy data evaluation and analysis at the hands of the clinician. If you need more advanced tools for regression models or plotting, you'll probably be better off using *R* or similar directly on your own machine. - -By intention, this tool has been designed to be simple to use with a minimum of mandatory options to keep the workflow streamlined, while also including a few options to go even further. +This is the ***FreesearchR*** data analysis tool. We intend ***FreesearchR*** to be a free tool for easy data evaluation and analysis. If you need more advanced tools, start with ***FreesearchR*** and then you'll probably be better off using *R* or similar directly. Here is a brief summary of the functions: -1. Import data to get started. This can be a spreadsheet/file on your machine, direct export from a REDCap server, sample data or data from a your local environment if run locally. +1. **Import data** from a spreadsheet/file on your machine, direct export from a REDCap server, sample data or data from a your local environment if run locally. -1. Data inspection and modification (change variable classes, create new variables (categorical from numeric or time data, or completely new variables from the data) +1. **Data inspection** and **modification** like modifying variables or creating new (categorical from numeric or time data, or completely new variables from the data) -1. Evaluate data using descriptive analyses methods and inspect cross-correlations +1. **Evaluate data** using descriptive analyses methods and inspect cross-correlations -1. Create and export simple, clean plots for data overview and insights. +1. **Create and export simple, clean plots** for data overview and insights -1. Create regression models for even more advanced data analyses +1. **Create regression simple models** for even more advanced data analyses - Linear, dichotomous or ordinal logistic regression will be used depending on specified outcome variable @@ -22,7 +20,7 @@ Here is a brief summary of the functions: - Evaluate model assumptions -1. Export results +1. **Export results** - Descriptive and regression analyses results for MS Word or [LibreOffice](https://www.libreoffice.org/) diff --git a/inst/apps/FreesearchR/www/report.rmd b/inst/apps/FreesearchR/www/report.rmd index 9a2013b3..7f7c61f6 100644 --- a/inst/apps/FreesearchR/www/report.rmd +++ b/inst/apps/FreesearchR/www/report.rmd @@ -43,7 +43,7 @@ vec2sentence <- function(data, sep.word = "and") { ## Introduction -Research should be free and open with easy access for all. The FreesearchR tool attempts to help lower the bar to participate in contributing to science by making guided data analysis easily accessible in the web-browser. +Research should be free and open with easy access for all. The *FreesearchR* tool attempts to help lower the bar to participate in research by making basic data exploration and analyses easily accessible. ## Methods