如何在Shiny中填充tinyMCE文本区域?

时间:2018-12-01 13:36:55

标签: r shiny tinymce

我正在尝试从R中填充这个tinyMCE示例中的文本区域。

看来我应该写到output $ textHolder

但是我在observe()函数中的声明没有这样做。

我正在使用tinymce网站上的示例。

我对此没有太多支持。

这是我的服务器代码:

shinyServer(function(input, output, session) {


    observe({
      print ("observe")
      output$textHolder = renderText("XXX")

    })

  output$htmlText <- renderUI({
    req(input$typedText)
    HTML(enc2utf8(input$typedText))
  })

  output$rawText <- renderText({
    req(input$typedText)
    enc2utf8(input$typedText)
  })
})

这是我的UI代码:

library(shiny)
library(shinyjs)

shinyUI(
  fluidPage(
    tags$head(
      useShinyjs(),
      tags$script(src='https://cdn.tinymce.com/4/tinymce.min.js')
    ),

    fluidRow(
      titlePanel("tinyMCE Shiny"),
      br(),
      column(width=6,
             tags$form(method="post",
                       tags$textarea(id="textHolder")
             ),
             br(),
             actionButton("fetch", "Get Results!", icon=icon("lightbulb-o"),class="btn-primary",
                          onclick = "Shiny.onInputChange('typedText', tinyMCE.get('textHolder').getContent());"),
             tags$script("tinymce.init({
                         selector:'#textHolder',
                         theme: 'modern',
                         height: 200,
                         plugins: ['advlist autolink link image lists charmap preview hr','wordcount',],
                         menubar: true,
                         toolbar: 'undo redo | bold italic | bullist | link',
                         });")
  ),
  column(width=6,
         tags$style(HTML('pre {height:240px;}')),
         tags$label(`for`="rawText", "Raw String"),
         hr(),
         tags$pre(textOutput("rawText")),
         br(),
         tags$label(`for`="htmlText", "HTML Version"),
         hr(),
         tags$pre(htmlOutput("htmlText"))
  )
      )
  )
)

1 个答案:

答案 0 :(得分:0)

您可以考虑使用ShinyMCE软件包:https://github.com/mul118/shinyMCE。 (例如,使用devtools::install_github("mul118/shinyMCE")进行安装)。

在ui方面,您将使用:

tinyMCE('editor1', 'Click to edit text')

在服务器端,您可以通过input$editor1访问html代码。

下面,我将代码集成到了您的应用中。

enter image description here

完整示例为:

library(shiny)
library(shinyMCE)

server <- function(input, output, session) { 

  output$htmlText <- renderUI({
    req(input$editor1)
    HTML(enc2utf8(input$editor1))
  })

  output$rawText <- renderText({
    req(input$editor1)
    enc2utf8(input$editor1)
  })
}

ui <- shinyUI(
  fluidPage(
    fluidRow(
      titlePanel("tinyMCE Shiny"),
      br(),
      column(width = 6,
             tinyMCE('editor1', 'Click to edit text'),
             br(),
             actionButton("fetch", "Get Results!", icon=icon("lightbulb-o"),class="btn-primary",
                          onclick = "Shiny.onInputChange('typedText', tinyMCE.get('textHolder').getContent());")
  ),
  column(width = 6,
         tags$style(HTML('pre {height:240px;}')),
         tags$label(`for`="rawText", "Raw String"),
         hr(),
         tags$pre(textOutput("rawText")),
         br(),
         tags$label(`for`="htmlText", "HTML Version"),
         hr(),
         tags$pre(htmlOutput("htmlText"))
  )
      )
  )
)


shinyApp(ui, server)