Atualização: Aqui está uma explicação gráfica do que eu quero: Existem recursos: 1. redimensionar com o mouse e 2. girar o texto.
Esta é uma pergunta complementar a este arrastar e soltar com brilhantejqui para uma tabela de grade .
Primeira resposta: estou tentando tornar o item ou botão com o rótulo A redimensionável, como explicado aqui https://yang-tang.github.io/shinyjqui/ : 'Redimensionável: altere o tamanho de um elemento usando o mouse.'
Isso é possível? Tentei a função genérica do pacote jqui_sortable
e também um código JS customizado como no exemplo abaixo:
library(shiny)
library(shinyjqui)
connections <- paste0("droppable_cell_", 1) # id of the grid cells
ui <- fluidPage(
tags$head(
tags$script(
JS(
"
$(document).on('shiny:connected', function() {
$('#letters').resizable({
alsoResize: '.shinyjqui-sortable-item',
minHeight: 20,
minWidth: 20
});
});
$(function() {
$('[id^=droppable_cell]').sortable({
connectWith: '#letters',
drop: function(event, ui) {
$(this).append(ui.draggable);
}
})
});
"
)
),
# some styling
tags$style(
HTML(
"
.grid-table {
width: 150px;
border-collapse: collapse;
}
.grid-cell {
width: 100%;
height: 200px;
border: 1px solid black;
background-color: white;
text-align: center;
margin: 0;
padding: 5px;
}
.grid-cell-text {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
background-color: steelblue;
color: white;
font-size: 18px;
}
.droppable-cell {
background-color: lightgray;
}
.table-container {
display: flex;
position: absolute;
left: 10px;
top: 10px;
margin-top: 0px;
overflow: hidden;
}
"
)
)
),
div(
class = "table-container",
div(
class = "grid-table",
id = "my_grid",
div(
class = "grid-row",
div(class = "grid-cell grid-cell-text", "my_grid"),
div(id = "droppable_cell_1", class = "grid-cell droppable-cell", ""),
)
),
orderInput('letters', 'Letters', items = LETTERS[1],
connect = connections) # defined above
)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
Aqui está uma abordagem para implementar os dois recursos.
Para os botões redimensionáveis, o seu
JS
já é bom, mas você deve aplicá-lo em.btn
, não em#letters
.Os botões girados podem ser obtidos por
Isto terá os seguintes efeitos:
Se um botão for redimensionado (é claro que você pode excluir ou alterar esse gatilho), o botão será girado 270 graus. Observe que o mais desejável é girar apenas o texto do botão, não o botão em si, mas acho que é preciso manipular mais
HTML
a fundo para conseguir isso. Observe também quewriting-mode: sideways-rl
é adequado para isso, mas infelizmente atualmente não é compatível com todos os navegadores.Como os botões possuem
text-align: center
evertical-align: middle
por padrão,line-height: $(this).height().toString() + 'px'
é suficiente para configurar que o texto do botão (aqui: "A") sempre será exibido no centro do botão após o redimensionamento.É assim que ficaria após o redimensionamento: