Cada item recebe um
pos
(um número JavaScript, portanto, float de precisão dupla). Em seguida, eles são renderizados classificando por pos
. Quando um novo item é adicionado, é
pos
é baseado em onde na lista está:- parte inferior da lista - máximo de
pos
atualmente na lista + um buffer (acho que1024
é usado) - topo da lista - mínimo
pos
atualmente na lista dividida por dois - meio da lista - média de
pos
dos dois itens adjacentes
A opção do meio seria atribuída pelo cliente; o top/bottom pode ser atribuído pelo cliente ou passado para o servidor como as strings
"top"
ou "bottom"
nesse caso, o servidor executará a lógica. No servidor, após atribuir o
pos
para o novo item, conforme mostrado acima, o item é verificado em relação aos vizinhos mais próximos quanto à adjacência - se eles estiverem a menos de uma distância mínima (.01
é usado, eu acredito), eles estão espalhados (potencialmente em cascata para aumentar o pos
de toda a lista). Não acho que essa seja a maneira ideal, mas é assim que o Trello faz.