@@ -37,11 +37,20 @@ plotlyOutput <- function(outputId, width = "100%", height = "400px",
37
37
# ' @rdname plotly-shiny
38
38
# ' @export
39
39
renderPlotly <- function (expr , env = parent.frame(), quoted = FALSE ) {
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 )
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 , assign.env = env )
52
+ expr <- quote(plotly ::: prepareWidget(func()))
53
+ renderFunc <- shinyRenderWidget(expr , plotlyOutput , env , quoted )
45
54
# remove 'internal' plotly attributes that are known to cause false
46
55
# positive test results in shinytest (snapshotPreprocessOutput was added
47
56
# in shiny 1.0.3.9002, but we require >= 1.1)
@@ -57,13 +66,14 @@ renderPlotly <- function(expr, env = parent.frame(), quoted = FALSE) {
57
66
58
67
# Converts a plot, OR a promise of a plot, to plotly
59
68
prepareWidget <- function (x ) {
60
- p <- if (promises :: is.promising(x )) {
61
- promises :: then(x , ggplotly )
69
+ if (promises :: is.promising(x )) {
70
+ promises :: then(
71
+ promises :: then(x , ggplotly ),
72
+ register_plot_events
73
+ )
62
74
} else {
63
- ggplotly(x )
75
+ register_plot_events( ggplotly(x ) )
64
76
}
65
- register_plot_events(p )
66
- p
67
77
}
68
78
69
79
register_plot_events <- function (p ) {
@@ -73,6 +83,7 @@ register_plot_events <- function(p) {
73
83
session $ userData $ plotlyShinyEventIDs ,
74
84
eventIDs
75
85
))
86
+ p
76
87
}
77
88
78
89
0 commit comments