Nothing
# Defines shiny bindings
get_shiny_input_bindings <- function() {
bindings <- get(".shiny_input_bindings")
if(bindings$size() == 0) {
bindings$mset(
'shiny.textInput' = list(
binding = "shiny.textInput",
update_function = "shiny::updateTextInput"
),
'shiny.textAreaInput' = list(
binding = "shiny.textareaInput",
update_function = "shiny::updateTextAreaInput"
),
'shiny.passwordInput' = list(
binding = "shiny.passwordInput",
update_function = "shiny::updateTextInput"
),
'shiny.numericInput' = list(
binding = "shiny.numberInput",
update_function = "shiny::updateNumericInput"
),
'shiny.checkboxInput' = list(
binding = "shiny.checkboxInput",
update_function = "shiny::updateCheckboxInput"
),
'shiny.sliderInput' = list(
binding = "shiny.sliderInput",
update_function = "shiny::updateSliderInput"
),
'shiny.dateInput' = list(
binding = "shiny.dateInput",
update_function = "shiny::updateDateInput"
),
'shiny.dateRangeInput' = list(
binding = "shiny.dateRangeInput",
update_function = 'shiny::updateDateRangeInput'
),
'shiny.selectInput' = list(
binding = "shiny.selectInput",
update_function = 'shiny::updateSelectInput'
),
'shiny.selectizeInput' = list(
binding = "shiny.selectInput",
update_function = 'shiny::updateSelectizeInput'
),
'shiny.varSelectInput' = list(
binding = "shiny.selectInput",
update_function = 'shiny::updateVarSelectInput'
),
'shiny.varSelectizeInput' = list(
binding = "shiny.selectInput",
update_function = 'shiny::updateVarSelectizeInput'
),
'shiny.radioButtons' = list(
binding = "shiny.radioInput",
update_function = 'shiny::updateRadioButtons'
),
'shiny.checkboxGroupInput' = list(
binding = "shiny.checkboxGroupInput",
update_function = 'shiny::updateCheckboxGroupInput'
),
'shiny.actionButton' = list(
binding = "shiny.actionButtonInput",
update_function = 'shiny::updateActionButton'
),
'shiny.actionLink' = list(
binding = "shiny.actionButtonInput",
update_function = 'shiny::updateActionButton'
),
'shiny.fileInput' = list(
binding = "shiny.fileInputBinding",
update_function = NULL
),
'shiny.fileInput' = list(
binding = "shiny.fileInputBinding",
update_function = NULL
),
'shiny.textOutput' = list(
binding = "shiny.textOutput",
update_function = NULL
),
'dipsaus.compoundInput2' = list(
binding = "dipsaus.compoundInput2",
update_function = 'dipsaus.updateCompoundInput2'
),
'dipsaus.actionButtonStyled' = list(
binding = "shiny.actionButtonInput",
update_function = 'dipsaus.updateActionButtonStyled'
)
)
}
bindings
}
#' Register customized input to enable support by compound input
#' @param fname character, function name, such as \code{"textInput"}
#' @param pkg character, package name, like \code{"shiny"}
#' @param shiny_binding character, 'JavaScript' binding name.See examples
#' @param update_function character, update function such as \code{"shiny::textInput"}
#' @param quiet logical, whether to suppress warnings
#' @return a list of binding functions, one is `JavaScript` object key in
#' \code{Shiny.inputBindings}, the other is `shiny` update function in R end.
#' @examples
#'
#' # register shiny textInput
#' registerInputBinding('textInput', 'shiny',
#' 'shiny.textInput', 'shiny::updateTextInput')
#'
#' # Register shiny actionLink
#' # In "Shiny.inputbindings", the binding name is "shiny.actionButtonInput",
#' # Shiny update function is "shiny::updateActionButton"
#' registerInputBinding('actionLink', 'shiny',
#' 'shiny.actionButtonInput', 'shiny::updateActionButton')
#'
#' @export
registerInputBinding <- function(fname, pkg, shiny_binding, update_function = NULL, quiet = FALSE){
ns <- asNamespace(pkg)
if( !is.function(ns[[fname]]) ){
if(!quiet){
stop(sprintf('%s::%s is not a function', pkg, fname))
}
return(invisible())
}
binding <- list(
binding = shiny_binding,
update_function = update_function
)
# shiny_input_bindings[[sprintf('%s.%s', pkg, fname)]] <- binding
bindings <- get_shiny_input_bindings()
bindings$set(key = sprintf('%s.%s', pkg, fname), value = binding)
invisible(binding)
}
#' Obtain registered input bindings
#' @param fname input function name, character or quoted expression
#' such as \code{'shiny::textInput'} or \code{numericInput}.
#' @param pkg (optional), name of package
#' @param envir environment to evaluate \code{fname} if \code{pkg} is not provided
#'
#' @return a list containing: 1. `JavaScript` input binding name; 2. `R` updating function name
#'
#' @examples
#'
#' library(dipsaus)
#'
#' # Most recommended usage
#' getInputBinding('compoundInput2', pkg = 'dipsaus')
#'
#' # Other usages
#' getInputBinding('shiny::textInput')
#'
#'
#' getInputBinding(shiny::textInput)
#'
#' getInputBinding(compoundInput2, pkg = 'dipsaus')
#'
#' # Bad usage, raise errors in some cases
#' \dontrun{
#' ## You need to library(shiny), or set envir=asNamespace('shiny'), or pkg='shiny'
#' getInputBinding('textInput')
#' getInputBinding(textInput) # also fails
#'
#' ## Always fails
#' getInputBinding('dipsaus::compoundInput2', pkg = 'dipsaus')
#' }
#'
#' @export
getInputBinding <- function(fname, pkg = NULL, envir = parent.frame()){
if( length(pkg) != 1 || !is.character(pkg) ){
# need to get package from fname
if(is.character(fname)){
fname <- str2lang(fname)
}
fname_quoted <- substitute(fname)
if( !is.language(fname) ){
fname <- fname_quoted
}
# now we have quoted fname
if(is.call(fname) && all(as.character(fname[[1]]) %in% c('::', ':::'))){
pkg <- deparse(fname[[2]])
fname <- deparse(fname[[3]])
}else{
f <- eval(fname, envir = envir)
fenv <- environment(f)
if( isNamespace(fenv) ){
pkg <- fenv$.__NAMESPACE__.$spec[['name']]
}
fname <- deparse(fname)
}
}else{
fname_quoted <- substitute(fname)
if(!is.character(fname)){
fname <- deparse(fname_quoted)
}
}
# Check whether fname exists
if(is.null(pkg)){
cat2(sprintf('Cannot find function %s in any package loaded from envir. Please provide package name', fname), level = 'FATAL')
}
ns <- asNamespace(pkg)
if(!is.function(ns[[fname]])){
cat2(sprintf('Cannot find function %s in namespace %s', fname, pkg), level = 'FATAL')
}
binding_key <- sprintf('%s.%s', pkg, fname)
# binding_re <- shiny_input_bindings[[ binding_key ]]
bindings <- get_shiny_input_bindings()
binding_re <- bindings$get(key = binding_key, missing = NULL)
if(is.null(binding_re)){
cat2(sprintf('Cannot find input binding for %s. Please use\n\tdipsaus::registerInputBinding("%s", "%s", shiny_binding = "<JavaScript_binding>", update_function = "<R update function or NULL>")\n to register this input type.', binding_key, fname, pkg), level = 'FATAL')
}
binding_re$call_function <- sprintf('%s::%s', pkg, fname)
binding_re
}
#' Detect whether 'Shiny' is running
#' @return logical, true if current shiny context is active
#' @export
shiny_is_running <- function(){
if(requireNamespace('shiny', quietly = TRUE)){
return(isTRUE(!is.null(shiny::getDefaultReactiveDomain())))
}
return(FALSE)
}
#' Store/Get key-value pairs in 'shiny' session
#' @description If key is missing, it'll be created, otherwise ignored or
#' overwritten.
#' @param session 'Shiny' session
#' @param key character, key to store
#' @param val value to store
#' @param override if key exists, whether to overwrite its value
#' @return If session is shiny session, returns current value stored in
#' session, otherwise returns \code{NULL}
#' @export
add_to_session <- function(
session, key = 'rave_id',
val = paste(sample(c(letters, LETTERS, 0:9), 20), collapse = ''),
override = FALSE
){
if(missing(session)){
if(requireNamespace('shiny', quietly = TRUE)){
session <- shiny::getDefaultReactiveDomain()
} else {
stop('Please specify session')
}
}
if(!is.null(session)){
if(override || !exists(key, envir = session$userData)){
assign(key, val, envir = session$userData)
}
return(get(key, envir = session$userData))
}
return(NULL)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.