# ---- Modified Shiny Inputs ---- # The shiny package as a whole is distributed under GPL-3 # (GNU GENERAL PUBLIC LICENSE version 3). # See https://github.com/rstudio/shiny/blob/master/LICENSE #' Modified Text Area Input #' #' Standard [shiny::textAreaInput()] with additional `is_code` parameter, added #' code font style for the input text and with `autocomplete`, `autocorrect`, #' `autocapitalize` and `spellcheck` set to `off` or `false`. #' #' @inheritParams shiny::textAreaInput #' @param is_code Should the text input be considered verbatim code input? #' @family modified shiny inputs textAreaInputAlt <- function( inputId, label, value = "", width = NULL, height = NULL, cols = NULL, rows = NULL, placeholder = NULL, resize = NULL, is_code = TRUE ) { value <- shiny::restoreInput(id = inputId, default = value) if (!is.null(resize)) { resize <- match.arg(resize, c("both", "none", "vertical", "horizontal")) } style <- paste( if (!is.null(width)) paste0("width: ", shiny::validateCssUnit(width), ";"), if (!is.null(height)) paste0("height: ", shiny::validateCssUnit(height), ";"), if (!is.null(resize)) paste0("resize: ", resize, ";"), if (is_code) 'font-family: "Monaco", "Inconsolata", monospace;' ) parent_style <- paste( if (!is.null(width) && grepl("%", width)) paste0("width: ", width, ";"), if (!is.null(height) && grepl("%", height)) paste0("height: ", height, ";") ) # Workaround for tag attribute=character(0) bug: # https://github.com/rstudio/htmltools/issues/65 if (length(style) == 0) style <- NULL shiny::div( class = "form-group shiny-input-container", tags$label(label, `for` = inputId), style = if (!parent_style %in% c(" ", "", " ")) parent_style, shiny::tags$textarea( id = inputId, class = "form-control", placeholder = placeholder, style = style, rows = rows, cols = cols, autocomplete = "off", autocorrect = "off", autocapitalize = "off", spellcheck = "false", value ) ) } #' Modified Text Input #' #' Standard [shiny::textInput()] with additional `width` parameter, added code #' font style for the input text and with `autocomplete`, `autocorrect`, #' `autocapitalize` and `spellcheck` set to `off` or `false`. #' #' @inheritParams shiny::textInput #' @param width Width of `shiny-input-container` div. #' @param ... Extra elements to be included in the `input-group` div. #' @family modified shiny inputs textInputCode <- function( inputId, label, value = "", width = NULL, placeholder = NULL, ... ) { value <- shiny::restoreInput(id = inputId, default = value) shiny::div( class = "input-group shiny-input-container", style = if (!is.null(width)) paste0("width: ", shiny::validateCssUnit(width), ";"), tags$label(label, `for` = inputId), shiny::tags$input( id = inputId, type = "text", class = "form-control", value = value, style = 'font-family: "Monaco", "Inconsolata", monospace;', autocomplete = "off", autocorrect = "off", autocapitalize = "off", spellcheck = "false", placeholder = placeholder ), ... ) }