A orderInput()
função do shinyjqui
pacote utiliza seis classes de botões Bootstrap predefinidas para estilizar os itens que exibe. Esses estilos podem ser especificados usando o item_class
parâmetro. Para mais detalhes, consulte a documentação .
Tento adicionar classes adicionais, a função orderInput()
, que parece ter sido projetada para aceitar apenas as seis classes de botão Bootstrap default
predefinidas ( ,,,,,,, ) .primary
success
info
warning
danger
Isso é possível?
library(shiny)
library(shinyjqui)
ui <- fluidPage(
tags$head(
tags$style(
HTML("
.grey { background-color: grey; color: white; }
")
)
),
uiOutput("custom_orderInput")
)
server <- function(input, output, session) {
output$custom_orderInput <- renderUI({
tagList(
orderInput('default', 'default', items = 1:3, item_class = 'default'),
orderInput('primary', 'primary', items = 1:3, item_class = 'primary'),
orderInput('success', 'success', items = 1:3, item_class = 'success'),
orderInput('info', 'info', items = 1:3, item_class = 'info'),
orderInput('warning', 'warning', items = 1:3, item_class = 'warning'),
orderInput('danger', 'danger', items = 1:3, item_class = 'danger'),
orderInput('grey', 'grey', items = 7:9, item_class = 'grey')
)
})
}
shinyApp(ui, server)
Atualização: Implementada a sugestão de @Stéphane Laurent:
alterado
.grey > button
com#grey > .btn
removidolibrary(shinyjs)
euseShinyjs()
aumento de 50 para 75A função orderInput() do brilhantejqui foi projetada com as classes de botão Bootstrap em mente. Se a função não oferece suporte nativo a classes personalizadas, talvez seja necessário aplicar um hack para contornar isso.
Você definiu a classe .grey corretamente, mas se orderInput() não oferecer suporte direto a classes personalizadas, um método seria usar JavaScript para modificar o atributo de classe dos elementos HTML renderizados depois de terem sido criados pelo Shiny.
Talvez você possa tentar esta solução alternativa para corrigir seu problema:
Inclui uma
shinyjs
função para executar JS personalizado. Execute um pequeno script JS para adicionar sua classe personalizada aos elementos desejados após eles serem renderizados. Agora você pode modificar seu código existente para conseguir isso:Desta forma, utilizando o
shinyjs
pacote para integrar JS customizado. Depois que o aplicativo Shiny se conecta, o JavaScript espera um pouco (50 ms neste caso, mas você pode ajustar conforme necessário) e então adiciona a classe .grey aos elementos do botão dentro do.grey
pai. Também definimos item_class como 'default' como espaço reservado, que será substituído por nosso JS.A resposta de @ 0xe1λ7r é boa. Dito isto, você pode evitar o uso de
setTimeout
which implica a escolha do atraso e usarsetInterval
eclearInterval
em vez disso:Com este código, a existência do grupo de itens é verificada a cada período de 10 ms após a conexão do Shiny, e uma vez detectada a nova classe é adicionada e então o código é destruído.