I am using Rshinydashboard and I have ran into an issue when I try and include a html document in my app using includeHTML. Once the menuItems & menSubItems are expanded, they can not be retracted. I have explored other solutions and have found none. If you have any idea what may be the problem or have another way of including a html report in an app I would appreciate your help. Please see the code below and help if you can!
Create a RMD file to create a html report (if you don't have one lying around)
--- title: "test" output: html_document --- ## Test HTML Document This is just a test.
Build a Test html Report
# Build Test HTML file rmarkdown::render( input = "~/test.rmd", output_format = "html_document", output_file = file.path(tempdir(), "Test.html") )
Build Test App
ui <- dashboardPage( dashboardHeader(), dashboardSidebar( sidebarMenu( id = "sidebarmenu", menuItem( "A", tabName = "a", icon = icon("group", lib="font-awesome"), menuSubItem("AA", tabName = "aa"), conditionalPanel( "input.sidebarmenu === 'aa'", sliderInput("b", "Under sidebarMenu", 1, 100, 50) ), menuSubItem("AB", tabName = "ab") ) ) ), dashboardBody( tabItems( tabItem(tabName = "a", textOutput("texta")), tabItem(tabName = "aa", textOutput("textaa"), uiOutput("uia")), tabItem(tabName = "ab", textOutput("textab")) ) ) ) server <- function(input, output) { output$texta <- renderText("showing tab A") output$textaa <- renderText("showing tab AA") output$textab <- renderText("showing tab AB") output$uia <- renderUI(includeHTML(path = file.path(tempdir(), "Test.html"))) } shinyApp(ui, server)
2 Answers
Answers 1
That is because you included a complete HTML file in the shiny UI, and you should only include the content between <body>
and </body>
(quoted from yihui)
A solution could be to run an extra line to fix your Test.html
automatically after running rmarkdown::render()
:
xml2::write_html(rvest::html_node(xml2::read_html("Test.html"), "body"), file = "Test2.html")
and then have
output$uia <- renderUI(includeHTML(path = file.path(tempdir(), "Test2.html")))
Answers 2
You just forget about curly brackets - renderUI need an expression as argument.
renderUI({ includeHTML(...) })
Code
output$uia <- renderUI({includeHTML(path = file.path(tempdir(), "Test.html"))})
works fine.
Or you can use this code
output$uia <- renderUI(includeMarkdown(path = file.path("test.rmd")))
In this case you need to specify the path to the file test.rmd, here it is located in the same directory with source file.
sb game hacker
ReplyDelete