The initial goal was for selectInput()
. I change a little the title.
Here is quickly the solution I've found.
I've not found a beautiful solution like escape
of DT::datatable(df,escape=1)
.
With
ui.R
font-family monospace for vertical align.
fluidRow(
div(selectInput("outputmyselectlist",
label=c("Filtre"),
choices=NULL,
width = '75%'
)
,style='font-family: Consolas,monospace;')
)
server.R
updateSelectizeInput(session, "outputmyselectlist",
server = TRUE,
choices = df,
options = list(render = I(
'{
option: function(item, escape) {
return "<div data-value=\\""+
escape(item.value)+
"\\" data-selectable=\\"\\" class=\\"option\\" >" +
(item.label.replace(/ /g, " ")) +
"</div>"
}
}'))
)
with my dataframe like that:
df0<-data.frame(value=c("a","b"), label=c("AAA","BBB"),stringsAsFactors = FALSE)
df<-df0 %>% mutate ( label=paste0(value,strrep(' ',14-nchar (value)),'|',label))
Reproducible example :
library("shiny")
library("dplyr")
library("tidyr")
ui <- fluidPage(
tags$style(type = "text/css",
HTML(".label_non_fixe_items_fixes .selectize-control {font-family: Consolas,monospace;})")),
div(
uiOutput("myselectinputUI"),
class='label_non_fixe_items_fixes')
)
server <- function(input, output, session) {
mydata.list <- reactive ({
(mtcars
%>% mutate (
myid = row_number(),
myname = rownames(mtcars)
) %>% select (myid, myname,hp)
)
})
output$myselectinputUI <- renderUI({
res <-( mydata.list()
%>% transmute (value=myid,
label= paste0(myid,
strrep(' ',2-nchar (myid)),
'|',myname,
strrep(' ',20-nchar (myname)),
'|',hp
)
)
)
list_label_value = setNames(res$value, res$label)
selectizeInput(
inputId="myselectinputUI",
label= "my select input",
choices = list_label_value,
options = list(
render = I(
'{
option: function(item, escape) {
return "<div data-value=\\""+
escape(item.value)+
"\\" data-selectable=\\"\\" class=\\"option\\" >" +
(item.label.replace(/ /g, " ")) +
"</div>"
}
}'
)
)
)
})
}
shinyApp(ui = ui, server = server)
Links :