日常

ケ・セラ・セラ

trelloのカードの並び順みたいなのをどう実装しているか

trello clone 的なやつを作っているんですが、

drag & drop でカードの並び替えとかした時の並び順をどう管理しようかと考えていた。

そこで trello の動きをちょっと見てみたらこんな感じだった。

たとえばこんな風に、あるリストに 3つのカードが登録されていたとする。

  • list
    • card1
    • card2
    • card3

まずこうしてみたところ、card3 を PUT してる内容を見ると、 pos という項目に 57344 という値が見られた。うむ、position ぽい。

  • list
    • card1
    • card3
    • card2

ふたたびこうしてみる。card2 の PUT では pos: 53248

  • list
    • card1
    • card2
    • card3

また繰り返すと、pos 値は 51200, 50176 と変化した。変化量を追うと、 -4096, -2048, -1024 ... ということのようだ。

では以下のように card4 を追加してみる。pos: 116736 だった。

  • list
    • card1
    • card2
    • card3
    • card4

さらに card5 を追加すると、pos: 182272。card6 は 247808。

この値は、最後のカードの pos + 65536 のようだ。

リロードして、card7 を追加してみると、同様に 313344 だった。

216 空けておけば妥当なのかな。16回繰り返したらどうなるんだろうと思ってやってみたら、

215040, 198656, 190464, 186368, 184320, 183296, 182784, 182528, 182400, 182336, 182304, 182288, 182280, 182276, 182274, 182273, 182272.5, 182272.25

なるほど、小数になるわけだ。

というわけでこういう実装をすることに決めた。