Modals

Description

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.

Details

Use 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").

Components

bsModal

bsModal is used within the UI to create a modal window.

Usage

bsModal(id, title, trigger, ..., size)

Parameters

id
A unique identifier for the modal window
title
The title to appear at the top of the modal
trigger
The id of a button or link that will open the modal.
size
Optional What size should the modal be? (small or large)
...
UI elements to include within the modal

toggleModal

toggleModal is used within your Server logic to open or close a modal window.

Usage

toggleModal(session, modalId, toggle = "toggle")

Parameters

session
The session object passed to function given to shinyServer.
modalId
The id of the modal window you want to open/close
toggle
Should the modal window open, close, or toggle?

Changes

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.

Example



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))

 }
)