diff options
| author | Mistivia <i@mistivia.com> | 2025-02-20 13:26:43 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-02-20 13:26:43 +0800 |
| commit | 2ebdfe109bbff27b35a5e9ae208dabddd266191e (patch) | |
| tree | ed63233177008c7bef134606fbf0254754e91fb2 /src/components/MainPanel.svelte | |
| parent | a7488d695b3f647d657f6b3482d5333e1e869771 (diff) | |
change project layout
Diffstat (limited to 'src/components/MainPanel.svelte')
| -rw-r--r-- | src/components/MainPanel.svelte | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/src/components/MainPanel.svelte b/src/components/MainPanel.svelte deleted file mode 100644 index f023dd9..0000000 --- a/src/components/MainPanel.svelte +++ /dev/null @@ -1,171 +0,0 @@ -<script lang="js"> - import CardThumb from './CardThumb.svelte'; - import { deck, setDeck, deckOps } from '../control/deck'; - import { - parseYdk, - genYdk, - genYdke, - downloadStringAsFile, - } from '../utils'; - - let fileInput; - - function openDeck() { - fileInput.click(); - } - - function loadDeck(event) { - const file = event.target.files[0]; - if (file) { - const reader = new FileReader(); - reader.onload = (event) => { - let content = event.target.result; - setDeck(parseYdk(content)); - }; - reader.readAsText(file); - } - } - - function saveDeck() { - let deckString = genYdk($deck); - downloadStringAsFile(deckString) - } - - function copyDeck() { - let deckString = genYdk($deck); - navigator.clipboard.writeText(deckString) - .then(() => { - alert('YDK卡组码已复制到剪贴板'); - }) - .catch(err => { - alert("失败!"); - }); - } - - function shareDeck() { - let url = window.location.href; - url = url.split('#')[0] - url = url + '#' + genYdke($deck); - navigator.clipboard.writeText(url) - .then(() => { - alert('分享链接已复制到剪贴板'); - }) - .catch(err => { - alert("失败!"); - }); - } - - 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, targetIdx); - } else if (to === 'side') { - deckOps.add2side(data.id, targetIdx); - } else if (to === 'extra') { - deckOps.add2extra(data.id, targetIdx); - } - } else { - deckOps.move(from, to, data.idx, targetIdx); - } - } - - -</script> - -<input bind:this={fileInput} style="display:none;" onchange={loadDeck} type="file" class="file-input" accept=".ydk" /> - -<div class="middle-panel"> - <div class="control-bar"> - <button class="btn" onclick={openDeck}>打开</button> - <button class="btn" onclick={saveDeck}>保存</button> - <button class="btn" onclick={copyDeck}>复制到剪贴板</button> - <button class="btn" onclick={shareDeck}>分享</button> - </div> - <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, -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, -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, -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> - </div> - </div> -</div> - -<style> - -.middle-panel { - width: 55%; - padding: 20px; - background-color: #fff; - overflow-y: auto; -} - -.control-bar { - margin-bottom: 20px; -} - -.btn { - padding: 8px 20px; - margin-right: 10px; - background-color: #4CAF50; - color: white; - border: none; - border-radius: 4px; - cursor: pointer; -} - -.deck-group { - margin-bottom: 30px; -} - -.deck-group h3 { - margin-bottom: 10px; - color: #333; -} - -.card-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(52px, 1fr)); - grid-auto-flow: dense; - overflow-y: auto; - padding: 10px; - border: 1px solid #ddd; - border-radius: 4px; - min-height: 80px; -} - -.card-grid-thumb { - aspect-ratio: 1/1.4; - border-radius: 5px; -} - - -</style> |
