Chaque élément reçoit un pos
(un nombre JavaScript, donc flottant double précision). Ensuite, ils sont rendus en triant par pos
.
Lorsqu'un nouvel élément est ajouté, il est pos
est basé sur l'endroit où il se trouve dans la liste :
- bas de la liste - maximum
pos
actuellement dans la liste + un tampon (je pense1024
est utilisé) - haut de la liste - minimum
pos
actuellement dans la liste divisée par deux - milieu de la liste - moyenne de
pos
des deux éléments adjacents
L'option du milieu serait attribuée par le client ; le haut/bas peut être assigné par le client ou transmis au serveur sous forme de chaînes "top"
ou "bottom"
auquel cas le serveur exécutera la logique.
Sur le serveur, après avoir assigné le pos
au nouvel élément comme indiqué ci-dessus, l'élément est vérifié par rapport à ses voisins les plus proches pour la contiguïté - s'ils sont à moins d'une distance minimale l'un de l'autre (.01
est utilisé, je crois), ils sont étalés (potentiellement en cascade pour augmenter le pos
de toute la liste).
Je ne pense pas que ce soit la méthode idéale, mais c'est ainsi que Trello procède.