aboutsummaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-02-09 16:33:44 +0800
committerMistivia <i@mistivia.com>2025-02-09 16:33:44 +0800
commitde8814ced2e1624d3b87423a6ac971c12f117921 (patch)
tree7ee681d781496898f3859774b36c96ceb0f12675 /src/components
parent0a6ed62a3127773acfb1534248edd5a5613aaed0 (diff)
support custom card order
Diffstat (limited to 'src/components')
-rw-r--r--src/components/CardThumb.svelte5
-rw-r--r--src/components/MainPanel.svelte50
-rw-r--r--src/components/RightPanel.svelte4
3 files changed, 24 insertions, 35 deletions
diff --git a/src/components/CardThumb.svelte b/src/components/CardThumb.svelte
index be6af81..2f722a9 100644
--- a/src/components/CardThumb.svelte
+++ b/src/components/CardThumb.svelte
@@ -3,20 +3,21 @@
import {setLeftPanelCard} from '../control/left_panel';
import { cardImageUrl } from '../utils';
- let {id, area} = $props();
+ let {id, area, idx} = $props();
function onhover() {
setLeftPanelCard(id);
}
function onDragStart(e) {
- e.dataTransfer.setData('text', JSON.stringify({id, area}))
+ e.dataTransfer.setData('text', JSON.stringify({id, area, idx}))
}
</script>
{#if id}
<img
+ style="margin:2px;"
draggable="true"
onmouseover={onhover}
onfocus={onhover}
diff --git a/src/components/MainPanel.svelte b/src/components/MainPanel.svelte
index f9f0d74..2d89b68 100644
--- a/src/components/MainPanel.svelte
+++ b/src/components/MainPanel.svelte
@@ -55,32 +55,21 @@
});
}
- function onDrop(to, event) {
+ function onDrop(to, event, targetIdx) {
event.preventDefault();
+ event.stopPropagation();
const data = JSON.parse(event.dataTransfer.getData('text'));
let from = data.area;
if (from === 'search') {
if (to === 'main') {
- deckOps.add2main(data.id);
+ deckOps.add2main(data.id, targetIdx);
} else if (to === 'side') {
- deckOps.add2side(data.id);
+ deckOps.add2side(data.id, targetIdx);
} else if (to === 'extra') {
- deckOps.add2extra(data.id);
- }
- } else if (from === 'main') {
- if (to == 'side') {
- deckOps.main2side(data.id);
- }
- } else if (from === 'extra') {
- if (to == 'side') {
- deckOps.extra2side(data.id);
- }
- } else if (from === 'side') {
- if (to == 'main') {
- deckOps.side2main(data.id);
- } else if (to == 'extra') {
- deckOps.side2extra(data.id);
+ deckOps.add2extra(data.id, targetIdx);
}
+ } else {
+ deckOps.move(from, to, data.idx, targetIdx);
}
}
@@ -99,30 +88,30 @@
<div class="deck-section">
<div class="deck-group">
<h3>主卡组({$deck.main.length})</h3>
- <div role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("main", e)} class="card-grid main-deck">
- {#each $deck.main as card}
- <div class="card-grid-thumb">
- <CardThumb id={card} area="main" />
+ <div role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("main", e, -1)} class="card-grid main-deck">
+ {#each $deck.main as card, i}
+ <div class="card-grid-thumb" role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("main", e, i)}>
+ <CardThumb id={card} idx={i} area="main" />
</div>
{/each}
</div>
</div>
<div class="deck-group">
<h3>额外卡组({$deck.extra.length})</h3>
- <div role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("extra", e)} class="card-grid extra-deck">
- {#each $deck.extra as card}
- <div class="card-grid-thumb">
- <CardThumb id={card} area="extra" />
+ <div role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("extra", e, -1)} class="card-grid extra-deck">
+ {#each $deck.extra as card, i}
+ <div class="card-grid-thumb" role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("extra", e, i)}>
+ <CardThumb id={card} idx={i} area="extra" />
</div>
{/each}
</div>
</div>
<div class="deck-group">
<h3>副卡组({$deck.side.length})</h3>
- <div role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("side", e)} class="card-grid side-deck">
- {#each $deck.side as card}
- <div class="card-grid-thumb">
- <CardThumb id={card} area="side" />
+ <div role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("side", e, -1)} class="card-grid side-deck">
+ {#each $deck.side as card, i}
+ <div class="card-grid-thumb" role="region" ondragover={(e)=>e.preventDefault()} ondrop={(e)=>onDrop("side", e, i)}>
+ <CardThumb id={card} idx={i} area="side" />
</div>
{/each}
</div>
@@ -165,7 +154,6 @@
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(52px, 1fr));
- gap: 5px;
grid-auto-flow: dense;
overflow-y: auto;
padding: 10px;
diff --git a/src/components/RightPanel.svelte b/src/components/RightPanel.svelte
index 03cc272..c9904fa 100644
--- a/src/components/RightPanel.svelte
+++ b/src/components/RightPanel.svelte
@@ -11,7 +11,7 @@
event.preventDefault();
const data = JSON.parse(event.dataTransfer.getData('text'));
if (data.area === 'main' || data.area === 'side' || data.area === 'extra') {
- deckOps.deleteCard(data.area, data.id);
+ deckOps.deleteCard(data.area, data.idx);
}
}
</script>
@@ -24,7 +24,7 @@
{#each $showingCards as card}
<div class="card-item">
<div class="card-thumbnail">
- <CardThumb id= {card.id} area="search" />
+ <CardThumb id={card.id} idx={-1} area="search" />
</div>
<span>{card.name}</span>
</div>