Задержка и истечение срока годности inyBS::bsTooltip
Можно ли отложить всплывающую подсказку и истечь через несколько секунд?
require(shiny)
require(shinyBS)
shinyApp(ui = fluidPage(
shinyjs::useShinyjs(),
bsTooltip(id = 'input', title = "Lets delay this appearing for 1s and force disappear after 5s",
placement = "bottom", trigger = "hover", options = list(delay = list(show=1000, hide=3000))),
sidebarLayout(
sidebarPanel(
selectInput(inputId = 'input', label = 'input', choices = c('cats','dogs'))
),
mainPanel()
)
)
, server = function(input, output){})
1 ответ
shinyBS::bsTooltip
не может правильно сериализовать вложенные options
списки в https://github.com/ebailey78/shinyBS/blob/shinyBS3/R/Tooltips_and_Popovers.R#L129
options
объект в конечном итоге выглядит как { delay: "list(show = 1000, hide = 3000)" }
К сожалению, похоже, что ShinyBS более не поддерживается, или исправление стоило бы представить.
Я предложу обходной путь - используя shinyBS::addTooltip
который сериализует options
правильно.
require(shiny)
require(shinyBS)
shinyApp(
ui = fluidPage(
# shinyjs::useShinyjs(),
shinyBS:::shinyBSDep,
sidebarLayout(
sidebarPanel(
selectInput(inputId = 'input', label = 'input', choices = c('cats','dogs'))
),
mainPanel()
)
),
server = function(input, output, session) {
addTooltip(session, id = 'input', title = "Lets delay this appearing for 1s and force disappear after 5s",
placement = "bottom", trigger = "hover", options = list(delay = list(show=1000, hide=3000)))
}
)
Или просто используя Bootstrap напрямую.
Я использовал tipify. Так что мой код был похож на:
tipify(
element,
title = "some title",
options = list("delay" = 1000)
)
Проблема была: задержка должна быть числовой, но функция createTooltipOrPopoverOnUI ( https://github.com/ebailey78/shinyBS/blob/shinyBS3/R/Tooltips_and_Popovers.R) поместит знаки кавычек вокруг всех аргументов:
options = paste0("{'", paste(names(options), options, sep = "': '", collapse = "', '"), "'}")
Так что я сделал это: я не горжусь этим, но это сработало:
options = list("delay': 1000, 'it" = "sucks")