# ---- 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
),
...
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.