Modal windows are a great way to deliver help-documentation, although they certainly have other uses. The first step is to define a modal widow, giving it an id.

bs_modal(id = "modal", title = "I'm a modal", body = "Yes, I am.")

To allow activation of the modal window, attach its id to a button (or link).

bs_button("Click for modal") %>%
  bs_attach_modal(id_modal = "modal")

The verb attach implies that you can attach an id to as many link tags you like. Thus:

bs_button("New button, same modal") %>%
  bs_attach_modal(id_modal = "modal")

Let’s look at a more-involved example using all of the arguments for bs_modal().

In the example above, body is text; usually, you will want the body to HTML. One way to compose the HTML for the body is to write it as a Markdown file, then use the helper function shiny::includeMarkdown() to render it into into HTML.

The default footer is simply a “Close” button, which is made using the helper function bs_modal_closebutton(). You can compose your own footer, using this function to customize your close-button.

Finally, the size can be "small", "medium", or "large" - the defualt is "medium".

bs_modal(
  id = "modal_markdown", 
  title = "Using Markdown",
  body = includeMarkdown(system.file("markdown", "modal.md", package = "bsplus")),
  footer = tags$span(
    tags$span(class = "well", "Hello!"),
    bs_modal_closebutton("Goodbye!")
  ),
  size = "large"
)
bs_button("Large modal") %>%
  bs_attach_modal(id_modal = "modal_markdown")

Reference

For more information, please see the Bootstrap JavaScript page.