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)
id
title
trigger
size
small
or large
)...
toggleModal
is used within your Server logic to open or close a modal
window.
toggleModal(session, modalId, toggle = "toggle")
session
modalId
toggle
open
, 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))
}
)