plotOutput now takes clickId and hoverId params that tell Shiny
where to send click and hover events for that plot. The server.R
file can listen on input$<clickId> and/or input$<hoverId>. In
both cases, the resulting value will have numeric x and y elements
that indicate the mouse position in user coordinates. In the case
of hover events, it's also possible to have a NULL value which
means the mouse is not currently hovering over the plot.
This makes it possible for packaged Shiny components to only ask
for the session variable to get access to all inputs and outputs
(along with the other good stuff on session).
- If an output is bound in the UI before it exists on the server, the
server will suspend the new output until something else causes
manageHiddenOutputs to be triggered. The refactor in shiny.R sets
the suspended flag to .shouldSuspend.
- As part of the previous refactor, we don't set suspendOnHidden in
defineOutput; instead we leave it empty and .shouldSuspend knows
what the default should be.
- In shiny.js, unbound controls were not being suspended. This was
fixed by having sendOutputHiddenState be stateful; anything in
a visible state that disappears on the next iteration is marked
as hidden. Also unbindAll now calls sendOutputHiddenState.
With this commit, runApp can now accept a list instead of a path.
This list should have elements named "ui" and "server" that contain
what would normally go in shinyUI and shinyServer, respectively.
(Note that there is no equivalent to global.R, nor should there
need to be since you can just directly execute in the global env
before calling runApp.)
Example:
runApp(list(
ui = bootstrapPage(
numericInput('n', 'Number of obs', 100),
plotOutput('plot')
),
server = function(input, output) {
output$plot <- renderPlot({ hist(runif(input$n)) })
}
))