闪亮的html输出对象,可以使用html代码轻松复制和粘贴

时间:2013-08-13 09:14:56

标签: html r shiny

我想创建一个Shiny R应用程序,它可以使用用户输入无格式的Stata代码,添加html标签,并返回整个代码块,以便轻松复制并粘贴到html发布场所,如博客或网页。

我已经有了可以处理格式A Stata HTML syntax highlighter in R的R代码。大多数Shiny实现似乎都很容易。我遇到的主要挑战是创建一个html文本框或其他对象,可以轻松地从Shiny的server.R中获取一个反应元素,并将其返回给用户而不格式化html标签。

示例:

通过文本框输入的Stata代码

clear
set obs 4000
gen id = _n
gen eta1 = rnormal()
gen eta2 = rnormal()

XX Shiny提交按钮XX

在另一个文本框中返回

<span style="color: #9900FF">set</span> <span style="color: #0000CC"><b>obs</b></span> 4000
<span style="color: #0000CC"><b>gen</b></span> id = <span style="color: #9900FF">_n</span>
<span style="color: #0000CC"><b>gen</b></span> eta1 = <span style="color: #9900FF">rnormal</span>()
<span style="color: #0000CC"><b>gen</b></span> eta2 = <span style="color: #9900FF">rnormal</span>()

总的来说,我认为对于一个可能非常简单的答案来说,这通常是一个很长的问题。谢谢你的考虑。

1 个答案:

答案 0 :(得分:2)

renderText()不解析HTML标记。例如。如果你这样做:

output$code <- renderText({

  paste0(
    '<span style="color: #9900FF">set</span> <span style="color: #0000CC"><b>obs</b></span> 4000',
    '<span style="color: #0000CC"><b>gen</b></span> id = <span style="color: #9900FF">_n</span>',
    '<span style="color: #0000CC"><b>gen</b></span> eta1 = <span style="color: #9900FF">rnormal</span>',
    '<span style="color: #0000CC"><b>gen</b></span> eta2 = <span style="color: #9900FF">rnormal</span>'  
  )

})

这是您的ui.R

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("Code"),

  sidebarPanel(

  ),

  mainPanel(
    verbatimTextOutput("code")
  )

))

内容仅仅是文字。


但是既然你还没有发布你的ui.R(或index.html),我不确定你是如何渲染输出的。如果您在显示原始文本而不是解析HTML时遇到问题,则可以随时将<替换为&lt;,将>替换为&gt;,如下所示:

html <- '<span>text</span>'
x <- gsub('<', '&lt;', html)
gsub('>', '&gt;', x)

这将生成:&lt;span&gt;text&lt;/span&gt;,不应在浏览器中显示为已解析的HTML。