Modal windows are similar to popups but are rendered within the original window. They can contain any combination of shiny inputs, shiny outputs, and html. Possible uses include extra controls that you don't want cluttering up the main app display or help pages to explain your apps operation.
list("bsModal") in your UI to create a modal window. It works
like list("Collapses") or list("tabPanel"), any non-named arguments
will be passed as content for the modal.
Create a button or link and assign its inputId as the trigger
in list("bsModal").
bsModal is used within the UI to create a modal window.
bsModal(id, title, trigger, ..., size)
idtitletriggersizesmall or large)...
toggleModal is used within your Server logic to open or close a modal
window.
toggleModal(session, modalId, toggle = "toggle")
sessionmodalIdtoggleopen, close, or toggle?
There is now a toggle argument in list("toggleModal") that allows
you to specify whether you want the modal to open or close.
The size argument in list("bsModal") allows you to specify the
size of the modal window. Either small or large.
library(shiny)
library(shinyBS)
shinyApp(
ui =
fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30),
actionButton("tabBut", "View Table")
),
mainPanel(
plotOutput("distPlot"),
bsModal("modalExample", "Data Table", "tabBut", size = "large",
dataTableOutput("distTable"))
)
)
),
server =
function(input, output, session) {
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
output$distTable <- renderDataTable({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# draw the histogram with the specified number of bins
tab <- hist(x, breaks = bins, plot = FALSE)
tab$breaks <- sapply(seq(length(tab$breaks) - 1), function(i) {
paste0(signif(tab$breaks[i], 3), "-", signif(tab$breaks[i+1], 3))
})
tab <- as.data.frame(do.call(cbind, tab))
colnames(tab) <- c("Bins", "Counts", "Density")
return(tab[, 1:3])
}, options = list(pageLength=10))
}
)