@@ -37,21 +37,11 @@ plotlyOutput <- function(outputId, width = "100%", height = "400px",
3737# ' @rdname plotly-shiny
3838# ' @export
3939renderPlotly <- function (expr , env = parent.frame(), quoted = FALSE ) {
40- if (! quoted ) {
41- quoted <- TRUE
42- expr <- substitute(expr )
43- }
44- # Install the (user-supplied) expression as a function
45- # This way, if the user-supplied expression contains a return()
46- # statement, we can capture that return value and pass it along
47- # to prepareWidget()
48- # prepareWidget() makes it possible to pass different non-plotly
49- # objects to renderPlotly() (e.g., ggplot2, promises). It also is used
50- # to inform event_data about what events have been registered
51- shiny :: installExprFunction(expr , " func" , env , quoted )
52- renderFunc <- shinyRenderWidget(
53- plotly ::: prepareWidget(func()), plotlyOutput , env , quoted
54- )
40+ if (! quoted ) { expr <- substitute(expr ) } # force quoted
41+ # this makes it possible to pass a ggplot2 object to renderPlotly()
42+ # https://github.com/ramnathv/htmlwidgets/issues/166#issuecomment-153000306
43+ expr <- as.call(list (call(" :::" , quote(" plotly" ), quote(" prepareWidget" )), expr ))
44+ renderFunc <- shinyRenderWidget(expr , plotlyOutput , env , quoted = TRUE )
5545 # remove 'internal' plotly attributes that are known to cause false
5646 # positive test results in shinytest (snapshotPreprocessOutput was added
5747 # in shiny 1.0.3.9002, but we require >= 1.1)
@@ -67,14 +57,13 @@ renderPlotly <- function(expr, env = parent.frame(), quoted = FALSE) {
6757
6858# Converts a plot, OR a promise of a plot, to plotly
6959prepareWidget <- function (x ) {
70- if (promises :: is.promising(x )) {
71- promises :: then(
72- promises :: then(x , plotly_build ),
73- register_plot_events
74- )
60+ p <- if (promises :: is.promising(x )) {
61+ promises :: then(x , plotly_build )
7562 } else {
76- register_plot_events( plotly_build(x ) )
63+ plotly_build(x )
7764 }
65+ register_plot_events(p )
66+ p
7867}
7968
8069register_plot_events <- function (p ) {
@@ -84,7 +73,6 @@ register_plot_events <- function(p) {
8473 session $ userData $ plotlyShinyEventIDs ,
8574 eventIDs
8675 ))
87- p
8876}
8977
9078
0 commit comments