mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-13 00:48:09 -05:00
87 lines
2.6 KiB
R
87 lines
2.6 KiB
R
#' Action button/link
|
|
#'
|
|
#' Creates an action button or link whose value is initially zero, and increments by one
|
|
#' each time it is pressed.
|
|
#'
|
|
#' @inheritParams textInput
|
|
#' @param label The contents of the button or link--usually a text label, but
|
|
#' you could also use any other HTML, like an image.
|
|
#' @param icon An optional \code{\link{icon}} to appear on the button.
|
|
#' @param ... Named attributes to be applied to the button or link.
|
|
#'
|
|
#' @family input elements
|
|
#' @examples
|
|
#' ## Only run examples in interactive R sessions
|
|
#' if (interactive()) {
|
|
#'
|
|
#' ui <- fluidPage(
|
|
#' sliderInput("obs", "Number of observations", 0, 1000, 500),
|
|
#' actionButton("goButton", "Go!"),
|
|
#' plotOutput("distPlot")
|
|
#' )
|
|
#'
|
|
#' server <- function(input, output) {
|
|
#' output$distPlot <- renderPlot({
|
|
#' # Take a dependency on input$goButton. This will run once initially,
|
|
#' # because the value changes from NULL to 0.
|
|
#' input$goButton
|
|
#'
|
|
#' # Use isolate() to avoid dependency on input$obs
|
|
#' dist <- isolate(rnorm(input$obs))
|
|
#' hist(dist)
|
|
#' })
|
|
#' }
|
|
#'
|
|
#' shinyApp(ui, server)
|
|
#'
|
|
#' }
|
|
#'
|
|
#' @seealso \code{\link{observeEvent}} and \code{\link{eventReactive}}
|
|
#' @export
|
|
actionButton <- function(inputId, label, icon = NULL, width = NULL, ...) {
|
|
|
|
value <- restoreInput(id = inputId, default = NULL)
|
|
|
|
tags$button(id=inputId,
|
|
style = if (!is.null(width)) paste0("width: ", validateCssUnit(width), ";"),
|
|
type="button",
|
|
class="btn btn-default action-button",
|
|
`data-val` = value,
|
|
list(validateIcon(icon), label),
|
|
...
|
|
)
|
|
}
|
|
|
|
#' @rdname actionButton
|
|
#' @export
|
|
actionLink <- function(inputId, label, icon = NULL, ...) {
|
|
value <- restoreInput(id = inputId, default = NULL)
|
|
|
|
tags$a(id=inputId,
|
|
href="#",
|
|
class="action-button",
|
|
`data-val` = value,
|
|
list(validateIcon(icon), label),
|
|
...
|
|
)
|
|
}
|
|
|
|
|
|
# Check that the icon parameter is valid:
|
|
# 1) Check if the user wants to actually add an icon:
|
|
# -- if icon=NULL, it means leave the icon unchanged
|
|
# -- if icon=character(0), it means don't add an icon or, more usefully,
|
|
# remove the previous icon
|
|
# 2) If so, check that the icon has the right format (this does not check whether
|
|
# it is a *real* icon - currently that would require a massive cross reference
|
|
# with the "font-awesome" and the "glyphicon" libraries)
|
|
validateIcon <- function(icon) {
|
|
if (is.null(icon) || identical(icon, character(0))) {
|
|
return(icon)
|
|
} else if (inherits(icon, "shiny.tag") && icon$name == "i") {
|
|
return(icon)
|
|
} else {
|
|
stop("Invalid icon. Use Shiny's 'icon()' function to generate a valid icon")
|
|
}
|
|
}
|