You can get the tabPanel titles via Javascript. Here's a simple example.
library(shiny)
ui <- fluidPage(
tags$script(type="text/javascript", src = "tabinfo.js"),
titlePanel(div("Tab names")),
sidebarLayout(
sidebarPanel(),
mainPanel(
tabsetPanel(type = "tab", id= "tabPanel1",
tabPanel("TabName1", p(), textOutput("names")),
tabPanel("TabName2")
)
)
)
)
server <- function(input, output) {
output$names <- renderText({
input$tabNames
})
}
shinyApp(ui = ui, server = server)
tabinfo.js:
$(document).on("shiny:connected", function(e) {
tabNames = []
var links = document.getElementsByTagName("a");
for (var i = 0, len = links.length; i < len; i++) {
if (links[i].getAttribute("href").indexOf("#tab-") == 0) {
tabNames.push(links[i].getAttribute("data-value"));
}
}
Shiny.onInputChange("tabNames", tabNames);
});