From af1c77085baac8477d4c14afe16232f89d3f7571 Mon Sep 17 00:00:00 2001 From: Carson Date: Mon, 26 Aug 2019 18:49:56 -0500 Subject: [PATCH] Use shiny::installExprFunction to register debug hooks --- R/shiny.R | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/R/shiny.R b/R/shiny.R index 5f52b424b2..1893f7c111 100644 --- a/R/shiny.R +++ b/R/shiny.R @@ -37,17 +37,21 @@ plotlyOutput <- function(outputId, width = "100%", height = "400px", #' @rdname plotly-shiny #' @export renderPlotly <- function(expr, env = parent.frame(), quoted = FALSE) { - if (!quoted) { expr <- substitute(expr) } # force quoted - # Wrap the (user-supplied) expression with a call to evalq() + if (!quoted) { + quoted <- TRUE + expr <- substitute(expr) + } + # Install the (user-supplied) expression as a function # This way, if the user-supplied expression contains a return() # statement, we can capture that return value and pass it along # to prepareWidget() - expr <- call("evalq", expr, env) # prepareWidget() makes it possible to pass different non-plotly # objects to renderPlotly() (e.g., ggplot2, promises). It also is used # to inform event_data about what events have been registered - expr <- as.call(list(call(":::", quote("plotly"), quote("prepareWidget")), expr)) - renderFunc <- shinyRenderWidget(expr, plotlyOutput, env, quoted = TRUE) + shiny::installExprFunction(expr, "func", env, quoted) + renderFunc <- shinyRenderWidget( + plotly:::prepareWidget(func()), plotlyOutput, env, quoted + ) # remove 'internal' plotly attributes that are known to cause false # positive test results in shinytest (snapshotPreprocessOutput was added # in shiny 1.0.3.9002, but we require >= 1.1)