# add an asterisk to an input label labelMandatory <- function(label) { tagList( label, span("*", class = "mandatory_star") ) } # get current Epoch time epochTime <- function() { return(as.integer(Sys.time())) } # get a formatted string of the timestamp (exclude colons as they are invalid # characters in Windows filenames) humanTime <- function() { format(Sys.time(), "%Y%m%d-%H%M%OS") } # save the results to a file saveData <- function(data, responsesDir) { fileName <- sprintf("%s_%s.csv", humanTime(), digest::digest(data)) write.csv(x = data, file = file.path(responsesDir, fileName), row.names = FALSE, quote = TRUE) } # load all responses into a data.frame loadData <- function(responsesDir) { files <- list.files(file.path(responsesDir), full.names = TRUE) data <- lapply(files, read.csv, stringsAsFactors = FALSE) data <- do.call(rbind, data) if (length(list.files(file.path(responsesDir))) != 0) { write.csv(x = data, file = file.path(responsesDir, "responses.csv"), row.names = FALSE, quote = TRUE) sapply(list.files(file.path(responsesDir), full.names = TRUE)[1:length(list.files(file.path(responsesDir)))-1], unlink) } data } # CSS to use in the app appCSS <- ".mandatory_star { color: red; } .shiny-input-container { margin-top: 25px; } #submit_msg { margin-left: 15px; } #error { color: red; } body { background: #fcfcfc; } #header { background: #fff; border-bottom: 1px solid #ddd; margin: -20px -15px 0; padding: 15px 15px 10px; } "