rshinyshinyjsshinybs

Add Tooltip to navbarMenu in Shiny


I would like to add a tooltip for navbarMenu in Shiny app. Similar question asked here but, there is no answer.Here is my reproducible code

library(shiny)
library(shinyBS)

ui <- shinyUI(fluidPage(
       sidebarLayout( 
           sidebarPanel(),

           mainPanel(tabsetPanel(

             navbarMenu("Tab1",bsTooltip(id="Tab1", title="Short description  for the tab", trigger = "hover"), 
                 tabPanel("Tab1.1"),       
                 tabPanel("Tab1.2")),

            tabPanel("Tab2",tabsetPanel(
                       tabPanel("Tab2.1"),       
                       tabPanel("Tab2.2"))),

            tabPanel("Tab3",tabsetPanel(
                       tabPanel("Tab3.1"),
                       tabPanel("Tab3.2"),
                       tabPanel("Tab3.3")))
)))))
server <- function(input, output) {}
shinyApp(ui = ui, server = server)

During my research I found this solution R Shiny: Use navbarPage with bsModal by shinyBS, but for bsModel. Also, there is a procedure mentioned here which is based in java-script.I know both solutions are for tabpanel but I believe it's the same problem, which is navbarMenu and tabpanel don't have an id.
I'm statistician and I don't have background in HTML or java-script to rewrite the attribute for the tab title or navbarMenu. I hope I phrase my question in a clear manner. Thanks in advance for your time and kind help.


Solution

  • you can use HTML wenn passing the Title of the Tabs. in this case I just pt the title in a span and added the attribute titlewhich is the attribute HTML uses default for mouse-overs. For me this is much sinpler the trying to add it over shinyBS.

    library(shiny)
    library(shinyBS)
    
    ui <- shinyUI(fluidPage(
      sidebarLayout( 
        sidebarPanel(),
    
        mainPanel(tabsetPanel(
    
          navbarMenu(span("Tab1",title="Short description  for the tab" ),
                     tabPanel("Tab1.1"),       
                     tabPanel("Tab1.2")),
    
          tabPanel("Tab2",tabsetPanel(
            tabPanel("Tab2.1"),       
            tabPanel("Tab2.2"))),
    
          tabPanel("Tab3",tabsetPanel(
            tabPanel("Tab3.1"),
            tabPanel("Tab3.2"),
            tabPanel("Tab3.3")))
        )))))
    server <- function(input, output) {}
    shinyApp(ui = ui, server = server)
    

    hope this helps!