2017-10-08 50 views
0

所以我的Shiny應用程序顯示代碼。我想要顯示格式化的代碼,所以我使用高亮js庫。我得到這個在模態窗口外面工作,但不在裏面。 modalDialog函數似乎不接受我的CSS和JS輸入。閃亮的模態窗口不接受js和css

的代碼塊的是,工作沒有一個模式窗口:

library(shiny) 
shinyApp(
    ui = basicPage(
    includeScript("/Users/stani/GitHub/bamlss.vis/inst/srcjs/highlight.pack.js"), 
    includeCSS("/Users/stani/GitHub/bamlss.vis/inst/srcjs/default.css"), 
    HTML('<script>hljs.initHighlightingOnLoad();</script>'), 
    tags$pre(tags$code(' 
         for (i in 1:10) { 
         print(i) 
         }')) 
), 
    server = function(input, output) {} 
) 

輸出看起來像this,我們可以看到格式化的作品。

然而,當我使用此代碼顯示模式窗口,這是行不通的:

library(shiny) 

shinyApp(
    ui = basicPage(
    actionButton("show", "Show modal dialog") 
), 
    server = function(input, output) { 
    observeEvent(input$show, { 
     showModal(modalDialog(
     title = "Important message", 
     # Include JS, CSS for syntax highlighting 
     includeScript("/Users/stani/GitHub/bamlss.vis/inst/srcjs/highlight.pack.js"), 
     includeCSS("/Users/stani/GitHub/bamlss.vis/inst/srcjs/default.css"), 
     HTML('<script>hljs.initHighlightingOnLoad();</script>'), 
     tags$pre(tags$code(' 
for (i in 1:10) { 
    print(i) 
}')) 
    )) 
    }) 
    } 
) 

相反,輸出看起來像this。我們可以看到代碼顯示但沒有格式化。爲什麼?

回答

0

問題在於讀取js腳本的時間是錯誤的。它必須在通用用戶界面中調用。如果有人遇到同樣的問題,這裏是我的解決方案:

library(shiny) 

shinyApp(
    ui = basicPage(
    includeCSS("/Users/stani/GitHub/bamlss.vis/inst/srcjs/default.css"), 
    includeScript("/Users/stani/GitHub/bamlss.vis/inst/srcjs/highlight.pack.js"), 
    actionButton("show", "Show modal dialog") 
), 
    server = function(input, output) { 
    observeEvent(input$show, { 
     showModal(modalDialog(
     title = "Important message", 
     # Include JS, CSS for syntax highlighting 
     tags$pre(tags$code(' 
          for (i in 1:10) { 
          print(i) 
          }')), 
     HTML('<script>$("pre code").each(function(i, block) { 
      hljs.highlightBlock(block); 
     });</script>') 
    )) 
    }) 
    } 
)