A cada elemento se le asigna un pos
(un número de JavaScript, por lo que flota de doble precisión). Luego, se procesan ordenándolos por pos
.
Cuando se agrega un nuevo elemento, es pos
se basa en el lugar de la lista en el que se encuentra:
- parte inferior de la lista - máximo
pos
actualmente en la lista + un búfer (creo que1024
se usa) - parte superior de la lista - mínimo
pos
actualmente en la lista dividida por dos - medio de la lista - promedio de
pos
de los dos elementos adyacentes
La opción intermedia la asignaría el cliente; el cliente puede asignar la parte superior/inferior o pasarla al servidor como las cadenas "top"
o "bottom"
en cuyo caso el servidor realizará la lógica.
En el servidor, después de asignar el pos
al nuevo elemento como se muestra arriba, el elemento se compara con sus vecinos más cercanos para determinar la adyacencia, si están separados por menos de una distancia mínima (.01
se usa, creo), están dispersos (potencialmente en cascada para aumentar el pos
de toda la lista).
No creo que esta sea la forma ideal, pero así es como lo hace Trello.