docs: def on_touch_up(self, touch):
          """If a card is being dragged, put it in the place it was just dropped
          and trigger a layout.
  
          """
          if (
                  'card' not in touch.ud or
                  'layout' not in touch.ud or
                  touch.ud['layout'] != self
          ):
              return
          if hasattr(touch.ud['card'], '_topdecked'):
              self.canvas.after.remove(touch.ud['card']._topdecked)
              del touch.ud['card']._topdecked
          if None not in (self.insertion_deck, self.insertion_card):
              # need to sync to adapter.data??
              card = touch.ud['card']
              del card.parent.decks[card.deck][card.idx]
              for i in range(0, len(card.parent.decks[card.deck])):
                  card.parent.decks[card.deck][i].idx = i
              deck = self.decks[self.insertion_deck]
              if self.insertion_card >= len(deck):
                  deck.append(card)
              else:
                  deck.insert(self.insertion_card, card)
              card.deck = self.insertion_deck
              card.idx = self.insertion_card
              self.decks[self.insertion_deck] = deck
              self.insertion_deck = self.insertion_card = None
          self._trigger_layout()