Как выделить текст в verbatimTextOutput по умолчанию в Shiny? - PullRequest
2 голосов
/ 23 октября 2019

Это связанный с моим предыдущим вопросом вопрос ( Возможно ли иметь verbatimTextOutput фиксированной ширины и иметь текст, изменяющий строки в Shiny? ). У меня есть следующее блестящее приложение (https://yuchenw.shinyapps.io/Shiny_verbatimtext_fixed/) с verbatimTextOutput, которое может отображать длинные тексты. Можно ли выбрать эти тексты по умолчанию? Примером может служить поведение кнопки закладки. Как показано на следующем снимке экранаКогда появляется всплывающее окно с закладками, тексты уже выделены. Я хотел бы воспроизвести то же поведение, используя verbatimTextOutput.

enter image description here

Код

library(shiny)

ui <- function(request){
  fluidPage(
    tags$style(type='text/css', '#txt_out {white-space: pre-wrap;}'),
    column(
      width = 6,
      textInput(inputId = "txt", label = "Type in some texts",
                value = paste0(rep(letters, 10), collapse = "")),
      strong("Show the texts"),
      verbatimTextOutput("txt_out"),
      br(),
      bookmarkButton()
    )
  )
}
server <- function(input, output, session){
  output$txt_out <- renderText({
    input$txt
  })
}
enableBookmarking("url")
shinyApp(ui, server)

1 Ответ

1 голос
/ 28 октября 2019

Спасибо за помощь @ ismirsehregal. Здесь я поделился обойти этот вопрос. Этот ответ использует textAreaInput в режиме только для чтения, а не verbatimTextOutput, как я первоначально просил. Тем не менее, я доволен результатом и окончательным появлением textAreaInput.

Я научился выбирать тексты на основе этого поста (https://stackoverflow.com/a/50745110/7669809). Я также узнал, как установить режим только для чтениядля textAreaInput из этого поста ( Сделать текстовую область доступной только для чтения с помощью jquery ). Вот мой код.

library(shiny)

ui <- function(request){
  fluidPage(
    column(
      width = 6,
      tags$head(
        tags$script("
      Shiny.addCustomMessageHandler('selectText', function(message) {
        $('#txt_out').select();
        $('#txt_out').prop('readonly', true);
      });
    ")
      ),
      textInput(inputId = "txt", label = "Type in some texts",
                value = paste0(rep(letters, 10), collapse = "")),
      textAreaInput("txt_out", label = "Show the texts", heigh = "300px"),
      br(),
      bookmarkButton()
    )
  )
}
server <- function(input, output, session){
  observeEvent(input$txt, {
    updateTextAreaInput(session = session, inputId = "txt_out", value = input$txt)
  })
  observeEvent(input$txt_out, {
    session$sendCustomMessage("selectText", "select")
  })
}
enableBookmarking("url")
shinyApp(ui, server)

Вот как это выглядит при запуске приложения.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...