ナイモル大会結果 HTML生成

スプシURLを貼るだけで自動読込。上位チーム・パーフェクトモルック賞を自動抽出してHTML生成。

① スプシから自動読込

編集済みスプシ(Ninja Tables用)のURLを貼って読み込み。上位チーム・PM賞を自動抽出。

または CSVを直接貼り付け
② 大会基本情報
③ 上位入賞チーム(自動入力済み)
④ パーフェクトモルック賞(自動入力済み)
⑤ ギャラリー情報
自動保存済み
`; } function buildPerfect(pms, eventSlug) { if (!pms.length) return ''; const teamBase = `/nice_molkky_japan_details/${eventSlug}/teams`; let items = ''; pms.forEach(pm => { const nameTag = pm.slug ? `${pm.name}` : `${pm.name}`; items += `
${nameTag} ${pm.match}
`; }); return `

⚡ パーフェクトモルック賞

5ターンで50点獲得(=パーフェクトモルック)を達成したチームに贈られます。
パーフェクトモルック賞を受賞したチームにはNMP(ナイモルポイント)を付与します。

${items}
`; } function buildFull(title, podiumHTML, ninjaId, perfectHTML, galleryUrl, galleryThumb, galleryTitle) { let html = `

${title}の大会結果をお知らせいたします。

\n\n`; html += podiumHTML + '\n\n'; html += `

📊 全順位表

\n\n`; html += `

大会参加チーム全ての順位・成績を掲載しています。

\n\n`; html += ninjaId ? `[ninja_tables id="${ninjaId}"]\n\n` : `\n\n`; if (perfectHTML) html += perfectHTML + '\n\n'; if (galleryUrl) { html += `\n`; } return html; } // ===== Tabs / Copy / Status ===== let currentTab = 'all'; function switchTab(tab, btn) { currentTab = tab; document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); ['all','podium','perfect','preview'].forEach(t => { const el = document.getElementById('tab' + t.charAt(0).toUpperCase() + t.slice(1)); if (el) el.style.display = t === tab ? 'block' : 'none'; }); document.getElementById('copyBtn').style.display = tab === 'preview' ? 'none' : 'block'; } function copyOutput() { let text = ''; if (currentTab === 'all') text = document.getElementById('codeAll').textContent; else if (currentTab === 'podium') text = document.getElementById('codePodium').textContent; else if (currentTab === 'perfect') text = document.getElementById('codePerfect').textContent; navigator.clipboard.writeText(text).then(() => { const btn = document.getElementById('copyBtn'); btn.textContent = 'コピー完了!'; btn.classList.add('copied'); setTimeout(() => { btn.textContent = 'コピー'; btn.classList.remove('copied'); }, 2000); }); } function showStatus(type, msg) { const el = document.getElementById('status'); el.className = `status show ${type}`; el.textContent = msg; if (type === 'success') setTimeout(() => el.classList.remove('show'), 3000); }